在低代碼平台中,函數公式是很多地方都需要用到的,它是打通業務邏輯和實現數據自動化的“任督二脈”。但是一些場景中,平台自帶的函數無法滿足你獨特的業務計算需求,一個複雜的校驗規則或數據轉換邏輯你可能需要自己去寫編碼實現,或者找廠商定製。
然而在JVS的低代碼、服務編排以及規則引擎中,有一個“自定義函數擴展”的能力。函數主要解決輸入一個數據,然後輸出對應的數據,這個數據映射的過程,我們通過函數去實現: y=f(x),例如,在表單中,一個字段的結果通過另外的字段的輸入獲取:
如上圖所示,預計金額=單價*數量,那麼這裏 預算金額的結果就默認設置為一個函數取值,這個取值的方式通過函數公式進行加工獲取,在JVS中會在很多地方用到函數公式,當公式不滿足時需要我們自己擴展,本文介紹如何自行針對業務進行擴展函數公式。
首先咱們平台中函數公式主要使用了groovy動態語言,所以需要先了解下相關的語法。由於groovy特性,所以函數體中也可以調用JAVA工具類進行處理,這樣的話可擴展性會進一步提升。
所有的函數都會保存在數據庫中,保存的數據庫和數據表默認為庫:【jvs-design】,表:【jvs_function_base】。
name:函數名稱,注意函數名與函數體中的函數名要一致
type:分類,關係到顯示在哪個函數分組中
info:函數內容描述,會顯示在右側描述中,可使用html標籤進行樣式調整
param_count:參數數量,需要與函數體中函數參數個數保持一致
dynamic_param:是否動態參數:0代表不為動態參數,並且param_count不為[0];1代表為動態參數,並且param_count為[0]。
示例1(非動態參數):函數參數為2,那麼這裏param_count就填寫[2],dynamic_param值為0。
示例2(動態參數,並且函數固定參數):函數固定參數為0,那麼這裏param_count填寫[0],dynamic_param值為1。
enable_cache:是否使用緩存,固定為1。
jvs_param_type:參數類型,建議根據參數個數都使用any,涉及到參數使用其他節點值時取消類型校驗。
添加函數後,在“運維設置”中,開發配置,點擊“更新”,重新加載緩存即可在使用函數公式地方看到新加的函數。
函數body擴展:
自定義函數可以使用groovy原生語法,也可以使用動態加載導入工具類,工具類中可以自由定義函數算法。
例如1:
def LEFT(x,y){return x.take(y)}
此方法使用了groovy語法。
例如2:
import cn.hutool.core.util.ObjectUtil;def EQ(x,y){ return ObjectUtil.equals(x,y)};
此方法使用了hutool工具類。
以此類推,自己在源碼中寫的工具類也可在此處引入然後調用。
示例:新增動態參數的一個函數:
param_count:[0]
dynamic_param:1
import cn.hutool.core.util.NumberUtil;
def ADD(... x) {
Number sum = 0;
for (int i = 0; i < x.size(); i++) {
if (x[i] instanceof String) {
x[i] = NumberUtil.parseNumber(x[i])
};
sum = NumberUtil.add((Number) x[i], (Number) sum);
};
return sum;
};
在線demo:https://app.bctools.cn
基礎框架開源地址:https://gitee.com/software-minister/jvs