標籤:
我們前面講了幾個資料來源,今天我們來講一下EJB資料來源,這篇講完我們資料來源這部分就講完了。資料連線不需要直接存取資料庫,而是使用EJB做為資料來源。FR通過定義程式資料集使用EJB的相關類擷取到EJB資料來源,然後轉為我們裡面的二維表作為報表資料來源使用,進行展示。例如如下擷取到ejb資料所做的模板。
一、 實現原理
FineReport報表的資料來源可以是任何類型的資料,因為FineReport是通過AbstractTableData抽象類別來讀取資料來源的,因此使用者只要實現了AbstractTableData抽象類別,也就可以用自訂類型的程式資料集,FineReport報表引擎就能夠讀取定義的資料來源作為報表資料來源使用。AbstractTableData抽象類別主要有5個方法,具體使用可參考報表引擎API開發入門—簡單程式資料集。EJB程式資料來源準備資料使用方法init(),擷取到ejb的javaBean,從而儲存資料到ArrayList中。
二、 實現步驟
2.1 定義程式資料來源
定義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包
2.2 編譯器資料來源
將編譯後的DataModelDemo.class放到項目的WEB-INF下面的classes目錄下,因為DataModelDemo.java屬於包com.fr.data,所以DataModelDemo.class需要放到classes\com\fr\data目錄下。
2.3 配置程式資料來源
建立報表,在報表資料集中建立程式資料來源,選擇我們定義好的程式資料集,如,名字可以自訂,如Pro。
2.4 使用程式資料來源
配置好程式資料來源後便可以使用定義的Pro程式資料集了,與其他類型的資料集使用方法是相同的,可以通過拖拽方法實現儲存格資料資料行繫結。如
儲存模板到ejb項目環境下,啟動Examples Server伺服器,預覽模板就可以成功訪問到模板了!
報表引擎API開發入門— EJB程式資料來源