報表引擎API開發入門— EJB程式資料來源

來源:互聯網
上載者:User

標籤:

我們前面講了幾個資料來源,今天我們來講一下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程式資料來源

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.