当 低代码平台遇上自定义函数扩展,如何轻松搞定复杂业务计算!

在低代码平台中,函数公式是很多地方都需要用到的,它是打通业务逻辑和实现数据自动化的“任督二脉”。但是一些场景中,平台自带的函数无法满足你独特的业务计算需求,一个复杂的校验规则或数据转换逻辑你可能需要自己去写编码实现,或者找厂商定制。

然而在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;

};

全部评论

相关推荐

点赞 评论 收藏
分享
昨天 04:10
门头沟学院 Java
一、八股拷打1.&nbsp;ArrayList&nbsp;内部实现方式及扩容机制2.&nbsp;BIO、NIO、AIO&nbsp;三种&nbsp;IO&nbsp;的区别,NIO&nbsp;底层所用机制3.&nbsp;线程池常用参数,拒绝策略4.&nbsp;AQS&nbsp;是什么以及其实现方式5.&nbsp;为什么需要双亲委派机制,双亲委派机制如何保证用户写的类不污染核心类6.&nbsp;Spring&nbsp;容器的原理及作用7.&nbsp;Spring&nbsp;中容器与&nbsp;AOP&nbsp;的连接方式,AOP&nbsp;实现是否只有动态代理一种机制,是否有其他机制8.&nbsp;MyBatis&nbsp;的&nbsp;XML&nbsp;文件中有哪几种标签9.&nbsp;当参数传列表要生成&nbsp;where&nbsp;ID&nbsp;in(ID1,ID2,…)这样的&nbsp;SQL&nbsp;语句时,如何去掉最后一个逗号10.&nbsp;MySQL&nbsp;中索引存储形式,是否了解联合索引,结合&nbsp;B&nbsp;+&nbsp;树结构,为什么联合索引要遵循最左前缀匹配原则11.&nbsp;MySQL&nbsp;中&nbsp;InnoDB&nbsp;存储引擎的事务实现方式12.&nbsp;Redis数据结构,持久化策略,缓存淘汰策略13.&nbsp;在&nbsp;Redis&nbsp;中对一个数据进行删除时的过程,是否会立马删除二、项目相关1.&nbsp;项目的目标、功能、用户群体及核心业务流程2.&nbsp;该项目中私聊功能的实现方式3.&nbsp;当项目服务器有多台时,如何处理私聊功能以避免消息乱序等问题结合具体场景消息传递流程4.&nbsp;该项目中双&nbsp;Token&nbsp;机制实现无感刷新的方式5.&nbsp;该项目中使用&nbsp;Elasticsearch(ES)的目的6.&nbsp;ES&nbsp;为什么有很强的搜索能力,什么是倒排索引,ES&nbsp;的倒排索引与&nbsp;MySQL&nbsp;的&nbsp;B&nbsp;+&nbsp;树索引的区别三、手撕1.&nbsp;反转链表,秒了2.&nbsp;要求编写一个表示停车场的&nbsp;Java&nbsp;类,需运用面向对象思想,包含入库、出库方法,可自由发挥添加其他方法,且需考虑生产者和消费者模式(停车场共&nbsp;100&nbsp;个车位,停满时需等有车出库才能再入库,无车时无法出库)
查看20道真题和解析
点赞 评论 收藏
分享
10-27 09:37
已编辑
门头沟学院 产品经理
查看5道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务