1. 概述
1.1 應用場景
在實際應用中,可能需要根據表名動态地改變數據源,比如在程序數據集中,通過傳進的表名參數,到數據庫取出對應的表作爲數據源。
1.2 實現原理
FineReport 是通過 AbstractTableData 抽象類來讀取數據源的,所有的數據來源都繼承實現其抽象方法。因此用戶只要實現了 AbstractTableData 抽象類,就可以用自定義類型的數據源,FineReport 報表引擎就能夠讀取定義的數據源作爲報表數據源使用。
自定義 Java 代碼思路爲:
1) 定義數據表結構
2)實現 AbstractTableData 抽象類
3)将獲取到的數據放入到定義的表中
4)獲取數據庫連接
5)釋放一些資源,将上次查詢的結果釋放掉
2. 示例
示例将以 FRDemo 數據連接爲例,參數爲數據表名,不同的參數值,程序數據集将獲取到 FRDemo 中不同的表數據。
2.1 準備編譯環境
編譯程序前,需先創建一個 Java 工程環境,并且需要一個 Java 編輯器,如 Eclipse 或 idea 。
在編輯器工程中導入 FineReport 工程 JAR 包。包括安裝的報表工程
%FR_HOME%/lib下的所有的包,
%FR_HOME%/server/lib 下的所有包,
%FR_HOME%/webapps/webroot/WEB-INF/lib下的所有包,
還要引入 JDK 下的的 tools.jar。詳細操作可參考:編譯Java程序
2.2 編寫Java文件
在編譯器中編寫 Java 文件 ParamTableDataDemo.java, 完整代碼可參見:
注:若 java 文件包位置不同,需要手動引入 AbstractTableData,即代碼中加入 import com.fr.data.AbstractTableData;
2.3 編譯Java文件
Java 文件編寫完成後,在編譯器中編譯 ParamTableDataDemo.java ,編譯通過後,将會在對應工程下生成ParamTableDataDemo.class 類文件。
2.4 導入class文件
将編譯後生成的 ParamTableDataDemo.class 類文件複制到 %FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\data 工程目錄下。如下圖所示:
點擊下載 class 文件:ParamTableDataDemo.rar
2.5 配置程序數據集
1)新建普通報表,數據集管理面板新建程序數據集,選擇我們已經定義好的 class 文件,如下圖所示:
2)添加默認參數,參數名爲tableName,如下圖所示:
2.6 使用程序數據集
1)選中新建的程序數據集,點擊預覽按鈕,輸入參數值,如下圖所示:
2)查詢出的銷量表如下圖所示,将字段拖入報表中即可用作報表數據。
注:如果預覽不出數據,請确認代碼段裏面定義數據庫連接時 URL 的地址是否正确,如下圖所示: