当 低代码平台遇上自定义函数扩展,如何轻松搞定复杂业务计算!
在低代码平台中,函数公式是很多地方都需要用到的,它是打通业务逻辑和实现数据自动化的“任督二脉”。但是一些场景中,平台自带的函数无法满足你独特的业务计算需求,一个复杂的校验规则或数据转换逻辑你可能需要自己去写编码实现,或者找厂商定制。
然而在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,涉及到参数使用其他节点值时取消类型校验。

添加函数后,在“运维设置”中,开发配置,点击“更新”,重新加载缓存即可在使用函数公式地方看到新加的函数。(此刷新缓存功能仅在2.1.8最新版本中加入)

函数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;
};

查看18道真题和解析