戚 平,何俊博
(1.中國石油大學(xué)(華東)山東 青島266580;2.中國移動通信集團新疆有限公司博州分公司 新疆 博爾塔拉蒙古自治州833500)
基于B/S架構(gòu)的自主生成報表引擎系統(tǒng)設(shè)計與實現(xiàn)
戚 平1,何俊博2
(1.中國石油大學(xué)(華東)山東 青島266580;2.中國移動通信集團新疆有限公司博州分公司 新疆 博爾塔拉蒙古自治州833500)
基于當前社會對報表應(yīng)用的需求,為滿足開發(fā)人員對已有數(shù)據(jù)庫查詢顯示的不同需要,采用B/S架構(gòu),使用JSP編程,設(shè)計實現(xiàn)了自主生成報表引擎系統(tǒng)。該系統(tǒng)使用瀏覽器登錄服務(wù)器,為用戶劃分個人工作空間,根據(jù)用戶需求自由設(shè)定報表的查詢項目,解決了時間、地點的局限,突破了只能按系統(tǒng)設(shè)定好的報表模版查詢的桎梏。經(jīng)測試該系統(tǒng)具有良好的穩(wěn)定性、兼容性和可擴展性,達到了設(shè)計的要求。
自主生成;報表引擎;B/S架構(gòu);報表生成器
在信息社會中,各種信息都需要進行處理并直觀的展現(xiàn)出來。很多企業(yè)的系統(tǒng)中都需要將大量數(shù)據(jù)以報表的方式顯示和分析,報表的重要性越來越得到了企業(yè)決策者的肯定。隨著時代的變遷,傳統(tǒng)紙質(zhì)報表在社會的進步以及科技的發(fā)展中逐漸被電子報表所取代,各大公司也投入了大量資金進行報表設(shè)計工具的開發(fā)[1-2]。目前大型企業(yè)基于B/S的報表系統(tǒng)開發(fā)模式越來越成熟,但是很多開發(fā)人員仍在根據(jù)實際需求直接寫代碼實現(xiàn)數(shù)據(jù)的分析、處理、展現(xiàn)功能。這樣的實現(xiàn)方式會做很多重復(fù)工作,比如很多項目中都需要通過報表數(shù)據(jù)和圖表來展現(xiàn)業(yè)務(wù)趨勢,而展現(xiàn)的時間粒度、地域粒度、數(shù)據(jù)緯度和指標卻各不相同,所以結(jié)果也是不同的[3-4]。
報表引擎是用來生成相應(yīng)的報表并展示給用戶的一種工具。報表引擎起源于流行的工作流引擎的原理、報表格式的定義、報表內(nèi)容的各種算法,產(chǎn)生報表引擎的思想。它主要是引用工作流引擎的流程運轉(zhuǎn)原理,在原始數(shù)據(jù)的基礎(chǔ)上,定義報表的格式、報表的算法,根據(jù)定義的算法自動執(zhí)行計算,并輸出計算后的結(jié)果,再根據(jù)定義的報表格式顯示報表的內(nèi)容[5]。
客戶使用的系統(tǒng)中經(jīng)常需要顯示大量的報表,這些報表中的指標隨著客戶的需求變化也在不斷地發(fā)生改變,這對管理人員來說當用戶需求改變時就要大規(guī)模的更改系統(tǒng),修改顯示報表的頁面。為了使管理人員解脫束縛,在已有數(shù)據(jù)的基礎(chǔ)上開發(fā)一套能夠通過自定義來生成報表的系統(tǒng),這會大大降低管理人員對于系統(tǒng)的維護時間。隨著需求的出現(xiàn),技術(shù)人員開發(fā)出了很多系統(tǒng)平臺,比如:巫喬順等設(shè)計并實現(xiàn)了一種基于XML和Excel技術(shù)的自定義動態(tài)報表系統(tǒng),系統(tǒng)由數(shù)據(jù)層、業(yè)務(wù)層、定義層及展現(xiàn)層組成[6];潘永才等則提出了一種可定制報表系統(tǒng)的設(shè)計方法:給出了可定制報表系統(tǒng)架構(gòu)與實現(xiàn)方法,并在.NET平臺下設(shè)計了由報表定制模塊、報表解析模塊等組成的可定制報表系統(tǒng)[7]。
隨著當前網(wǎng)絡(luò)環(huán)境的無處不在,各種電子產(chǎn)品大都具備了連通網(wǎng)絡(luò),處理各種信息乃至工作任務(wù)的強大功能,直接利用這些工具通過網(wǎng)絡(luò)瀏覽器來完成一些報表的定制將會極大地方便從事相關(guān)工作的從業(yè)人員?;贐/S架構(gòu)的自主生成報表引擎系統(tǒng)的設(shè)計與實現(xiàn),為解決這樣的社會需求提供了一種解決的思路。報表從某種方式上可以劃分為兩類:用來查詢顯示的報表,提供數(shù)據(jù)上報的報表。在這個系統(tǒng)里只涉及用來查詢顯示的報表。
自主生成報表引擎系統(tǒng)是一個通過瀏覽器訪問服務(wù)器端,調(diào)用報表生成工具來完成一系列報表任務(wù)的系統(tǒng)平臺。它通過Web方式實現(xiàn)報表的生成、預(yù)覽與打印,為用戶提供滿足其要求的報表格式。根據(jù)不同用戶對報表的不同需求,系統(tǒng)中所顯示的報表會隨著用戶的自主設(shè)定而不斷地變化。由于傳統(tǒng)的編寫jsp報表頁面工作量巨大,因此自定義生成報表引擎系統(tǒng)將功能進行了模塊化設(shè)計,以提高工作效率。
系統(tǒng)根據(jù)用戶提供的要求來定制報表,需要實現(xiàn)以下功能:
1)用戶名認證:限定用戶的工作區(qū)間,即用戶登錄后只能修改其用戶權(quán)限下定制的報表。
2)定制報表:此功能是本系統(tǒng)的主體功能。一個完整的報表由表名,表頭,表格數(shù)據(jù),日期組成,用戶通過輸入表名、表頭、數(shù)據(jù)查詢語句,選擇時間粒度,即可完成一個簡單的報表定制。
3)報表列表:顯示用戶定制的報表信息(包括報表名,生成時間,定制人id)。
4)預(yù)覽報表:預(yù)覽已經(jīng)定制的報表。
5)修改報表:進入修改界面,可更改表名,表頭,數(shù)據(jù)查詢語句,時間粒度。
6)報表下載打?。簩蟊韺?dǎo)出到Excle表格中或者打印。
將以上功能進行歸納,可以將系統(tǒng)劃分為3大模塊:
1)用戶工作區(qū):完成用戶的登錄驗證并設(shè)定用戶的工作區(qū)間,使用戶之間不會互相干擾。
2)報表定制、修改模塊:使用新建報表功能,填寫報表生成器的內(nèi)容,創(chuàng)建報表。完成后,用戶可以查看報表信息內(nèi)容,進行報表的修改、刪除等管理工作。
3)報表顯示打印模塊:實現(xiàn)將用戶生成的報表導(dǎo)出并打印的功能,打印功能使用一款名為iText的開源的免費純java組件來完成,在本文中就不做介紹了。
2.1 用戶工作區(qū)的實現(xiàn)
用戶輸入用戶名和密碼后,點擊登錄按鈕,服務(wù)器端調(diào)用javabean通過jdbc與數(shù)據(jù)庫連接進行用戶驗證。登錄成功后顯示index.jsp主頁面,框架分為兩部分,如圖1所示。
圖1 主頁面框架
頁面的頂部,是用于顯示含有系統(tǒng)信息的圖片,在圖1中未做展示。第①部分位于左側(cè),主要含有報表列表、新建報表、修改報表、報表信息四個按鈕供用戶選擇需要進行的任務(wù);第②部分位于右側(cè),是在主頁中嵌入了一個