在通過定義程式資料集時,首先使用EJB的相關類獲取到EJB資料來源,然後轉為我們裡面的二維表作為報表資料來源使用。
下面就通過報表開發工具FineReport來使用來進行介紹。
工具/原料
報表開發工具FineReport 8.0
方法/步驟
實現原理
報表的資料來源可以是任何型別的資料,因為是通過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。
使用程式資料來源
配置好程式資料來源後便可以使用定義的Pro程式資料集了,與其他型別的資料集使用方法是相同的,可以通過拖拽方法實現單元格資料列繫結。如下圖
儲存模板到ejb專案環境下,啟動Examples Server伺服器,預覽模板就可以成功訪問到模板了!