1. 描述
場景描述:FineReport 已經提供了大量的自帶函數,在正常情況下足夠滿足用戶的報表制作需求,但是在一些特殊領域,可能需要一些特殊的函數,在這種情況下,FineReport 提供了自定義函數機制,可以由用戶根據業務需要自己來定義一些函數。
FineReport 函數定義規則:Functionname(Para,Para,...),其中 Functionname 爲函數名,Para 爲參數。
2.思路
在 FineReport 中,每一個函數都被定義成一個類,這個類必須要實現 Function 這個接口,在運算的時候首先通過函數名反射取得這個類,然後調用它的 run(Object[] agrs) 方法。
3. 操作步驟
3.1 編寫函數代碼
對於複雜函數,可以在 Java 開發工具(IDEA,Eclipse 等)中測試通過後,形成完整 Java 代碼
3.2 編譯自定義函數
(1)通過 Java 開發工具(IDEA,Eclipse 等)編譯成 class 文件,此處不做編譯贅述
打開 Eclipse,新建工程:
右鍵工程>屬性,添加 FineReport 的 JAR,具體請參考 編譯Java程序
在 src 目錄下新建 class 文件:
命名爲 GETIP:
将下方代碼複制進去,根據提示一步步加載引用直至不報錯
package com.fr.function;
import com.fr.script.AbstractFunction;
import java.net.InetAddress;
public class GETIP extends AbstractFunction {
@Override
public Object run(Object[] objects) {
try {
InetAddress ia = InetAddress.getLocalHost();
return ia.getHostAddress();
} catch (Exception e) {
return e.getMessage();
}
}
public static InetAddress getInetAddress() {
return null;
}
}
不會報錯的截圖如下:
保存 Java 文件後,工作目錄%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\function文件夾中會有對應的 class 文件,即編譯成功。
(2)通過設計器進行編譯(此方式要求本地 cmd 下 javac 編譯正常不會報錯)
選擇菜單服務器>函數管理器,新增一個自定義函數名 StringCat,點擊編輯,輸入代碼:
代碼詳見:
确認無誤後,點擊編譯,提示編譯成功表示編譯已成功,然後點擊保存。
%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\function目錄下便會生成 StringCat.class 文件
3.4 使用自定義函數
注冊好自定義函數後,制作報表時可直接使用了,使用方法與内置的函數是相同的。
具體可參考 自定義函數