基于生产系统使用的Web自定义报表设计
2016-07-02余建成
余建成
(厦门雅迅网络股份有限公司 厦门 361008)
基于生产系统使用的Web自定义报表设计
余建成
(厦门雅迅网络股份有限公司厦门361008)
摘要论文简要介绍了在Fastreport这种比较偏于C/S模式的报表设计器上,如何为已发布上线的生产系统上实现自定义报表,以及管理配置报表模板、报表查询参数的过程。整个实现过程充分利用现有成熟报表设计器的技术,达到快速的在实际应用开发中使用的效果。解决了当前信息服务系统报表格式复杂多样、设计难度大、报表需求频繁变化的问题,可以较好地用于具备一定报表设计能力的企业用户使用。
关键词自定义报表; Fastreport; 动态参数
Class NumberTP391
1引言
研发Web应用系统通常都会遇见给客户开发Web报表问题,由于用户的报表需求经常随着企业管理的需求而变化。例如,需要随时都能修改报表的模板,修改查询条件,显示的报表字段,以及控制打印元素的位置,字体大小,是否打印,是否套打等。这就需要客户能控制报表设计器。传统一般的做法是让软件服务商提供定制的报表来满足用户的管理需要,然而,这种做法对企业来说响应周期长、成本高。目前,随着信息技术的发展,非常多应用系统都需求提供自定义报表的功能,即客户,特别企业有信息部门的客户,能自行设计、修改报表。在C/S结构系统中,报表问题有非常多成熟的解决方法。如C#中利用Fastreport可以快速开发出C/S结构报表,还能利用Fastreport提供的C/S报表设计器快速实现报表模板设计以及查询参数设计。因此对于研发出可让用户自定义报表的C/S应用来说,是一种非常好的解决方式。
在B/S结构应用中,实现用户自定义报表的方案,微软的Report service是一种大型报表系统常用和推荐的解决方案。但Report service集成在微软的Sql Server数据库中,目前价格昂贵,而且该系统相当庞大。它的可定制性方面尚不够完善、报表的定制输出和用户的系统结合上尚不是很紧密。当然,在目前市场上,它仍是一种最佳的Web应用报表解决方案之一。
如果能将C/S应用中成熟的报表解决方案搬到B/S应用中,相信对于大部分研发人员来说,都是非常欢迎的。但是如果完全从零开始开发设计出具有功能完善的Web报表设计器,也不是一朝一夕的事情。论文将讲述一个在.Net环境中利用FastReport的C/S自定义报表技术基础上,实现B/S应用中用户可自定义的报表解决方案。
2系统框架
系统是由浏览器客户端、Web服务器和报表服务器三部分组成。浏览器客户端主要对报表展现模板、数据逻辑、以及最终报表呈现进行实现,将自定义模板存入报表服务器数据库,而Web服务器向报表服务器请求报表模板并进行解析生成html返回给浏览器端显示,报表服务器提供报表模板数据查询,以及提供Web客户端需要的报表模板设计器组件。系统的总体框架如图1所示。
图1 系统框架图
在实际的使用中,企业系统管理者或企业的信息部门通过分析要制作的报表需求,创建企业管理者需要的报表模板,配置模板的查询条件参数,最终把模板对应到系统的菜单项固化,并把菜单权限分配给对应的使用者,最后使用者登录到系统就可以看到相应的报表菜单,点击相应的报表菜单和查询条件就可以查询出想要的报表数据。例如,企业人员报表、销售数据情况、考勤情况等报表都可以自己定制,并固化到系统中分配给相应人员使用。这样在实际的生产系统中就可以进行报表的设计发布。
如图1所述,自定义报表由浏览器工作站、Web服务器、报表服务器组成。各个部分的实现逻辑描述如下:
· 浏览器工作站:用于访问Web服务器和报表服务器,加载使用Web服务器提供的报表设计组件和报表服务器提供的报表模板数据,提供报表模板设计器功能给报表定义人员使用。并在报表呈现时,通过Web服务器提供的动态查询参数解析,解析展现报表查询条件,提供报表查询界面给用户。最终用户进行查询时,解析展现Web服务器返回的报表数据。
· Web服务器:Web服务器是浏览器端工作站的入口访问网站,Web服务器实现了Web报表菜单生成管理、Web菜单和报表模板绑定、报表模板设计组件下载和报表查询参数配置解析。提供报表查询参数控件和报表设计组件。
· 报表服务器:报表服务器用于Web浏览器工作站需要进行报表设计和展示时,提供报表查询解析引擎和存储报表模板数据使用。报表服务器把报表模板存储在数据库中,供Web服务器需要展现报表时,浏览器段直接访问报表服务,报表服务器加载报表模板和报表数据源,解析渲染报表生成HTML数据返回给浏览器端展现。
3系统软件设计
根据以上自定义报表系统的实现方案,并考虑实际应用开发中,开发Web形式的报表设计器的工作量,以及进行Web报表模板解析的复杂度,可以选用现有的一些报表控件,在此基础进行二次开发,提高开发效率,当然也可以自己实现报表渲染引擎和报表模版设计器。该方案选用fastreport for .net报表组件进行二次开发。由于Fastreport已经提供了C/S的报表设计器,并能支持B/S形式的报表模板解析展现。因此可以充分利用该组件解决报表设计器的开发的问题以及报表展现解析的问题。通过引用Fastreport的报表设计器控件,重写设计器的数据源添加、保存模板、打开模板等功能,并按照Fastreport报表模板的数据流格式存储模板数据,则可以把设计器器的功能利用起来,最终把他封装成浏览器可调用的ActiveCom组件,发布到Web服务器网站上。而解析模板可以充分利用Fastreport的报表的B/S解析引擎,进行报表展现实现。
3.1Web报表设计器实现
Fastreport的报表设计器能做成一个普通的WINDOWS桌面程序,也能做成一个ACTIVEX COM程序(Automation Object)。通过封装实现Fastreport的报表设计器的功能,并设计器ACTIVEX COM组件,以便于浏览器可以调用。ACTIVEX COM组件实现的功能主要包括:报表数据源管理、报表模板设计器功能、报表模板以及报表查询参数查询语句保存等。
实现逻辑如下:浏览器第一次加载运行报表设计器时需要从Web服务器下载ACTIVEX COM程序并运行。在报表设计过程中,用户端(ACTIVEX)向WEB SERVER发送报表设计请求,请求中包含要设计报表的名称;报表服务器端WEB SERVICE收到该请求后,从数据库获取该名称的报表模板数据流、参数信息、运行的Sql语句等;Web SERVICE服务将这些报表参数信息回送给用户端,用户端将接收到的报表模板数据流等信息加载到ACTIVEX COM组件中,通过Fastreport的报表设计控件打开报表文件给用户提供可视化设计。
在编程实现上,通过拖放一个Fastreport的报表设计器控件(designerControl)到窗体上,通过二次开发实现报表设计器组件。Fastreport报表设计器组件本已经具备打开报表模板、保存报表模板、添加数据源等菜单功能,通过重写设计器菜单的添加数据源、保存报表模板菜单功能,可以实现给报表设计器实现添加自定义数据源、保存报表模板到指定的数据库。
图2 报表设计器
图3 自定义数据源管理
在添加数据源中,可以根据业务的需要,把常用的业务数据建成视图模型,方便创建数据源时使用。如上图所示,可以在视图模型中选择需要的视图对象,可以快速创建报表需要的数据源。
当报表需要有带参数的查询数据源时,可以通过定义“@”字符开头的变量作为预定义参数,并给该参数赋上初始值。例如,创建数据源查询出大于指定人员id值的所有人员,可以定义数据源select * from VM_DimBusinessMan where PersonID>@personid ,其中VM_DimBusinessMan为系统预先提供的视图模型,@personid为查询条件变量,后续通过配置参数控件来绑定到对应查询界面控件的值上。报表参数具备数据类型、缺省值,配置好的报表参数和报表模板数据一起存储在后台报表模板数据库表中。
有了报表数据源,就可以在报表设计器中进行报表设计,这里的报表设计器使用的是Fastreport提供报表设计器,Fastreport的报表设计器具备强大报表模板设计功能,包括表格、矩阵报表、图表等设计功能,利用它的报表设计器功能可以大大缩短我们自行开发报表设计器的时间,该方案充分利用报表设计器的强大功能进行二次开发成activecom组件使用。
最后,通过重新实现Fastreport模板的保存功能,可以修改原报表设计器的保存菜单的逻辑,把设计完的报表模板通过Web SERVICE存储到报表服务器端的数据库里。
报表模板设计完,可以直接在设计器中直接预览报表效果。最后通过开发工具(vs),把报表设计器封装成浏览器可以调用的Activecom控件,并发布到Web服务器上。
3.2报表菜单设计实现
报表菜单项管理,实在Web服务器上实现的。用于提供系统报表菜单,并把菜单项设置给系统的某个用户或者岗位角色。如图4所示。
图4 菜单管理
把菜单项和报表模板进行绑定,在这里是在模板里选择可用的菜单项。如图5所示。
为对应的模板选择刚才设计的菜单,则就可以把报表功能和系统对应的菜单入口结合起来。最后通过把菜单赋给岗位角色,相应岗位的人员就具备查看该定制报表的功能了。
3.3报表查询参数设计实现
并不是所有的报表都是直接查询显示,经常都是带参数可以让用户选择条件查询的。通常在业务系统中实现配置管理,这里在Web服务器上实现查询参数配置管理。通过在报表设计器中设定查询条件的参数(如前面的@personId),通过配置和具体的界面控件绑定,实现动态的查询条件界面,从而为报表增加灵活性。
图5 模板选择菜单
根据数据源中的查询参数,可以为模板设计参数管理设计器,如图6所示。
图6 参数配置
可以为查询数据源参数指定各种参数控件类型。参数控件可以根据需要预先实现,例如,跟系统直接关联的组织结构树,产品下拉框等。或者可以通过对控件提供属性,例如下拉框可以让用户自己配置下拉框的内容,文本框可以让用户配置输入字符串的长度限制等。
根据模板数据源中带有@符号的参数变量,为其配置相应的查询控件。配置完报表查询条件就可以在报表菜单点击后在查询界面中呈现出来,并在提交查询事件时,把查询控件各个值提交到后台报表服务器处理。
3.4Web报表解析展现
设计好报表模板,接下来就是根据业务系统需要把对应的报表模板,在用户的业务系统上展现出来。报表的展现分为三个步骤。
1) Web服务器根据报表菜单配置,从后台报表服务器动态加载相应的报表模板和查询参数界面控件,生成报表查询模块实例,在浏览器端展现出来;
2) 点击查询时,根据查询参数条件上获取的值和报表实例id传递给报表服务器,报表服务器根据查询参数信息以及相应报表模板的数据库查询语句,拼接成可运行的Sql语句作为报表需要的数据源。
3) 使用fastreport的报表解析控件,加载报表模板数据流,并把数据源信息注册给报表解析引擎。
4) 报表解析引擎执行解析渲染,生成报表html页面信息返回给浏览器端展现。该过程充分利用了fastreport的报表模版解析渲染的功能,不用自己编写实现解析代码。
渲染后如图7所示。
图7 报表展现
4结语
论文描述了一种在Web生产系统实现自定义报表开发的实现方案。在实际的自定义报表设计实现中,报表设计器和报表解析渲染实现往往是最复杂工作量最大的,论文充分利用了Fastport报表工具具备C/S报表设计器和报表解析展现控件的功能,通过二次开发它的功能,结合Web系统的特点实现了在Web生产系统上实现自定义开发报表的功能。结合应用环境,可以在Web的生产系统下较好的进行报表的动态设计添加,而不用重新编译发布系统,提高了用户系统的灵活性,提高了开发效率。在生产系统中集成该功能,特别适合于有一定报表开发能力的企业用户使用。
参 考 文 献
[1] 史朝林,陈震宇.基于web自定义报表统计系统的设计与实现[D].南京:南京大学,2011.
SHI Chaolin, CHEN Zhenyu. Design and implementation of custom report statistics system based on Web[D]. Nanjing: Nanjing University,2011.
[2] 陈传波,黄刚,刘清慧.一种基于ASP.NET的自定义报表的设计与实现[J].计算机工程与科学,2006,28(6):112-114.
CHEN Chuanbo, HUANG Gang, LIU Qinghui. Design and implementation of a custom report based on ASP.NET[J]. Computer Engineering & Science,2006,28(6):112-114.
[3] 陈国华,刘海林.管理信息系统中自定义报表工具的研究与设计[J].计算机应用与软件,2006,23(5):74-75.
CHEN Guohua, LIU Hailin. Research and design of custom reporting tools in management information system[J]. Computer Applications and Software,2006,23(5):74-75.
[4] 宣士斌,李永胜,李熹,等.VC中基于Excel的用户自定义报表设计[J].计算机工程与设计,2006,27(8):1483-1485.
XUAN Shibin, LI Yongsheng, LI Xi, et al. Design of user defined report based on Excel in VC[J]. Computer Engineering and Design,2006,27(8):1483-1485.
[5] 李林广.Web发布用户自定义报表系统[J].南京工程学院学报,2002,2(2):24-27.
LI Linguan. Web user defined report system[J]. Journal of Nanjing Institute of Technology,2002,2(2):24-27.
[6] 马瑞敏,王成良.WEB动态报表实现中的参数化过滤技术[J].计算机系统应用,2009,18.
MA Ruiming, WANG Chenliang. Parametric filtering technique in WEB Dynamic Report[J]. Application of Computer System,2009,18.
[7] 马瑞敏.Web动态报表在油库管理信息系统中的应用[J].电脑开发与应用,2014(7):14-17.
MA Ruiming. Application of Web dynamic report in information system of oil depot management[J]. Computer Development and Application,2014(7):14-17.
[8] Rodney Landrum,杨岩.用参数和表达式让您的报表服务更灵活[J].Windows & Net Magazine:国际中文版,2004:77-81.
Rodney Landrum, Yang Yan. Use arguments and expressions to make your report service more flexible[J]. Windows & Net Magazine,2004:77-81.
[9] 丁瑞国,胡胜利.基于VB的动态报表研究和实现[J].河西学院学报,2008,5.
DING Guorui, HU Shenli. Research and implementation of dynamic report based on VB[J]. Journal of He Xi University,2008,5.
[10] 刘文圣,刘宏斌,林敏.一种参数化报表的生成方法及系统[P]. CN,2012.
LIU Wensheng, LIU Hongbin, LIN Ming. Method and system for generating parametric Report[P]. CN,2012.
Design of Web Custom Report Based on FastReport
YU Jiancheng
(Xiamen Yaxon Network Co. Ltd, Xiamen361008)
AbstractThis paper briefly introduces the report designer in the C/S model of FastReport, and how to implement a custom report for the user production system under the web system. The whole implementation process makes full use of the technology of the existing mature report designer to achieve the effect of rapid application development in practical application. To solve the problems of the information service system report format, the complex, the design difficulty, and the frequent change of the demand of the report. It can be better used to have a certain report design capabilities of enterprise users.
Key Wordscustom report, Fastreport, dynamic parameter
收稿日期:2015年12月23日,修回日期:2016年1月25日
基金项目:国家科技支撑计划课题项目(编号:2013BAF02B08)资助。
作者简介:余建成,男,工程师,研究方向:SAAS云服务应用。
中图分类号TP391
DOI:10.3969/j.issn.1672-9722.2016.06.041