反饋已提交
網絡繁忙
注:閱讀本文時,請先閱讀 儲存範本至資料庫 。
儲存範本至資料庫 中,可以將 cpt 範本儲存入庫,例如範例中將 GettingStartedTW.cpt 存在資料庫表 report 中,那儲存在資料庫中的範本要如何存取呢?
儲存在資料庫中的範本不再透過存為範本點選預覽存取,而是自訂 Java 類將其轉換為網路報表,在 Web 瀏覽器中進行存取。如透過本文範例的方法轉換後,在瀏覽器中輸入:
http://localhost:8075/webroot/decision/view/report?viewlet=com.fr.demo.ReadFromDatabase&cptname=GettingStartedTW.cpt
就可以直接在瀏覽器端存取範本。
通程式式從資料庫讀取報表後將其轉換成程式網路報表。
以下範例將從資料庫中讀取 儲存範本至資料庫 中儲存的 GettingStartedTW.cpt 範本,然後將其轉換成程式網路報表。
編譯程式前,需先建立一個 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程式
在編輯器中編寫 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 }}
Java 程式編寫完成後,在編譯器中編譯 ReadFromDatabase.java ,編譯透過後,將會在編譯器對應工程檔案儲存路徑下生成 ReadFromDatabase.class 類檔案。如下圖所示:
將編譯後的 ReadFromDatabase.class 放到報表工程 %FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\demo目錄下。如下圖所示:
啟動伺服器,在瀏覽器中輸入存取報表工程檔案的路徑,如使用本地設計器工程,啟動後在瀏覽器端輸入
注:URL 路徑中 cptname 將傳遞範本名稱到類檔案,必須和類檔案中的參數名稱一致。
http://localhost:8075/webroot/decision/view/report?viewlet=com.fr.demo.NewDateDemo便可以預覽報表。如下圖所示:
決策報表瀏覽器端入
http://localhost:8075/webroot/decision/view/form?viewlet=com.fr.demo.ReadfrmFromDatabase&reportname=Form5.frm即可看到到報表預覽效果。如下圖所示:
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙