报表系统介绍
我们都知道,在信息系统开发过程中,报表占据着很重要的位置,业务运营数据最后给领导的反应就是那么几张综合的业务数据报表,在如何选择一个合适的报表系统也让很多开发员纠结,AgileEAS.NET平台采用了基于RDL语言的开源报表系统 fyireporting,最早基于其2.X版本进行了中文化并和AgileEAS.NET进行集成,到目前为止AgileEAS.NET平台中集成的是3.96版本,下面展示一下报表在AgileEAS.NET中的一个呈现:
AgileEAS.NET平台对于 fyireporting开源项目,只采用了其中的RdlEngine,RdlViewer和ReportDesigner三个项目,对报表设计器和引擎做了如下修改:
1.修改了Excel导出的问题,因为在应用中有大量的需求需要导出报表并要求和打印样式匹配:
2.修改了PDF文件导出中文的问题。
3.中文化。
4.打印的走纸控制,在企业应用中,特别是窗口服务应用的同一打印机打多咱票据的打印走纸控制。
同时,我对 fyireporting报表与AgileEAS.NET进行了集成,增加了报表设计器可以根据ORM实体对象创建报表的设计极报表呈现与ORM实体的数据绑定。
制作报表
AgileEAS.NET平台设计器提供一个非常方便的可以化报表设计器, fyireporting原版本的报表设计器只提供了基于数据库连接的报表设计器,我增加了一个方法,基于AgileEAS.NET平台的ORM数据对象进行报表设计,整合了ORM与报表,下面看看新建一个与数据库相关的报表:
首先设置连接:
选择数据库表或者编写报表的查询语句:
确定之后使用报表设计器设计报表:
预览报表:
AgileEAS.NET平台同时提供了一个不需要数据库连接而是基于AgileEAS.NET平台中的ORM对象设计报表的方法,我们来看一下设计过程:
首先选择ORM对象的组件及ORM表对象:
确定之后使用报表设计器设计报表:
报表集成
AgileEAS.NET平台在报表的部署上采用了集成部署的思路,即设计好的报表定义存储在数据库中,客户端在使用中读报表定义并缓存在客户端,平台中增加了一个报表管理的应用插件报表管理:用于管理系统中的所有报表。
开发人员可以使用独立的报表设计器设计好报表,然后在报表管理中新建一个报表并且导入报表定义。
新建报表:
导入报表定义,可以根据设计好的报表定义文件导入,也可以直接从报表设计器Copy报表定义源码:
开发员人也可以直接使用集成的报表设计器进行报表设计:
报表管理模块集成的报表设计器是一个相独立的报表设计器相比更加简洁,这个报表设计器不像独立的报表设计,最后把结果保存到报表定义文件,而是直接保存到AgileEAS.NET的报表定义数据库中。
程序中使用报表
AgileEAS.NET平台提供了一个报表打印/预览控件与报表打印/预览窗口,开发人员可以根据需要情况弹出的打印窗体还是使用可以嵌入在应用界面中的打印控件。
因为报表定义是在数据库中,所以在报表打印前需要赋予报表打印控件报表定义和报表的数据源,我们在平台的报表管理中定义了一个IRportEx接口,用于存储报表定义,下面演示一个使用弹出窗体的报表打印例子:
//报表对象
IReportEx report = DALHelper.DALManager.CreateReportEx();
report.Session = ContextHelper.Session;
report.Name = "诊疗项目列表";
report.Refresh();
//绑定到报表的数据对象(ORM表对象)
IItemInfoPrintList pl = this.itemList.GetPrintList();
//打印对话框
RDLViewDialog printForm = new RDLViewDialog();
//绑定报表定义
printForm.Report = this.Report;
//绑定打印数据
printForm.DataObject = pl;
//预览打印
printForm.PrintPreview();
以上代码效果如下图:
使用AgileEAS.NET平台提供的报表打印控件的使用方法同弹出式打印窗口,代码如下:
//报表对象
IReportEx report = DALHelper.DALManager.CreateReportEx();
report.Session = ContextHelper.Session;
report.Name = "演示报表";
report.Refresh();
//绑定到报表的数据对象(ORM表对象)
IIteminfoList dataList =
EAS.Exam.DAL.Interface.DALHelper.DALManager.CreateIteminfoList();
dataList.Session = ContextHelper.Session;
dataList.GetIteminfoList(string.Empty, this.tbName.Text);
//绑定报表定义
this.reportViewer.Report = this.Report;
//绑定打印数据
this.reportViewer.DataObject = pl;
以上代码执行效果如下图:
在AgileEAS.NET平台的应用项目开发中,我们建设使用这种模式的报表开发,简单、直观,在我们的开发实践中,我们也可以使用这种方式代替数据查询模块。
链接
AgileEAS.NET平台开发指南-系列目录
AgileEAS.NET应用开发平台介绍-文章索引
AgileEAS.NET官方网站
敏捷软件工程实验室
QQ群:120661978,125643764