文|江兆堯
報表功能幾乎是所有數(shù)據(jù)庫應用系統(tǒng)最基本、最重要的需求。首先,用戶往往需要用直觀、綜合的方式來獲取數(shù)據(jù)庫的信息,而不僅僅是查看單個數(shù)據(jù)。其次,報表還是企業(yè)決策者關心的內(nèi)容,報表傳遞也是數(shù)據(jù)、信息和知識在不同管理層次之間流動的一種方式。本文提出了報表實現(xiàn)過程中面臨的問題,并對問題做出分析論證后形成報表設計的方案,為建筑企業(yè)在報表需求的解決提供借鑒作用。
報表系統(tǒng)開發(fā)涉及的問題是很多的,主要存在如何獲取、顯示和生成、如何存儲數(shù)據(jù)和樣式的多樣性。
“報表”就是把一些數(shù)據(jù)放在固定格式的固定位置上的表格,而表格有簡易復雜多種。“畫表”就是產(chǎn)生一格的同時也將數(shù)據(jù)按格式放在格子內(nèi),就是格式、數(shù)據(jù)同時產(chǎn)生,這樣整個表格畫完了,表中的數(shù)據(jù)也有了,報表就生成了。這種方式適合于用來產(chǎn)生規(guī)整的報表,這樣才可以逐行或逐列的畫出該報表。這種方式的優(yōu)點是產(chǎn)生報表快(成批處理數(shù)據(jù))、處理程序簡單(一個循環(huán)語句就可以了)。
“填表”與“畫表”完全不同,它是必須先有表格格式,然后將指定的數(shù)據(jù)填在指定的表格位置中。這種方式既適合于用來產(chǎn)生不規(guī)整的報表,也適用于產(chǎn)生規(guī)整報表。這種方式的優(yōu)點當然就是適用范圍廣,但缺點是速度慢,因為它要先獲取表樣,然后一個一個地取出數(shù)據(jù),再一個一個地填在格中,目前大多數(shù)的報表需求都是此種情況,也就是常見的靈活性報表。
解決問題:
1、分開處理:讓用戶在設計報表時確定報表是否規(guī)整,如果規(guī)整就讓該報表采用“畫表”方式產(chǎn)生,否則采用“填表”方式產(chǎn)生。
2、統(tǒng)一處理:全部采用“填表”方式產(chǎn)生,在應對靈活度較高的報表需求時,需要應用這種方案。
如何實現(xiàn)自動計算公式、SQL或功能標簽定義嵌入、多種數(shù)據(jù)交叉報表或產(chǎn)生新報表等很多開發(fā)中問題。表格樣式如粗體、下劃線、斜體、小數(shù)字數(shù)、合并表格、刪除表格等等樣式設計操作,或者像單機軟件所具有畫圖、計算、編輯等功能。
表格數(shù)據(jù)樣式固定又確保打印不錯位不漏的確是有困難,這歸于模板定制,比如說:某問卷調(diào)查的網(wǎng)上填報,打印的報表不符合調(diào)查規(guī)定報表,這時根據(jù)調(diào)查發(fā)起方提供的規(guī)定報表模板,或者是doc模板,或者xsl模板,定制模板導入,自定義模板,確保問題解決,目前普遍都采用結(jié)合XML更能實現(xiàn)各種數(shù)據(jù)樣式準確性。數(shù)據(jù)實時更新,那么可以設計數(shù)據(jù)同步掃描、數(shù)據(jù)/文件備份和日志或者靈活調(diào)度器,可以確保數(shù)據(jù)不錯漏。多種數(shù)據(jù)表復雜、交叉和統(tǒng)計報表都要取決于表結(jié)構(gòu)的設計,或者動態(tài)制表、視圖和文件等的設計。
問題解決:
要在WEB上實現(xiàn)表樣的設計有很多種方案可供選擇:
1、使用XML、XSL、DHTML、HTML技術來實現(xiàn);
2、自己寫ActiveX控件或Java Applet來實現(xiàn);
3、利用IE的Web Browser中的ActiveX 控件或借用第三方控件實現(xiàn)。
獲取免費的第三方軟件,無疑是最好方案。比如Microsoft Office Web Components 中的SheetSpace控件,雖然不是免費(必須要MS Office2000+支持),但用戶都有使用MS Office,不僅開發(fā)成本降了,用戶操作也習慣,它能有效具備EXCEL功能。
1、在Microsoft Office Web Components中的SheetSpace控件內(nèi)設計表樣,或者在MS EXCEL內(nèi)設計好表樣,再將其導入到Microsoft Office Web Components中的SheetSpace控件中顯示出來;設計一個導入MS EXCEL的程序。數(shù)據(jù)顯示格式、分頁、固定表頭、字體大小、顏色等都在設計在表樣中。
2、報表數(shù)據(jù)從數(shù)據(jù)庫中提取后以XML的格式保存在客戶端,在Microsoft Office Web Components中的SheetSpace控件內(nèi)顯示,將獲取的報表數(shù)據(jù)填在指定的單元格;
3、將Microsoft Office Web Components中的SheetSpace控件的結(jié)果存在數(shù)據(jù)庫的TEXT字段中。表樣的格式是EXCEL 的HTML格式,由Microsoft Office Web Components中的SheetSpace控件可以直接獲?。?/p>
4、 檢測Microsoft Office Web Components中的SheetSpace控件的change事件,將目前單元格的值與原始數(shù)據(jù)比較,不相同則修改原始數(shù)據(jù),并置修改標志。該數(shù)據(jù)與數(shù)據(jù)庫字段的對應關系根據(jù)公式解釋得來。這樣也就可以知道哪些格中的數(shù)據(jù)合起來是數(shù)據(jù)庫表的一條完整記錄。對于增加的數(shù)據(jù),專門設計一個輸入工具,來提示用戶需要輸入哪些數(shù)據(jù)才是完整的。
目前,全球90%電腦用戶都是在微軟的系統(tǒng)平臺使用IE瀏覽器,并且多數(shù)使用Office辦公軟件。我們從技術角度或許不難發(fā)現(xiàn),在客戶端WINNT平臺瀏覽器下使用Java應用程序(借助虛擬機),因為系統(tǒng)兼容性需處理編碼轉(zhuǎn)換又再通過http傳輸,據(jù)統(tǒng)計性能可能會比微軟內(nèi)核語言應用程序差上20倍左右。在國內(nèi)Office軟件使用率比較高,并且又有支持的免費組控件和一些微軟件補丁或擴展服務。非常有利于企業(yè)辦公報表系統(tǒng)插件嵌入和復雜功能集成。比如:借助免費的Office打印控件可以實現(xiàn)網(wǎng)頁像Word打印功能。
J2EE和.Net都是服務器工作網(wǎng)絡語言,所以不存在客戶端支持不支持控件問題。更多用的是客戶端腳本:Html、JavaScript、VBScript和Office里的宏等。
而從從服務器系統(tǒng)和B/S系統(tǒng)兼容性考慮,J2EE目前是企業(yè)構(gòu)建多種架構(gòu)WEB系統(tǒng)專業(yè)性最有優(yōu)越性,但是開發(fā)周期長,人物力相對龐大,.Net借助整套微軟件產(chǎn)品,雖然不易系統(tǒng)平臺移植,開發(fā)見效相對快,也降低一定成本,建立中小型企業(yè)系統(tǒng)不成問題。兩種各有春秋,作為報表系統(tǒng),問題出現(xiàn)主要考慮功能組件和這兩種主處理程序怎樣實現(xiàn)和接口。
下面列幾點分析一下:
1、若接受來自客戶端傳輸?shù)氖嵌M制數(shù)據(jù)流(文件流),兩種語言處理不成問題,反之,由于一些客戶端應用的微軟控件處理的,Java可能更多考慮編碼轉(zhuǎn)化后才能有效進行。
2、J2EE報表系統(tǒng)開發(fā)可以有JavaBean組件、j2sdk自帶的標簽庫和類、Java的AWT、CORBA等應用或者Java與外部COM結(jié)合應用組件;比如:涉及JNDI、JACOB、JNI、JFreeChart 、Jboss等領域應用。
3、.Net報表開發(fā)可以引用其它兼容微軟組件、framework自帶服務器控件庫(并有現(xiàn)成數(shù)據(jù)表、圖表控件庫)或者調(diào)用外部com組件。比如:涉及ADO.NET、DataGird、DataList、DataTable、OLE引用等領域應用。兩者都可以處理和生成XML,PDF和XSL等多種格式的文件,上傳下載,數(shù)據(jù)接口等系列功能。
問題解決:
可以采用Java為主J2EE架構(gòu)系統(tǒng)開發(fā),需要結(jié)合做一些開放源代碼和庫類的研究,要借助外部一些COM組件運用,也可以直接應用.Net服務器控件開發(fā)。
通過對以上三個難點的分析,考慮到建筑企業(yè)中報表體系和指標頻繁變動的實際情況,選用靈活的、可擴展、易修改的方式無疑是最好的選擇,采用填表的方式解決表格產(chǎn)生的問題,并在復雜表格格式上采用C/S端設計器形成XML的方式,這樣既可以減少代碼的開發(fā)量提高開發(fā)效率,又能夠保證程序的可用性及健壯性,最后在技術體系的選擇上我們選用開放性、共享性良好的J2EE架構(gòu),這樣可以有很多成型免費的開放框架及工具供我們選用,可以在開發(fā)效率上大大提高。
第一是中間件設計方案:結(jié)合客戶端控件、服務器組件和主程序本身開發(fā)中間件式WEB設計器。比如常用技術采用:C/S模式的報表設定器→生成XML報表模板→發(fā)布到WEB服務器中→通過程序(JSP/ASPX)向報表引擎中傳入?yún)?shù)(報表條件等)→報表引擎處理、展現(xiàn)數(shù)據(jù)。
第二是B/S開發(fā)設計方案:采用服務器組件和主程序本身結(jié)全開發(fā)WEB在線設計器。比如基于J2EE、XHTML、XML、CSS的技術實現(xiàn)結(jié)合了大量WEB組件,如下拉框、彈出字典、日期選擇框、框架集、標簽頁及一些圖表、生成文件組件類等結(jié)合架構(gòu)設計根據(jù)業(yè)務需求實際開發(fā)。
C/S界面對客戶來說可能熟悉并有一定依賴性,是采用ACTIVEX控件或JavaApplet及相關應用組件實現(xiàn)的,是C/S與B/S的結(jié)合技術,設計器多用于服務器端操作,傳輸數(shù)據(jù)是XML和文件流,不會對瀏覽器造成太大壓力,報表設計過程快捷。其二,J2EE的B/S設計,B/S界面可靈活設計。根據(jù)J2EE設計架構(gòu)采用Java的相應多種組件結(jié)合實現(xiàn),設計器可以在線設計操作,那么傳輸?shù)奶幚頂?shù)據(jù)和入庫操作,也可以是動態(tài)生成的XML和數(shù)據(jù)流。報表導出,多數(shù)是采用服務器實現(xiàn)下載或程序生成傳至給客戶。開發(fā)周期相對短點,靈活性受制于業(yè)務和設計有所限制,通用性也稍差。兩種方案設計不同,但是也存在共性,如WEB客戶腳本JS、數(shù)據(jù)庫設計、XML以及采用SOAP協(xié)議應用等。
本文主要針對WEB報表設計器的不同設計兩種報表開發(fā)設計方案??梢愿鶕?jù)具體B/S業(yè)務流程的需要,采取相應合適的方案和合理設計,結(jié)合兩種方案,制作一套符合自身特點的B/S報表系統(tǒng)。目前基于B/S架構(gòu)設計存在的靈活性及使用插件等劣勢,一般選用中間件設計方案,在報表設計上采用C/S架構(gòu),在展示上采用B/S架構(gòu),這樣可以實現(xiàn)靈活設計復雜報表,并靈活展示,適應了報表體系等變動頻繁的情況下快速進行報表字段設計和更改的需求,有廣泛的應用空間。
經(jīng)過實際應用,較傳統(tǒng)代碼開發(fā)方式,一張報表的開發(fā)效率提高了1000%,應用效果如圖所示,適應了企業(yè)人力資源緊張、項目周期短的情況。同時保證了開發(fā)報表的可用性及穩(wěn)定性。此成果有著較大的市場空間及經(jīng)濟效益,適合推廣。