對于一款軟件或產(chǎn)品,尤其是一些企業(yè)級應(yīng)用的IT軟件,是不可能滿足所有需求的。尤其是針對業(yè)務(wù)化的產(chǎn)品需求,某些個性化的需求就要進(jìn)行二次開發(fā)。二次開發(fā)需要API接口,無論是什么樣的開發(fā),開發(fā)人員都需要對開發(fā)的產(chǎn)品大內(nèi)部結(jié)構(gòu)有所了解。在應(yīng)用廣泛的企業(yè)報表領(lǐng)域,開發(fā)在所難免,下圖展示了我在工作中開發(fā)的FineReport的內(nèi)核示意圖。

這款類似于Excel的報表軟件,成為設(shè)計器。在設(shè)計器中新建一個工作薄就是建了一個WorkBook,WorkBook相當(dāng)于一個容器,里面可以放任意個WorkSheet,就相當(dāng)于在設(shè)計器的一個工作薄中新建了多個sheet。每個WorkSheet是由任意個單元格CellElement組成,因此CellElement是一個模板的最小元素。獲得WorkBook后,必須取得其中的某個WorkSheet才能對這個報表中的CellElement進(jìn)行操作,這對于模板還是結(jié)果都是一樣的,如果以模板為例,最基本的內(nèi)核結(jié)構(gòu)就是如下面這張圖
由于每個部分各自包含了很多屬性,比如可以設(shè)置單元格的前景、背景、邊框、字體、字號等;又比如每個WorkSheet中可以添加,刪除單元格、可以設(shè)置每個sheet的頁面屬性、可以給每個sheet中添加圖表懸浮元素等;再比如可以對WorkBook進(jìn)行執(zhí)行獲得結(jié)果并導(dǎo)出成各種格式、可以進(jìn)行打印、添加工具欄等等。
正是基于這樣,再開發(fā)時會有豐富的API接口可供調(diào)用。以下是FineReport包含的所有開放的API。
由圖可有看出,對于這樣的開發(fā)可以從以下幾個功能點(diǎn)進(jìn)行開發(fā)。
報表數(shù)據(jù)源
設(shè)計器本身已經(jīng)提供了數(shù)據(jù)庫數(shù)據(jù)源、文本數(shù)據(jù)源、xml數(shù)據(jù)源等多種數(shù)據(jù)來源方式,同時還可以通過java程序自行生成數(shù)據(jù)來源,只需要實(shí)現(xiàn)TableData接口便可以了。
輸入輸出報表
在程序中新建一個報表對象同時也可以直接讀取一個cpt模板來生成,經(jīng)過處理的報表最終可以導(dǎo)出成多種形式,可以保存為程序網(wǎng)絡(luò)報表在web端直接訪問,也可以導(dǎo)出為excel、pdf、word、cpt等多種格式文件。
設(shè)置單元格屬性及報表屬性編輯
可以對報表對象的單元格屬性、web屬性、參數(shù)、頁面設(shè)置等多個屬性進(jìn)行控制,可以自由控制單元格的顯示樣式、工具欄的按鈕、參數(shù)面板的展示、參數(shù)的賦值等等。
自定義填報
開放的填報api接口能夠根據(jù)自己的需要來定義填報入庫方式,通過填報接口,可以往數(shù)據(jù)庫中保存用戶操作日志、在填報成功與失敗時進(jìn)行各種處理等等。
開發(fā)的工作雖枯燥也有意思,閑來無事時也會開發(fā)一些有趣的應(yīng)用,比如下圖把天氣集成到報表頁面。
