當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

自定義函數開發過程

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,新建工程:

222
222

右鍵工程>屬性,添加 FineReport 的 JAR,具體請參考 編譯Java程序

在 src 目錄下新建 class 文件:

222

命名爲 GETIP:

222

将下方代碼複制進去,根據提示一步步加載引用直至不報錯


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;
    }
}
顯示代碼

不會報錯的截圖如下:

222

保存 Java 文件後,工作目錄%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\function文件夾中會有對應的 class 文件,即編譯成功

(2)通過設計器進行編譯(此方式要求本地 cmd 下 javac 編譯正常不會報錯)
選擇菜單服務器>函數管理器,新增一個自定義函數名 StringCat,點擊編輯,輸入代碼:

222

代碼詳見:

https://code.fanruan.com/demo/example/src/branch/persist/10.0/src/main/java/com/fr/function/StringCat.java

确認無誤後,點擊編譯,提示編譯成功表示編譯已成功,然後點擊保存

%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\function目錄下便會生成 StringCat.class 文件  


3.4 使用自定義函數

注冊好自定義函數後,制作報表時可直接使用了,使用方法與内置的函數是相同的。

具體可參考 自定義函數


附件列表


主題: 原簡體文檔
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

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

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

不再提示

7s后關閉

反饋已提交

網絡繁忙