APP下载

基于C#、Grid++ Report的自定义通用报表模块的设计与实现

2022-04-28

大众科技 2022年2期
关键词:设计者报表语句

唐 毅

基于C#、Grid++ Report的自定义通用报表模块的设计与实现

唐 毅

(广西师范大学出版社集团有限公司,广西 桂林 541004)

随着现代信息技术的不断发展,企业信息化管理系统已经成为一种重要应用,其中的报表统计模块已成为企业决策的重要模块。然而,一些传统的报表模块,存在维护困难、灵活性差等问题。文章阐述了一种运用C#语言,结合Grid++ Report报表设计器、支持自定义、个性化配置的报表模块的设计与实现方法。

C#;Grid++ Report;通用报表;管理信息系统

引言

随着现代信息技术的不断发展,世界已跨入了“互联网+”大数据时代,各行各业也都需要管理信息系统来支撑业务运行。管理信息系统会收集和产生大量的数据。这些系统在设计初期一般不会提供完备的数据分析报表[1]。随着时间的推移,产生的数据越来越多,需要的分析报表也越来越多,统计方式也层出不穷,相应的问题也随之出现。以笔者所在的企业所使用的信息系统为例,当需要增加一个报表,甚至一个简单的查询条件时,即使企业拥有管理信息部门,往往也要找更为专业的系统开发公司人员进行重新评估和开发,这样会产生非常多的沟通成本、人力成本、时间成本。而对于开发人员来说,理解需求,编写代码,到最后编译、测试、发布、更新,整个流程周期比较长。这使得企业的管理效率、决策效率大打折扣。因此,如何帮助企业能够灵活生成常用报表、降低设计报表人员专业技术要求、建立一个支持可视化灵活的通用报表模块变得极其重要。

1 需求分析

1.1 功能性需求

可自定义通用报表跟普通报表的开发方式相比,要足够简单,降低设计报表人员的专业要求,设计报表时支持可视化拖拽、参数、事件、权限的定义。同时,用户在查询报表时,查询条件可以自定义组合,结果展示页面支持导出、打印、自定义排序等功能[2]。

该报表模块的用户主要包括报表设计者和报表使用者两大类。报表设计者可以在线或离线设计报表界面后上传,然后进行相关参数配置后生成报表。报表使用者提交查询条件至报表服务器,报表服务器返回数据结果并呈现报表,让报表使用者利用数据信息,形成决策。

通过上述的需求分析,笔者设计出该模块的用例图。本用例图是从自定义通用报表模块设计的实体对象及主要行为的角度出发对系统的抽象表示。由报表设计人员和使用人员发起用例,如图1所示。

图1 用例图

1.2 非功能性需求

该模块的非功能性需求包括适用性要求、可靠性要求、性能要求、可扩展性要求。

1.2.1适用性要求

(1)报表的设计要易上手、易学习,界面设计能支持可视化拖拽,对于非信息技术企业的信息管理人员也能在一周时间内掌握;

(2)报表的参数、查询条件、权限可以随时修改,不需要代码编译和发版。

1.2.2可靠性要求

(1)当功能出现故障时,应有相关的错误日志,并能快速定位问题;用户的查询也应记录相应的损耗时间、查询条件、查询次数的记录,便于企业信息管理人员进行用户行为数据分析;

(2)避免出现信息安全问题,比如防范常见的SQL注入、敏感字段需加密等。

1.2.3性能要求

(1)应能支持300个以上用户同时在线使用;

(2)一般常规操作响应速度应在5 s内,对于复杂的操作,响应速度应在10 s以内。

1.2.4可扩展性要求

(1)该模块的数据结构设计应尽量独立并留有相关的API接口,以便轻松融入其它系统;

(2)该模块应当有一定的发展能力和容纳能力,以便出现新的功能需求时,快速纳入。

2 模块设计

2.1 模块技术架构

该模块采用 B/S(浏览器/服务器)的软件架构,B/S 是 C/S (客户端/服务器)模式在 Internet 上基于 web 应用的一种实现方式。B/S 模式简化了客户端的安装、拥有易于升级和维护等优势,是目前软件开发架构的首选,因此采用 B/S 模式进行开发。

另外,模块采用了界面层、业务逻辑层、数据访问层的三层设计理念。这使得代码模块之间更加“高内聚、低耦合”,可维护性、可扩展性更好,维护成本降低[3]。

界面层(PL):主要利用Grid++ Report技术工具实现,负责报表的可视化设计。Grid++ Report是一款报表开发工具。能给报表设计者用来开发软件中的报表、打印、图表与数据导出等子系统。支持可视化界面设计,支持分组汇总、表头排序、常规票据打印、套打等。支持嵌入到web环境下,非常适合本通用报表模块的界面层,报表设计界面如图2所示。另外,报表的查询界面与其他参数配置界面应用是通过在web环境下被广泛使用的、较为灵活html语言来实现的。

图2 报表设计页面

业务逻辑层(BLL):主要利用C#语言来实现,业务逻辑层是在数据访问层和表示层之间进行数据交换的桥梁,如查询条件的处理、用户权限的判断、特殊报表参数的处理等业务逻辑均放在此层中。

数据访问层(DAL):主要利用SQL语言来实现,数据访问层只是单纯的对数据进行增、删、改、查(由 SQL 语句来提供),不应该有“事务”存在。简单三层架构的逻辑图如图3所示。

图3 简单三层架构的逻辑图

2.2 系统功能架构

根据需求分析,本系统分为两类用户角色:报表设计者、报表使用者。根据用户角色的模块划分方式,不同用户角色模块拥有不同的功能。其架构图如图4所示。

图4 系统模块及功能

2.2.1报表设计者功能详细设计

报表设计者一般为企业的信息管理部门人员,负责收集业务部门人员的报表需求,进行报表的设计。主要功能包括报表的样式设计、配置查询语句、查询字段、用户权限以及额外的参数、事件。

(1)报表的样式设计。设计人员在可视化的情况下对报表的样式进行设计,包括页眉、表头、明细网格、表尾、页脚、页眉、水印等。

(2)配置查询语句。设计人员配置用于检索报表数据的SQL查询语句。

(3)配置查询字段。设计人员可配置查询报表时所需要的条件字段,包括字段名、字段所需的控件呈现类型等。

(4)配置权限。设计人员可对每个报表配置用户权限,即某报表是否完全公开,或者哪些用户、角色才能查看该报表。

(5)配置额外参数或事件。设计人员可对每个报表单独设置相应的事件,如报表加载完成事件、双击明细事件等。同时,为了适应不同的信息系统,设计人员还可以配置不同的字典参数,来适应不同的信息系统。

2.2.2报表使用者功能详细设计

(1)自定义查询条件。用户输入查询条件有两种方式,一种是传统的基本条件按字段模糊搜索,另一种是在基本条件输入的基础上,增加了括号和逻辑运算的功能。提供的逻辑符有“并且”和“或者”,用户可根据自己的需要设计查询条件之间的逻辑关系,其中,使用括号括起来的查询条件优先级最高。

(2)浏览报表。使用人员可以在线浏览报表,可对结果进行排序、向上或向下钻取数据。

(3)导出、打印报表。使用人员也可以导出或打印报表结果,从而进行数据分析,形成决策。

2.3 数据库详细设计

数据库详细设计,如表1所示。

表1 部分核心功能数据库设计

在此设计中,部分核心功能的E-R图如图5所示。

图5 部分核心功能E-R图

3 模块实现

3.1 模块开发技术概述

系统采用的开发平台是Windows Server 2019 + IIS 10 + ASP.NET Core 3.1,后台数据库采用的是SQL Server 2012,ASP.NET Core的前端开发工具是Visual Studio 2019,报表设计器采用Grid++ Report 5.8,同时采用基于 Restful 协议的 WebAPI 技术提供接口服务,无论是理论上还是实现技术上都具有一定的先进性。

3.2 模块部分功能模块实现

以介绍自定义查询条件的实现为例。

现在很多信息系统的报表模块查询条件固定,只是简单的多条件“且”关系的模糊查询。一旦需求变更,需要新增查询条件字段时,就需要用开发工具打开相应位置的源代码,然后修改、编译、测试、发布。整个过程非常繁琐,且过分依赖系统开发方,浪费了很多沟通成本、时间成本。该模块的最大特点是可以通过简单的后台配置,结合一些基础的数据库知识,就可以让企业信息化管理人员上手,且查询条件的配置灵活多变。

报表设计者在完成报表基本信息的填写和报表界面的设计后,即可定义用于报表查询的SQL语句和查询字段。如图6所示,在“SQL语句”字段文本框中,报表设计者需填写用于检索报表数据的SQL查询语句。系统默认用“{where}”特殊符表示查询条件所拼凑成的where语句要替换的位置。为了更加灵活地适配各个系统,该模块还支持特殊符参数的字典定义,如可以另行设置特殊符“{bmbh}”为代表业务系统中用户所拥有查询权的部门,又或者用“{userid}”表示查询报表的当前用户ID。如使用以下SQL语句:“SELECT * FROM 销售表 WHERE {where} AND (销售表.开单人 = '{userid}' ) ORDER BY id”,来表示从销售表中查询出开单人为当前用户的销售数据。

图6 部分配置界面

当完成“SQL语句”字段填写后,报表设计者可以自动获取所有相关的查询字段名称,亦可手动填写所需要的查询字段名称。“字段名称”表示该字段在数据库表中的字段名,“字段中文名”用来友好展示给报表使用者,“字段类型”用于指定该字段控件的呈现方式,包括:(1)字符串类型,用普通文本输入框呈现;(2)日期类型,用下拉日历的控件呈现;(3)数字类型,用数字文本输入框呈现;(4)其他类型,报表设计者可通过字典参数配置额外的类型,如客户多选下拉框、部门多选下拉框等。配置完成后,报表查询者在高级查询条件界面将会看到如图7所示的界面。输入查询条件,点击“确定”按钮,将看到如图8的查询结果。

图7 高级查询条件界面

图8 查询结果界面

4 结论

相比于一些传统信息系统中维护困难、灵活性差的报表模块,本文提出了一种自定义通用报表模块的设计和实现方案,并已在笔者所在企业进行应用,具有以下特点。

(1)对报表设计者友好。报表设计者可直接来自企业内部信息化管理人员,只需简单掌握企业内部信息系统的数据业务结构。设计界面支持可视化操作,无需太多编码知识,拖拽制表,大大降低了设计者的专业门槛。

(2)配置灵活。报表的相关事件、参数可灵活配置,即时生效,无需重新编译发版。轻松添加报表查询条件,快速便捷完成查询设置。

(3)灵活的交互体验。提供多样化条件辅助录入功能,方便报表使用者快速准确输入。让查询更加灵活,满足不同的查询需求。每个报表展示结果都包含排序、打印、导出、数据钻取功能。

(4)扩展性强。该模块独立性较强,且留有相关的API接口,可与其他系统轻松对接、集成。

[1]闵乔. 基于JasperReports的通用报表系统研究与实现[D]. 南京: 南京师范大学,2016.

[2]马骠. 智能报表平台的设计和应用[J]. 电子制作,2020 (6): 102-104.

[3]梁桐铭. 深入浅出ASP.NET Core[M]. 北京: 人民邮电出版社,2020.

Design and Implementation of Custom General Report Module Based on C#, Grid++ Report

With the continuous development of modern information technology, enterprise information management system has become an important application, in which the report statistics module has become an important module for enterprise decision-making. However, some traditional report modules have some problems, such as difficult maintenance and poor flexibility. This paper describes the design and implementation of a report module that uses the c# language and combins Grid+Report designer with support for custom and personalized configuration.

C#; Grid++ Report; general report; management information systems

TP311.11

A

1008-1151(2022)02-0013-04

2021-12-09

唐毅(1990-),男,广西桂林人,广西师范大学出版社集团有限公司信息部技术主管,从事企业信息化系统的建设、维护与研发。

猜你喜欢

设计者报表语句
重点:语句衔接
2020德国iF设计奖
2019德国IF设计大奖
LabWindows/CVI中Excel报表技术研究
从三大报表读懂养猪人的成绩单
杨敬:深水区医改设计者
深水区医改设计者
如何搞定语句衔接题
作文语句实录
月度报表