表系統(tǒng)介紹
我們都知道,在信息系統(tǒng)開發(fā)過程中,報(bào)表占據(jù)著很重要的位置,業(yè)務(wù)運(yùn)營數(shù)據(jù)最后給領(lǐng)導(dǎo)的反應(yīng)就是那么幾張綜合的業(yè)務(wù)數(shù)據(jù)報(bào)表,在如何選擇一個(gè)合適的報(bào)表系統(tǒng)也讓很多開發(fā)員糾結(jié),AgileEAS.NET平臺(tái)采用了基于RDL語言的開源報(bào)表系統(tǒng)fyireporting,最早基于其2.X版本進(jìn)行了中文化并和AgileEAS.NET進(jìn)行集成,到目前為止AgileEAS.NET平臺(tái)中集成的是3.96版本,下面展示一下報(bào)表在AgileEAS.NET中的一個(gè)呈現(xiàn):
wps_clip_image-26064" border="0" src="/up/2010-9/2010914183420626.png" />
AgileEAS.NET平臺(tái)對(duì)于fyireporting開源項(xiàng)目,只采用了其中的RdlEngine,RdlViewer和ReportDesigner三個(gè)項(xiàng)目,對(duì)報(bào)表設(shè)計(jì)器和引擎做了如下修改:
1.修改了Excel導(dǎo)出的問題,因?yàn)樵趹?yīng)用中有大量的需求需要導(dǎo)出報(bào)表并要求和打印樣式匹配:
2.修改了PDF文件導(dǎo)出中文的問題。
3.中文化。
4.打印的走紙控制,在企業(yè)應(yīng)用中,特別是窗口服務(wù)應(yīng)用的同一打印機(jī)打多咱票據(jù)的打印走紙控制。
同時(shí),我對(duì)fyireporting報(bào)表與AgileEAS.NET進(jìn)行了集成,增加了報(bào)表設(shè)計(jì)器可以根據(jù)ORM實(shí)體對(duì)象創(chuàng)建報(bào)表的設(shè)計(jì)極報(bào)表呈現(xiàn)與ORM實(shí)體的數(shù)據(jù)綁定。
制作報(bào)表
AgileEAS.NET平臺(tái)設(shè)計(jì)器提供一個(gè)非常方便的可以化報(bào)表設(shè)計(jì)器,fyireporting原版本的報(bào)表設(shè)計(jì)器只提供了基于數(shù)據(jù)庫連接的報(bào)表設(shè)計(jì)器,我增加了一個(gè)方法,基于AgileEAS.NET平臺(tái)的ORM數(shù)據(jù)對(duì)象進(jìn)行報(bào)表設(shè)計(jì),整合了ORM與報(bào)表,下面看看新建一個(gè)與數(shù)據(jù)庫相關(guān)的報(bào)表:
首先設(shè)置連接:
選擇數(shù)據(jù)庫表或者編寫報(bào)表的查詢語句:
確定之后使用報(bào)表設(shè)計(jì)器設(shè)計(jì)報(bào)表:
預(yù)覽報(bào)表:
AgileEAS.NET平臺(tái)同時(shí)提供了一個(gè)不需要數(shù)據(jù)庫連接而是基于AgileEAS.NET平臺(tái)中的ORM對(duì)象設(shè)計(jì)報(bào)表的方法,我們來看一下設(shè)計(jì)過程:
首先選擇ORM對(duì)象的組件及ORM表對(duì)象:
確定之后使用報(bào)表設(shè)計(jì)器設(shè)計(jì)報(bào)表:
報(bào)表集成
AgileEAS.NET平臺(tái)在報(bào)表的部署上采用了集成部署的思路,即設(shè)計(jì)好的報(bào)表定義存儲(chǔ)在數(shù)據(jù)庫中,客戶端在使用中讀報(bào)表定義并緩存在客戶端,平臺(tái)中增加了一個(gè)報(bào)表管理的應(yīng)用插件報(bào)表管理:用于管理系統(tǒng)中的所有報(bào)表。
開發(fā)人員可以使用獨(dú)立的報(bào)表設(shè)計(jì)器設(shè)計(jì)好報(bào)表,然后在報(bào)表管理中新建一個(gè)報(bào)表并且導(dǎo)入報(bào)表定義。
新建報(bào)表:
導(dǎo)入報(bào)表定義,可以根據(jù)設(shè)計(jì)好的報(bào)表定義文件導(dǎo)入,也可以直接從報(bào)表設(shè)計(jì)器Copy報(bào)表定義源碼:
開發(fā)員人也可以直接使用集成的報(bào)表設(shè)計(jì)器進(jìn)行報(bào)表設(shè)計(jì):
報(bào)表管理模塊集成的報(bào)表設(shè)計(jì)器是一個(gè)相獨(dú)立的報(bào)表設(shè)計(jì)器相比更加簡潔,這個(gè)報(bào)表設(shè)計(jì)器不像獨(dú)立的報(bào)表設(shè)計(jì),最后把結(jié)果保存到報(bào)表定義文件,而是直接保存到AgileEAS.NET的報(bào)表定義數(shù)據(jù)庫中。
程序中使用報(bào)表
AgileEAS.NET平臺(tái)提供了一個(gè)報(bào)表打印/預(yù)覽控件與報(bào)表打印/預(yù)覽窗口,開發(fā)人員可以根據(jù)需要情況彈出的打印窗體還是使用可以嵌入在應(yīng)用界面中的打印控件。
因?yàn)閳?bào)表定義是在數(shù)據(jù)庫中,所以在報(bào)表打印前需要賦予報(bào)表打印控件報(bào)表定義和報(bào)表的數(shù)據(jù)源,我們?cè)谄脚_(tái)的報(bào)表管理中定義了一個(gè)IRportEx接口,用于存儲(chǔ)報(bào)表定義,下面演示一個(gè)使用彈出窗體的報(bào)表打印例子:
//報(bào)表對(duì)象
IReportEx report = DALHelper.DALManager.CreateReportEx();
report.Session = ContextHelper.Session;
report.Name = "診療項(xiàng)目列表";
report.Refresh();
//綁定到報(bào)表的數(shù)據(jù)對(duì)象(ORM表對(duì)象)
IItemInfoPrintList pl = this.itemList.GetPrintList();
//打印對(duì)話框
RDLViewDialog printForm = new RDLViewDialog();
//綁定報(bào)表定義
printForm.Report = this.Report;
//綁定打印數(shù)據(jù)
printForm.DataObject = pl;
//預(yù)覽打印
printForm.PrintPreview();
以上代碼效果如下圖:
使用AgileEAS.NET平臺(tái)提供的報(bào)表打印控件的使用方法同彈出式打印窗口,代碼如下:
//報(bào)表對(duì)象
IReportEx report = DALHelper.DALManager.CreateReportEx();
report.Session = ContextHelper.Session;
report.Name = "演示報(bào)表";
report.Refresh();
//綁定到報(bào)表的數(shù)據(jù)對(duì)象(ORM表對(duì)象)
IIteminfoList dataList =
EAS.Exam.DAL.Interface.DALHelper.DALManager.CreateIteminfoList();
dataList.Session = ContextHelper.Session;
dataList.GetIteminfoList(string.Empty, this.tbName.Text);
//綁定報(bào)表定義
this.reportViewer.Report = this.Report;
//綁定打印數(shù)據(jù)
this.reportViewer.DataObject = pl;
以上代碼執(zhí)行效果如下圖:
在AgileEAS.NET平臺(tái)的應(yīng)用項(xiàng)目開發(fā)中,我們建設(shè)使用這種模式的報(bào)表開發(fā),簡單、直觀,在我們的開發(fā)實(shí)踐中,我們也可以使用這種方式代替數(shù)據(jù)查詢模塊。