自訂函式簡介

1. 概述

1.1 應用場景

FineBI 已經提供了大量的自帶函式,在正常情況下足夠滿足使用者的範本製作需求,但是在一些特殊領域,可能需要一些特殊的函式,在這種情況下,FineBI 提供了自訂函式,可以由使用者根據業務需要自己來定義一些函式,但這些函式必須滿足 FineBI 函式定義規則。  

注:僅支援抽取資料。

1.2 使用範圍

1.3 定義規則

FineBI函式定義規則:Functionname(Para,Para,...),其中Functionname 為函式名,Para 為參數。

在 FineBI 中,每一個函式都被定義成一個類,這個類必須要實現 Function 這個API,在運算的時候首先透過函式名反射取得這個類,然後呼叫它的 run(Object[] agrs) 方法。

以 SUM 函式為例。SUM 類用來運算 SUM 函式,繼承了 AbstractFunction 類,而 AbstractFunction 實現了 Function 這個API。

當函式運算的時候,先根據函式名取得運算該函式的類,如 SUM(2,4,true) 這個函式先根據函式名取得SUM這個類,然後呼叫 SUM 類的 run(Object[] args) 方法,args 中存放的是SUM函式的參數,運算的時候可以從 args 中取得參數進行運算。如執行結果為SUM(2,4,true)=2 4 1=7

SUM函式所使用代碼:

package com.fr.report.script;
import com.fr.general.FArray;
import com.fr.script.AbstractFunction;
public class CSUM extends AbstractFunction {
public Object run(Object[] args) {
double result = 0;
for (int i = 0; i < args.length; i  ) {
if (args[i] == null) {
continue;
}
result  = parseObject(args[i]);
}
return result;
}
private double parseObject(Object obj) {
if (obj instanceof Number) {
return ((Number) obj).doubleValue();
else if (obj instanceof Boolean) {
return ((Boolean) obj).booleanValue() ? 1 : 0;
else if (obj instanceof FArray) {
FArray array = (FArray) obj;
double sum = 0;
for (int i = 0; i < array.length(); i  ) {
sum  = parseObject(array.elementAt(i));
}
return sum;
else if (obj != null) {
try {
return Double.parseDouble(obj.toString());
catch (NumberFormatException exp) {
return 0;
}
}
return 0;
}
}
显示代码

1.4 編譯環境準備

詳情參見:編譯Java過程

2. 範例

以一個簡單的自訂函式例子來說明使用自訂函式。

定義一個函式 StringCat ,作用是把所有的參數以字串的形式連結起來。

詳情參見:自訂函式實現字串連接

3. 注意事項

1)自訂函式名以 class 檔案名稱為準。

2)自訂函式檔案名稱僅支援英文,包括純大寫、純小寫、大小寫混合輸入。

3)新增的函式在「其他函式」中展示。

4)當前不支援大小寫混合輸入。


附件列表


主题: 進階學習
已经是第一篇
已经是最后一篇
  • 有帮助
  • 没帮助
  • 只是浏览
中文(繁體)

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

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

不再提示

9s后關閉

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

反馈已提交

网络繁忙