一、前言
AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。
AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。
AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。
二、关于GReport、Grid++报表系统
AgileEAS.NET SOA中间件平台目前集成两套优秀的报表系统,一套是开源的fyireporting报表系统3.96版本,其始于2007年AgileEAS.NET SOA中间件平台3.0版本之时就集成入平台的一套报表系统,其快速方便的条带式报表非常适合用于MIS系统的报表展示,我们在fyireporting基础上做了大是的汉化、改动并且与AgileEAS.NET SOA中间件平台进行紧密的集成。
但是对于市场在国内的大多数软件企业都会遇到客户的很多近似于变态的报表需求,fyireporting有也其不足的地方,其在处理中国式的票据、和一个特殊报表时无能无为,之后我们考虑集成一套更好的中国式报表系统,在和几家行业医疗供应商合作的两个年头之中,我们集成广州锐浪的Grid++报表系统并与AgileEAS.NET SOA中间件进行融合,称之为GReport。
AgileEAS.NET SOA中间件平台的报表管理体系并设计为集中式的报表管理、设计与报表浏览、打印相协调的可集中管理的报表体系,极大的简化和方便报表的开发、部署和管理。
在AgileEAS.NET中间件平台之中提供了一个用于管理、和设计GRport的功能模块“GR报表”:
系统之中的所有报表都是可管理的,当在系统的任何一个客户端修改了报表定义之后,不需要重新部署程序,即可让报表的修改通过所有的使用者。即时生效。
在GR报表模块之中,直接双击选中的报表即可进行报表设计界面,进行报表的设计:
GR报表的设计器界面是基于Grid++报表所提供的设计器控件实现的,其使用方法同Grid++原始的报表设计工作,具体的使用方法请参考Grid++官方帮助。
本设计器与官方的原生设计器之间的差别主要是新建报表与原生不同,原生的报表系统只能基于数据库连接和SQL语句创建报表,而本设计器提供了除通过书写SQL创建报表(不用提供连接信息,以当前连接为准)之外还提供了基于AgileEAS.NET SOA中间件平台的ORM实体创建报表:
数据报表即为基于SQL语句创建报表,对象报表基于ORM实体对象创建报表:
当基于实体创建报表时确定报表对应的实体对象之后,系统会自动的从ORM定义信息之中读出实体的属性定义信息并且自动的转换为报表的数据列。
三、GReport组件
AgileEAS.NET SOA中间件平台为开发人员提供了三个有关于GReport报表的控件,包括打印预览对话框、报表数据显示控件、报表打印控件,这三个控件都由EAS.GReport.Controls.dll程序集承载,使用这三个组件之前都需要先引用EAS.GReport.Controls.dll程序集或者把这三个组件加载到Visual Studio的工具箱之中。
打印预览对话框: EAS.GReport.Controls.PrintViewDialog,用于打开一个新的窗口并且预览打印报表。
报表查询显示控件: EAS.GReport.Controls.GDisplayViewer,以查询模式显示报表及报表数据的一个控件。
报表预览显示控件: EAS.GReport.Controls.GPrintViewer,以打印模式显示报表及报表数据的一个控件。
以上三个控件都提供相同的报表API:
1: //
2: // 摘要:
3: // 报表ID。
4: [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
5: [Browsable(false)]
6: public Guid ReportID { get; set; }
属性ReportID:其意思为报表ID,其取值为GR报表模块之中设计好的报表ID号,用于实现与系统报表管理的绑定。
1: //
2: // 摘要:
3: // 数据源对象。
4: [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
5: [Browsable(false)]
6: public object DataObject { get; set; }
属性DataObject:其意义为报表的数据对象,即控件要显示或者打印的数据源,DataObject的值必须为DataTable或者为ORM实体的List<T>集合。
程序之中调用报表的流程即为设计这两个属性即可,首先设计ReportID为要显示、打印的报表ID,然后向控件设置报表的显示数据源DataObject即可完成对报表系统的调用。
四、报表开发实例
我们下面以DrugShop案例之中的药品字典模块的字打印实例如何进行GReport报表开发:
首先我们需要在GR报表模块之中增加一个名称为“药品字典明细报表”的报表项目。
报表名称必须要填写并且不能重名,别名可以选择填写,缓存间隔默认为15分种,最小1分种,自由设定,原则上在系统开发测试阶段设小一些,在稳定运行阶段设大一些。
其他参数,如“报表模块,把报表做为独立模块发布”、查询语句、查询参数可以不去理会,这些参数为动态报表提供,关于动态报表我们会在后面的文章之中进行专门的介绍。
然后我们点“确定”按钮保存报表进行下一步的报表设计工作。
双击我们刚才添加的“药品字典明细报表”进入报表设计界面,我们可以看到这是一个空报表:
选择“文件”菜单之中的“新建”=》“对象报表”:
切换到数据定义Tab页,进行实体类型的选择:
我们浏览选择程序集DrugShop.Entitties.dll,然后在对象下拉列表框中选择DrugShop.Entitties.PIn,即药品入库ORM对象,我们基于DrugShop.Entitties.PIn创建报表,点击“确定”完成报表的新建。
系统会自动的更具新建导向生成一个初始报表,如果需要对报表的显示、格式进行调用,请参考Grid++设计手册进行学习。
修改完成之后,点击“保存”图标、或者“文件=》保存”菜单项保存报表的格式定义,这样就完成了报表的定义。
接下来我们需要把刚才定义、设计好的报表挂在程序之中,使用Visual Studio 打开DrugShop解决方案,打开DrugShop.WinUI项目之中的药品字典模块DrugDictList.cs:
双击“打印”按钮写以下打印代码:
1: private void tsbPrint_Click(object sender, EventArgs e)
2: {
3: if (this.dictList != null)
4: {
5: EAS.GReport.Controls.PrintViewDialog ViewDialog = new EAS.GReport.Controls.PrintViewDialog();
6: ViewDialog.ReportID = new Guid("F29C4C91-0791-4116-BE26-3A2A88F30A2A");
7: ViewDialog.DataObject = this.dictList;
8: ViewDialog.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
9: ViewDialog.WindowState = System.Windows.Forms.FormWindowState.Maximized;
10: ViewDialog.ShowDialog();
11: }
12: }
这样我们就完成了对报表的调用,另外,在DrugShop案例之中,药品入库查询和药品销售查询两个模块之中分别使用了GReport报表,请大家在开发过程之中参考。
五、执行验证
我们编译并且启动DrugShop.Main.exe,使用0001密码sa登录,打开药品字典功能,来试一下是报表是否正常:
OK,使用正常,没有任何问题。
DrugShop案例之中同步提供了本例子的报表定义和使用代码,请大家通过AgileEAS.NET SOA中间件官方网站的最新下载栏目进行下载。
六、联系我们
为完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。
AgileEAS.NET SOA中间件平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。
我的技术团队成员都是合作多年的老朋友,因为这个平台是免费的,所以也没有什么收入,都是由程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友。
AgileEAS.NET网站:http://www.agileeas.net
官方博客:http://eastjade.cnblogs.com
github:https://github.com/agilelab/eas
QQ:47920381
QQ群:113723486(AgileEAS SOA 平台)/上限1000人
199463175(AgileEAS SOA 交流)/上限1000人
212867943(AgileEAS.NET研究)/上限500人
147168308(AgileEAS.NET应用)/上限500人
172060626(深度AgileEAS.NET平台)/上限500人
116773358(AgileEAS.NET 平台)/上限500人
125643764(AgileEAS.NET探讨)/上限500人
193486983(AgileEAS.NET 平台)/上限500人
邮件:james@agilelab.cn,mail.james@qq.com,
电话:18629261335。