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