反饋已提交

網絡繁忙

從資料庫讀取報表

1. 概述

1.1 應用場景

注:閱讀本文時,請先閱讀 儲存範本至資料庫 。

儲存範本至資料庫 中,可以將 cpt 範本儲存入庫,例如範例中將 GettingStartedTW.cpt 存在資料庫表 report 中,那儲存在資料庫中的範本要如何存取呢?

1641364607njnb.png

儲存在資料庫中的範本不再透過存為範本點選預覽存取,而是自訂 Java 類將其轉換為網路報表,在 Web 瀏覽器中進行存取。如透過本文範例的方法轉換後,在瀏覽器中輸入:

http://localhost:8075/webroot/decision/view/report?viewlet=com.fr.demo.ReadFromDatabase&cptname=GettingStartedTW.cpt

就可以直接在瀏覽器端存取範本。

1.2 實現原理

通程式式從資料庫讀取報表後將其轉換成程式網路報表。

2. 範例

以下範例將從資料庫中讀取 儲存範本至資料庫 中儲存的 GettingStartedTW.cpt 範本,然後將其轉換成程式網路報表。

2.1 準備編譯環境

編譯程式前,需先建立一個 Java 工程環境,並且需要一個 Java 編輯器,如 Eclipse 或 idea 。

在編輯器工程中匯入 FineReport 工程 JAR 包。包括使用者自己報表工程

%FR_HOME%/lib下的所有的包,

%FR_HOME%/server/lib 下的所有包,

%FR_HOME%/webapps/webroot/WEB-INF/lib下的所有包;

程式碼中會將範本資訊入庫,還需要匯入對應的 JDBC 驅動,

還要引入 JDK 下的 tools.jar。詳細操作可參考:編譯Java程式 

2.2 定義程式網路報表

2.2.1 編寫 Java 程式

在編輯器中編寫 Java 程式 ReadFromDatabase.Java,繼承 com.fr.web.Reportlet 抽象類,並實現 public Report createReport(ReportletRequest reportletRequest) 方法。讀取資料庫中儲存的 GettingStartedTW.cpt 範本後將其轉換成程式網路報表。完整程式碼可參見:

cpt 範本程式碼:

https://code.fanruan.com/demo/example/src/branch/release/10.0/src/main/java/com/fr/demo/ReadFromDatabase.java

frm 範本程式碼:

注:ReadfrmFromDatabase.java 檔案不支援設定了參數元件聯動的範本,範本預覽時,點選元件查詢不能正常預覽。

package com.fr.plugin.wysiwyg.theme;

import com.fr.data.core.db.DBUtils;
import com.fr.form.main.DashboardTemplate;
import com.fr.form.main.Form;
import com.fr.log.FineLoggerFactory;
import com.fr.web.session.SessionLocalManager;
import com.fr.web.weblet.DBFormlet;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
public class NewReadFrmFromDatabase extends DBFormlet {

    @Override
    protected DashboardTemplate createDashboard(HttpServletRequest req) throws Exception {
        String name = req.getParameter("reportname");
        return createForm(name);
    }

    @Override
    public Form createForm(String reportName) {
        Form form = new Form();
        Connection connection = null;
        try {
            connection = getConnection();
            // 從資料庫中讀範本
            String sql = "select frm from report where frmname = '" + reportName
                    + "'";
            Statement smt = connection.createStatement();
            ResultSet rs = smt.executeQuery(sql);
            while (rs.next()) {
                Blob blob = rs.getBlob(1);
                FineLoggerFactory.getLogger().info(blob.toString());
                InputStream ins = blob.getBinaryStream();
                form.readStream(ins);
                return form;
            }
        } catch (Exception e) {
            throw SessionLocalManager.createLogPackedException(e);
        }finally {
            DBUtils.closeConnection(connection);
        }
        return form;
    }
    private static Connection getConnection() throws ClassNotFoundException, SQLException {
        // 定義資料連結(根據你實際資料庫資訊進行修改)
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String pass = "123456";
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, user, pass);
        return conn;
    }
    @Override
    public void setParameterMap(Map<String, Object> arg0) {
        // TODO Auto-generated method stub
    }


}

2.2.2 編譯 Java 檔案

Java 程式編寫完成後,在編譯器中編譯 ReadFromDatabase.java ,編譯透過後,將會在編譯器對應工程檔案儲存路徑下生成 ReadFromDatabase.class 類檔案。如下圖所示:

1641365064jyjW.png

2.3 發佈並在 Web 端預覽 

將編譯後的 ReadFromDatabase.class 放到報表工程 %FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\demo目錄下。如下圖所示:

16413652482q5W.png

啟動伺服器,在瀏覽器中輸入存取報表工程檔案的路徑,如使用本地設計器工程,啟動後在瀏覽器端輸入

注:URL 路徑中 cptname 將傳遞範本名稱到類檔案,必須和類檔案中的參數名稱一致。

http://localhost:8075/webroot/decision/view/report?viewlet=com.fr.demo.NewDateDemo便可以預覽報表。如下圖所示:

73751cb4-2022-4b38-ac38-1423be802884.png

決策報表瀏覽器端入

http://localhost:8075/webroot/decision/view/form?viewlet=com.fr.demo.ReadfrmFromDatabase&reportname=Form5.frm即可看到到報表預覽效果。如下圖所示:

1571019831482257.png


附件列表


主題: 二次開發
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙