表格製作軟體FineReport中如何將當前頁資料入庫?

下面通過表格製作軟體FineReport來簡單介紹一下。

工具/原料

表格製作軟體FineReport7.1.1

大小:148.2M 適用平臺:windows/linux

方法/步驟

模板多張頁面,如一系列的帳簿的模板。每次只打印部分頁面(可能是一張,可能是多張,不一定從第一頁開始),每次列印後希望觸發事件,在資料庫中對應位置記錄本頁面對應的帳簿已經列印過了。每張頁面在固定位置有本張帳簿的編號,對應到資料庫中有一個記錄是否已經列印的記錄欄位,如只打印第三頁時,希望在資料庫中編號3457的帳簿所對應的toprint欄位值改為true。如下圖效果:

表格製作軟體FineReport中如何將當前頁資料入庫

表格製作軟體FineReport中如何將當前頁資料入庫

實現思路

FineReport6.5中,可通過報表>報表Web屬性>分頁預覽設定>新增列印後事件,使用JavaScript呼叫一個jsp的執行事件。若點選列印,就會將當前頁的編號獲取到,進而通過update語句修改toprint欄位的值。

示例

以已部署過FineReport的WebReport工程到tomcat伺服器為例,其詳細過程如下:

對模板新增列印後事件

開啟設計器,開啟其tomcat報表工作目錄,在選單中點選報表>報表Web屬性>分頁預覽設定,在右邊欄中,如點選新增Flash列印後事件。

在其JavaScript中,輸入js程式碼,目的是呼叫其WebReport工程下寫的一個jsp的執行入庫操作。

獲取所在頁單元格的值

如編號ID在J3單元格,即第三行、第十列,則js方法如下:

var a = $("#r-2-0","div.reportPane").children().eq(9)[0].innerHTML;

註釋:$("#r-2-0","div.reportPane") 這個是獲取模板當前頁第三行,第一行為:"#r-0-0",行號從0開始;

註釋:eq(9)[0] 是獲取第9列,第一列為eq(0)[0],列號從0開始。

注:如果是擴充套件單元格,則要根據擴充套件以後所在的行與列來獲取。

通過Ajax把值傳到jsp頁面

完整程式碼如下:

var a = $("#r-2-0","div.reportPane").children().eq(9)[0].innerHTML;

$.ajax({

url : ';+a

})

定義jsp獲取編號修改資料庫表

定義頁面print1.jsp,首先獲取編號ID的值,連線資料庫通過update語句把表中toprint欄位進行修改,程式碼如下:

package com.fr.io;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import com.fr.base.FRContext;

import com.fr.base.dav.Env;

public class SaveReportToDatabase {

public static void main(String[] args) {

SaveReport();

}

private static void SaveReport() {

try {

// 連線資料庫

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@192.168.100.169:1521:orcl10g";

String user = "temp";

String pass = "temp123";

Class.forName(driver);

Connection conn = DriverManager.getConnection(url, user, pass);

PreparedStatement presmt = conn

.prepareStatement("insert into report values(?,?)");

// 讀進需要儲存入庫的模板檔案

Env oldEnv = FRContext.getCurrentEnv();

String envPath = oldEnv.getPath();

File cptfile = new File(envPath

+ "\\reportlets\\gettingstarted.cpt");

int lens = (int) cptfile.length();

InputStream ins = new FileInputStream(cptfile);

// 將模板儲存入庫

presmt.setString(1, "gettingstarted.cpt"); // 第一個欄位存放模板相對路徑

presmt.setBinaryStream(2, ins, lens); // 第二個欄位存放模板檔案的二進位制流

presmt.execute();

conn.commit();

presmt.close();

conn.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

將其print1.jsp檔案放到tomcat伺服器的WebReport工程下。

效果預覽

啟動Web伺服器,預覽報表,點選Flash列印,列印完之後檢視資料庫的記錄資訊表print1,可看到當前頁的編號對應的toprint欄位值變成true了。

相關問題答案