1. 引言
十幾年來,信息技術飛速發展,在辦公自動化、MIS、ERP等的發展浪潮中,報表管理系統的設計與實現始終是各開發人員和用戶非常關心的技術和業務環節。同時,報表管理對于各企事業單位而言,能否實現其高度的實用性、高效性和靈活性,決定了報表管理系統的成功與否。經過多年的發展,近年來基于B/S模式下的Web報表管理在悄然走俏,同時,現代企業下的報表需求呈現出更復雜(多維),自定義更靈活,管理更簡便的趨勢。如何實現B/S方式下的Web報表管理是許多用戶或開發商都會遇到的問題。而作為新時代Web開發的寵兒――ASP.NET提供了目前最先進的Web開發平臺,它采用了微軟最新的DOT NET框架,是DOT NET框架的核心元素。
2. 系統需求分析及解決方案
2.1 需求分析
本系統的需求所涉及的功能和性能方面比較全面,在此只列舉部分較為核心的需求,如下:
1) 報表可完全自定義,即可方便的定義新的報表,刪除不用的報表定義,并且定義好的報表在系統運行時動態生成;
2) 報表的多維性,在2維的基礎上可以延伸到3維和4維,即行和列的定義均可再歸類細分,使得報表更靈活,適應現代企事業單位復雜報表的要求;
3) 報表具有兩種提交模式,一種是直接在系統中在線填寫數據提交,另一種是離線編輯再通過上傳文件進行提交,相應具體的模式在報表定義時即確定。
4) 報表具有工作流特性,提交的報表可根據設定好的路徑進行多級審批,即實現一級提交,多級審批;
5) 每類報表的審批路徑可通過報表授權模式實現對審批路徑的完全自定義;
6) 用戶對報表的操作通過報表授權的模式進行,可以靈活的指定某個用戶可以操作哪些表格,對每個表格具有哪些操作權限;
7) 對于大型集團企業,可適應跨國、跨地域或跨門類的報表提交,即同一報表可隸屬于不同的分公司/門類;
8) 報表數據可系統自動進行匯總、分類和生成圖表(柱狀圖、餅狀圖等),并可產生分析結果;
9) 報表具有導入導出數據、打印等功能;
10) 系統易于維護和再次修改開發,移植性要好,具有良好的擴展接口;代碼量要少且運行效率高;
2.2 解決方案
基于以上需求分析,提出以下解決方案:
1. 實現技術
表1 技術方案
2. 功能模塊劃分
1) 系統登錄模塊
提供用戶登錄界面,并識別用戶類型、權限等信息。
2) 報表管理模塊
主要完成報表的增加、自定義、修改、刪除、授權等功能。
報表定義子模塊――完成新增報表的完全定義,定義報表的基本屬性、提交模式、審批級數等。
報表編輯子模塊――對既有報表進行修改、刪除等工作。
報表授權子模塊――對用戶、對象(包括報表名稱和隸屬)和操作類型三者關系進行關聯,完成報表授權。
3) 報表操作模塊
完成報表的查看、錄入提交和多級審批功能。
報表錄入子模塊――對新報表進行數據錄入和提交,并存儲到數據庫。
報表審批子模塊――對已提交數據進行第一級審批,對上一級審批通過數據進行次級審批。
報表查看子模塊――對自己提交的數據,自己審批的數據進行時候查看;相應權限用戶對多級審批通過完成的數據進行查看。
4) 報表運算模塊
主要完成已審批完成的數據進行自動匯總、生成圖表等工作,另外提供數據的導入導出、打印等功能。
5) 系統管理模塊
完成系統用戶的增刪管理工作,以及系統權限的授予,提供用戶可修改密碼等。
3. 系統數據結構設計
1) 數據結構圖
由于本系統要求報表定義和操作的高度靈活性和報表復雜性(報表需具有2~4維結構,能夠自定義每類報表的工作流程,實現報表的一級提交,多級審批),而且報表能夠進行靈活的授權……這些需求都決定了系統數據結構設計的極端重要性,數據結構的是否合理,直接影響了系統的開發和最終實現。
下面提供了圍繞用戶、報表定義、報表隸屬、數據存儲、數據操作和報表授權這幾個核心模塊的數據結構,見圖1。
圖1 系統數據結構實體關系圖
2) 部分表和字段說明
多個表中的Valid字段:用于標識該記錄的有效性,對于一些比較重要且與其他表主外鍵關聯的記錄,直接刪除是不妥的,比較好的做法是執行刪除操作時將該記錄的Valid置0(假設1為有效,0為無效);
表ReportTable中的TableType字段:標識報表類型,一般為日報表、周報表、月報表、季度報表和年報表等;
表ReportTable中的SubmitType字段:標識提交類型,本系統分為兩種:在線填報提交和離線編輯并上傳文件提交;
表ReportTable中的DutyNum字段:標識審批級數;
表TableRow中的RowOrder字段和表TableColumn中的ColumnOrder字段:分別標識表中的行名稱和列名稱的排序號,以保證動態生成的表格能;按照定義時的行列順序一致。通過改變這兩個字段的值即可調整行列順序;
表SubmitData和SubmitFile:分別存儲兩種提交模式下的數據;
表ReportSubmit中的NowDealState字段:標識目前此記錄的操作狀態,區分是暫存數據、提交數據、某一級審批中數據、完成數據還是被退回數據;
表DataDeal:記錄用戶的操作記錄,暫存、提交和審批;
表ReportImpower中的DutyCode字段:標識用戶對某個隸屬的某個表格的操作權限,是提交、1級審批還是n級審批;
4. 系統程序結構設計
本系統采用面向對象的開發技術,在.NET框架下,可以實現真正的用戶界面與程序代碼分離(即“代碼隱藏”CodeBehind技術)。利用此特性,我們可以把每一功能模塊進行邏輯劃分成程序塊,再把這個程序塊封裝成類(.cs文件),然后再把所有的類文件編譯成一個動態鏈接庫(.dll文件)。當系統操作需要某個功能時,只要調用動態鏈接庫中的相應類即可。
本系統的程序塊較多,限于篇幅,下面介紹兩個核心的程序塊結構。
1) 動態生成報表程序
圖2 動態生成報表程序流程圖
這是一個系統基本程序,因為系統在很多操作場景下都需要動態生成報表。
本程序的輸入為所選報表的名稱(TableCode)、報表隸屬(BelongCode)和報表時間(TableTime,日報表為某天日期,周月季年報表為起始日期到結束日期)。程序輸出為所生成報表的HTML代碼,有三種狀態:報表不正確、報表正確但無數據、報表正確且有數據。
2) 操作報表程序
當完成上述動態生成報表后,即進入報表待操作模式。
報表操作分為三個狀態:查看、錄入和審批(多級審批中具體是哪級審批由報表授權表中的DutyCode字段標識)。
此程序判斷環節較多,主要是判斷報表狀態、用戶的操作狀態、用戶對于此報表的有效權限。根據每一個判斷的不同,程序走向也將不同。另外本程序過程中涉及用戶錄入數據這一環節,當然,錄入數據分為填寫數據和上傳文件兩種情況。
圖3 操作報表程序流程圖
除了這兩個核心程序塊以外,還有報表定義程序塊、報表授權程序塊、報表數據匯總計算程序塊、報表數據導入導出程序塊等等。在此就不一一介紹了。
5. 結束語
基于.NET平臺的復雜報表管理系統,實現了對一類復雜報表的最大限度的靈活自定義、報表網上工作流轉、報表數據綜合處理等。它的面向對象的開發模式和最前沿的開發工具ASP.NET,保證了其良好的可擴展性、移植性和操作性。更加適應當今網絡化辦公及數據管理的趨勢和大型企事業單位的需求。