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