報表系統FineReport的使用:EJB程式資料來源?

資料連線不需要直接訪問資料庫,而是使用EJB做為資料來源。FR通過定義程式資料集使用EJB的相關類獲取到EJB資料來源,然後轉為我們裡面的二維表作為報表資料來源使用,進行展示。

下面就通過報表系統FineReport來進行介紹。

工具/原料

報表系統FineReport 8.0

方法/步驟

實現原理

FineReport報表的資料來源可以是任何型別的資料,因為FineReport是通過AbstractTableData抽象類來讀取資料來源的,因此使用者只要實現了AbstractTableData抽象類,也就可以用自定義型別的程式資料集,FineReport報表引擎就能夠讀取定義的資料來源作為報表資料來源使用。AbstractTableData抽象類主要有5個方法,具體使用可參考簡單程式資料集實現原理文件。EJB程式資料來源準備資料使用方法init(),獲取到ejb的javaBean,從而儲存資料到ArrayList中。

定義程式資料來源

定義DataModelDemo這個類程式碼如下:

package com.fr.data;import javax.naming.*;import javax.ejb.*;import java.rmi.*;import java.util.*;import com.fr.data.AbstractTableData;import examples.ejb.ejb20.basic.beanManaged.*;public class DataModelDemo extends AbstractTableData { private String[] columnNames; private ArrayList valueList = null; public DataModelDemo() { String[] columnNames = { "Name", "Score" }; this.columnNames = columnNames; } // 實現其他四個方法 public int getColumnCount() { return columnNames.length; } public String getColumnName(int columnIndex) { return columnNames[columnIndex]; } public int getRowCount() { init(); return valueList.size(); } public Object getValueAt(int rowIndex, int columnIndex) { init(); return ((Object[]) valueList.get(rowIndex))[columnIndex]; } // 準備資料 public void init() { // 確保只被執行一次 if (valueList != null) { return; } // 儲存得到的結果集 valueList = new ArrayList(); Context ctx = null; Account ac = null; AccountHome home = null; try { // Contact the AccountBean container (the "AccountHome") through // JNDI. ctx = new InitialContext(); home = (AccountHome) ctx .lookup("java:/comp/env/BeanManagedAccountEJB"); double balanceGreaterThan = 100; Collection col = home.findBigAccounts(balanceGreaterThan); if (col != null) { // 用物件儲存資料 Object[] objArray = null; Iterator iter = col.iterator(); while (iter.hasNext()) { Account bigAccount = (Account) iter.next(); objArray = new Object[2]; objArray[0] = bigAccount.getPrimaryKey(); objArray[1] = new Double(bigAccount.balance()); // 在valueList中加入這一行資料 valueList.add(objArray); } } } catch (Exception ex) { ex.printStackTrace(); } }}

注:使用之前需要先匯入ejb的jar包

另:最新的程式碼連結。

編譯程式資料來源

將編譯後的DataModelDemo.class放到專案的WEB-INF下面的classes目錄下,因為DataModelDemo.java屬於包com.fr.data,所以DataModelDemo.class需要放到classes\com\fr\data目錄下。

配置程式資料來源

新建報表,在報表資料集中新建程式資料來源,選擇我們定義好的程式資料集,如下圖,名字可以自定義,如Pro。

報表系統FineReport的使用:EJB程式資料來源

使用程式資料來源

配置好程式資料來源後便可以使用定義的Pro程式資料集了,與其他型別的資料集使用方法是相同的,可以通過拖拽方法實現單元格資料列繫結。如下圖

報表系統FineReport的使用:EJB程式資料來源

儲存模板到ejb專案環境下,啟動Examples Server伺服器,預覽模板就可以成功訪問到模板了!

系統, 資料, 程式, 報表, 資料來源,
相關問題答案