计算公式可以实现复杂的数据加工处理,例如拼接或截取文字、计算日期,根据不同的逻辑条件做不同的处理。
计算公式底层使用 Aviator 脚本语言实现,因此您可以编写任何符合 Aviator 语法的代码来实现业务需求。在开始使用前我们强烈建议您阅读 Aviator 文档,尤其是 函数库列表 章节,高阶使用还会涉及 if 条件、for 循环 等。
RB 中有多个功能涉及计算公式的使用,包括 字段更新、数据校验 等,它们的编写方式一致,但请注意不同功能对于公式返回值的要求。
计算公式要求您具备一定的编程基础,否则可能无法顺利进行
在计算公式中,您可以使用字段变量,字段变量通过 {}
包裹,在公式执行时系统会将其替换为实际的字段值。例如下面的公式用于计算订单的到期时间。
## 获取订单日期,并调用 DATEADD 函数加 1 年后返回
let kssj = {orderDate};
return DATEADD(kssj, 1, 'Y');
为保持最大兼容性,系统对字段变量值进行了一些处理。在编写公式前请务必阅读以下说明:
0
,对于非数字字段将处理为空字符串 ''
。因此对于字段值的空值判断应为 if {ziduan} == ''
或 if {ziduan} == 0
,而非 if {ziduan} == nil
。我们推荐您使用 ISNULL 函数判断空值较为方便ID
(20 位 Hash 字符串),如需获取文本可使用 TEXT 函数进行转换。,
分隔,如 AAA, BBB
)ID
字符串(,
分隔),否则输出为文本(,
分隔)在以下函数语法中,$XXXX
表示参数(可以是字段变量或是具体值),如果使用 []
包裹则表示该参数为可选。同时注意函数名区分大小写、字段请使用 {}
包裹、字符(串)使用引号包裹、数字无需包裹。
您可以将函数结果随意更新到一个文本字段,以便观察执行效果
TEXT($ID, [$DEFAULT])
$ID
表示 ID,可以是 ID 字段,也可以是具体的 ID 值,例如 837-018c2f7fa58e03f8
$DEFAULT
当无法找到文本时使用的默认值(可选)TEXT({id})
TEXT({id}, '没有值')
ID($TEXT, $ENTITY)
$TEXT
表示文本,可以是文本字段,也可以是具体的文本值,例如 锐昉科技
$ENTITY
实体内部标识,表示在哪个实体中查找ID({no}, 'SalesOrder')
ISNULL($VALUE)
$VALUE
要判断的值,可以是字段,也可以是具体的值ISNULL({ziduan1})
ISNULL(0)
CURRENTUSER()
CURRENTUSER()
CURRENTBIZUNIT()
CURRENTBIZUNIT()
CURRENTDATE()
CURRENTDATE()
CHINESEYUAN($NUMBER)
$NUMBER
数字,可以是数字字段,也可以是具体的数字值,例如 9800
CHINESEYUAN({jine})
CHINESEYUAN(123)
HANLPPINY($STR, [$FIRST_CHAR])
$STR
中文字符,可以是字段或具体值,例如 锐昉科技
$FIRST_CHAR
指定为 true
表示返回首字母,否则为全拼HANLPPINY({kehuName})
HANLPPINY('锐昉科技')
CONCATID($ID1, $ID2, [$ID3, $ID4, $ID5])
$ID1
ID 字段,可以是引用/多引用字段,也可以是具体的 ID 值,例如 999-0000000000000001
$ID2
$ID3
$ID4
$ID5
同上CONCATID({kehu1}, {kehu2})
CONCATARRAY($OBJ1, $OBJ2, [$OBJ3, $OBJ4, $OBJ5])
$OBJ1
任意字段或具体值$OBJ2
$OBJ3
$OBJ4
$OBJ5
同上CONCATARRAY({img1}, {file2})
SQLQUERY($SQL, [$PARAM1, PARAM2, PARAM3, PARAM4, PARAM5])
$SQL
SQL 语句。请注意此语句并非标准 SQL 语句$PARAM1
$PARAM2
$PARAM3
$PARAM4
PARAM5
查询参数SQLQUERY("select fieldName from EntityName where fieldName2 = 'value' and fieldName3 = ?", {fieldName4})
fieldName from EntityName where fieldName2 = 'value'
其中 select
关键词不是必须的fieldName1, fieldName2 from EntityName where fieldName2 = 'value'
注意 fieldName2
不会返回,因为仅支持查询一个字段,如需多个请分多次查询fieldName1 from EntityName where fieldName2 = 'value' order by fieldName2 desc
通过 order by
指定排序规则seq fieldName1, fieldName2 from EntityName where fieldName2 = 'value'
通过 seq
关键词可以查询多条记录的值,会返回一个 seq 集合LOCATIONDISTANCE($LOC1, $LOC2)
$LOC1
表示起始坐标,可以是位置字段,也可以是具体的坐标值,例如 123.1234567,321.12345678
$LOC2
表示结束坐标,可以是位置字段,也可以是具体的坐标值,例如 123.1234567,321.12345678
LOCATIONDISTANCE({qiyundi}, {mudidi})
LOCATIONDISTANCE({qiyundi}, {mudidi}) / 1000
REQUEST($URL, [$DEFAULT])
$URL
有效的请求地址,系统将从该地址获取结果$DEFAULT
当无法获取结果时使用的默认值(可选)REQUEST('http://xx/api/x?id=' + {id}, '')
此外,RB 还内置了一个字符处理工具集 StringUtils
用于常用文字处理,例如将字母转换为全大写 StringUtils. upperCase($TEXT)
,关于此工具集所提供的方法请 参见文档。
{ziduan1} + "和" + {ziduan2}
DATEDIFF({date1}, {date2}, "H")
DATEDIFF({date}, CURRENTDATE())
更多示例参考 REBUILD 高级计算公式实战