余建成
(廈門雅迅網絡股份有限公司 廈門 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