潘永才+劉海龍



摘 要:針對信息管理系統中報表系統設計靈活性差、維護困難的問題,提出一種可定制報表系統的設計方法。該方法將報表設計抽象為報表結構和報表邏輯設計,以數據的形式描述報表結構和邏輯,客戶端通過對報表結構和邏輯數據的解析實現報表功能。通過將報表設計數據化,可實現更加靈活高效的報表設計,提高了系統開發維護效率,能夠更好地適應報表的多樣性和變化性。
關鍵詞:可定制;報表;管理系統;邏輯設計
中圖分類號:TP316 ? ? ? ? ? ? ? ? ? ? 文獻標識碼:A ? ? ? 文章編號:2095-1302(2015)01-00-03
0 ?引 ?言
目前,企業信息化建設已是大勢所趨,而報表系統是信息管理系統中的重要組成部分。在傳統的報表系統中,報表的結構、查詢條件、用戶交互、展示細節等信息都是以靜態的方式固化在系統代碼中,因此在系統開發測試到實施部署的整個階段,因應用環境變化等因素而必須調整報表設計時,必須修改系統源代碼。這種報表設計方式靈活性差,開發維護困難且不具備通用性和可移植性。
近年來,針對如何靈活設計報表系統的問題,涌現了很多研究和開發成果。李廣等提出一種基于Silverlight技術的柔性生產報表系統的設計方法,給出了柔性生產報表系統架構與實現方法,并在.NET平臺下設計由報表柔性編輯模塊、報表生成模塊和報表顯示模塊等組成的柔性生產報表系統,較好地實現了報表的靈活設計[1]。盧笑天等著眼于查詢報表的可定制,設計了基于XML的可定制查詢報表系統,并提供了與管理系統集成的生產報表的配置接口及解析報表的解析接口,較好地實現面向二次開發人員的可配置查詢報表系統設計[2]。
上述研究成果的思想很好地解決了報表生成與展示的問題,但局限于對查詢報表系統的研究和開發,不能很好地解決錄入系統中與用戶交互的復雜業務邏輯的設計,因此迫切需要研究一種靈活的錄入報表系統的設計方法。
本文提出一種可定制報表系統的設計方法;給出了可定制報表系統架構與實現方法,在.NET平臺下設計了由報表定制模塊、報表解析模塊等組成的可定制報表系統。
1 ?報表結構與邏輯抽象
油田采油廠的生產管理報表系統包含大量生產投入和產出要素等基礎數據錄入和各類管理指標查詢報表,大部分數據經手工錄入系統。錄入報表系統的作用在于將手工錄入操作規范化、自動化,提高手工錄入效率,減少錄入數據出錯率。
基礎數據錄入分為自動生成、手工選擇和手工填寫三種情況。通過自動生成和手工選擇的方式可將錄入系統的基礎數據規范化,方便對數據進行進一步匯總處理;對于數字量數據通過手工錄入加一定的限定方法實現數據的有效性控制;備注等非匯總數據通過手工填寫。對自動生成和手工選擇的操作的規范稱為報表的業務邏輯。
可定制報表系統的設計方法將報表拆分為報表結構、報表數據、報表邏輯,報表設計則包含報表結構設計和報表邏輯設計。報表結構與邏輯均以數據的形式描述并保存于數據庫對應數據表中,報表結構數據與邏輯數據相互對立又相互關聯,共同決定了報表的顯示形式和可執行的操作。
1.1 ?報表結構描述
報表結構包括構成報表的所有數據列的數據源字段名、列標題文本、數據列格式、寬度、對齊方式等基本信息。數據列的字段名與該報表在數據庫中存儲的數據表對應字段一致;列標題文本具有一定的可擴展性以適應報表多級列標題的需要。
對完整的報表結構數據進行解析并綁定報表數據內容即可顯示完整的查詢報表,而完成錄入報表設計則需要在此基礎上增加業務邏輯的設計與解析。
1.2 ?報表業務邏輯抽象
在一般條件下,報表數據之間的業務邏輯可描述為一個方法:
y = function (x)
其中,x、y為報表數據元素,x為源數據元素,y為目標數據元素,function為根據源數據元素x生成目標數據元素值并處理用戶交互的過程。
根據實際情況,業務邏輯有一下幾種形式:
y = text(x)。根據源數據元素x的值獲取唯一目標數據元素y的值并綁定該值。
y = list(x)。根據源數據元素x的值獲取目標數據元素y的取值列表,綁定該取值列表,用戶選擇后確定數據值。
x = query(x)。源數據元素與目標數據元素相同,用于模糊查詢元素值,根據用戶輸入的部分內容查詢其可能的元素值。
x = round(x)。源數據元素與目標數據元素相同,用于格式化數字類型數據,限制數字小數位數。
x = limit(x)。源數據元素與目標數據元素相同,用于格式化數字類型數據,限制數字大小。
含有兩個及以上源數據元素的業務邏輯y = text (x1, x2,…)、y = list (x1, x2,…)等與處理方式與上述類似。源數據元素也可以是報表的基礎數據(用來唯一確定報表類型)或某一確定值。
1.3 ?報表業務邏輯的數據描述形式
報表業務邏輯可用類似結構化查詢語言(SQL:Structured Query Language)的形式描述,利用其數據查詢語言(DQL:Data Query Language)的查詢功能處理報表數據間的邏輯關系。
常用的數據查詢語言語句如下:
SELECT resultField FROM table WHERE field = conditionValue;
將特定的SQL語句中的conditionValue以源數據元素x的值代替,其返回為目標數據元素(y)的值或其列表。在業務邏輯SQL語句中,源數據元素x為自變量,將其以花括號環繞以方便解析。業務邏輯描述如下:
SELECT resultField [as y] FROM table WHERE field = {x};
其中,方括號部分為可選項,將返回結果的字段名轉換為報表目標數據元素的字段名。
配合SQL Aggregate、Scalar函數,該數據描述形式可實現較豐富的業務邏輯。
2 ?可定制報表系統設計
本文在.NET平臺下用C#語言設計可定制報表系統。
如圖1所示為可定制報表系統架構。其核心為報表解析模塊和報表定制模塊,而對報表進行結構與邏輯抽象則是報表定制和解析的核心。數據交互模塊完成客戶端與數據庫之間數據交互。報表解析模塊通過數據交互模塊獲取報表結構與邏輯數據對報表進行功能解析,完成報表系統與用戶交互的底層功能,為報表系統提供支持。報表定制模塊根據報表結構與邏輯的描述方法完成報表的定制功能。
2.1 ?報表解析模塊
報表解析流程框圖如圖2所示。報表解析模塊從數據庫中的報表結構表和報表邏輯表中讀取指定報表的結構數據和邏輯數據,進行結構解析和邏輯解析,生成報表結構,完成邏輯解析的初始化,等待響應用戶交互。
圖1 ?可定制報表系統架構
圖2 ?報表解析流程框圖
結構解析過程為:根據結構數據生成報表的數據列,設置列標題、列字段、列寬、可讀屬性等信息,對于有多級列標題的報表,自動檢測合并相應的標題單元格。
邏輯解析流程框圖如圖3所示,其具體過程為:對報表邏輯數據作簡單處理后生成數據關系字典(邏輯字典),嘗試對報表邏輯數據進行SQL生成與查詢,對于初始化過程中可以確定的報表數據保存在基礎數據字典中。對于用戶交互過程中的請求,處理程序首先搜索基礎數據字典,若存在其需要的數據,則直接以該數據響應用戶請求;若不存在,則從邏輯字典中讀取對應邏輯數據,生成SQL并以查詢結果響應用戶請求。
圖3 ?邏輯解析流程框圖
SQL生成與查詢是將邏輯數據中的變量賦值為當前操作數據記錄中的對應數據元素的值或用戶基本信息的值,從而將邏輯數據轉換為標準SQL語句,執行該語句并獲取查詢結果。
報表解析模塊對DataGridView控件進行自定義,使其能夠根據報表結構數據自動生成報表結構,支持多級行列標題,支持報表行列轉換;通過對CellEnter、CellLeave、CellValueChanged、CellEndEdit、KeyPreview、Scroll等事件的處理對用戶操作做出適當響應;增加對報表增、刪、改、查的自動執行過程。
2.2 ?報表定制模塊
報表定制模塊的作用是以圖形界面的形式靈活方便的對報表結構和邏輯進行定制。報表系統開發者可以從一張空白報表模板表上完整的定制報表結構和邏輯細節,也可以將Excel報表框架或數據庫中已定制的類似報表導入空白模板表,進行報表結構和邏輯細節完善。報表結構和邏輯設計完成后,生成的結構和邏輯數據將分別保存至數據庫的報表結構表和報表邏輯表中。
對報表結構和邏輯抽象成數據形式描述后,可以靈活地對報表進行個性化的定制。例如:對于同一報表不同類型的用戶可以獨立定制,使其顯示形式和業務邏輯更符合用戶個性化的需求,而對于其中相同的部分,不用重復設計。
2.3 ?報表系統設計
報表系統分為錄入系統和查詢系統,通過報表導航模塊和報表解析模塊等模塊實現系統功能。用戶通過報表導航模塊選取某報表后,系統調用報表解析模塊并初始化用戶基礎數據,通過報表解析模塊實現用戶交互操作。
根據報表解析模塊中的報表結構等相關信息,可實現錄入報表Excel導入與糾錯的功能和各類報表數據導出至Excel、PDF等文件的功能,并支持報表批量導出。
2.4 ?報表定制系統設計
報表定制系統通過報表定制模塊定制報表并通過報表解析模塊測試定制報表的實現效果。設計者可循環對報表設計進行修改和測試,直到定制報表滿足設計要求。整個報表系統設計完成投入使用后,若因使用單位組織調整、應用環境變化等情況必須對報表系統做出調整時,更新數據庫中的結構和邏輯模板表即可實現,無須對已安裝的客戶端程序進行更新,因而系統的開發維護更新更為靈活高效。
3 ?結 ?語
本文提出的可定制錄入報表系統的設計方法,將報表設計抽象為報表結構與邏輯設計,將報表的結構數據和邏輯數據保存在數據庫對應的數據表中,可實現更加簡單高效的錄入報表設計,更加靈活精細的報表定制,增強了數據的復用性,提高了系統開發維護的效率,能夠更好地適應生產過程中報表系統的多樣性和變化性。應用該方法設計的報表系統已成功應用于國內某石化企業的生產管理信息系統中,取得了良好的應用效果。
參考文獻
[1]李廣,王建林,趙利強,等.基于Silverlight的柔性生產報表系統的設計[J].計算機工程與設計,2013(7):2595-2598.
[2]盧笑天,唐慧佳.基于XML的可定制查詢報表系統的設計與應用[J].計算機工程與設計,2014(5):1847-1852.
[3]許南山,孫風平.基于XML的可復用報表生成系統的設計與實現[J].計算機工程與設計, 2006,27(3):463-465..
[4]巫喬順,彭海波,李杰.一種自定義動態報表系統的設計與應用[J].機械設計與制造工程,2013(1):80-82.
[5]宋曉宇,劉蔚然,劉天波.基于組件的自定義報表系統的設計與實現[J].計算機工程與設計, 2008(11):2963-2966.
[6]霍志華,王建林,薛堯予.基于工作流和XML的生產報表系統設計與實現[J].計算機工程與設計,2008,29(16):4249-4251.