计算公式

计算公式可以实现复杂的数据加工处理,例如拼接或截取文字、计算日期,根据不同的逻辑条件做不同的处理。

计算公式底层使用 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(字段)值为文本。其中 ID 可以是 引用多引用(V3.6)、下拉列表分类 字段(值)
  • 语法:TEXT($ID, [$DEFAULT])
    • $ID 表示 ID,可以是 ID 字段,也可以是具体的 ID 值,例如 837-018c2f7fa58e03f8
    • $DEFAULT 当无法找到文本时使用的默认值(可选)
  • 示例:TEXT({id}) TEXT({id}, '没有值')
ID
  • 作用:转换文本(字段)值为 ID。其中文本可以是业务实体的 自动编号名称字段(值),如匹配到多个仅返回第一个
  • 语法:ID($TEXT, $ENTITY)
    • $TEXT 表示文本,可以是文本字段,也可以是具体的文本值,例如 锐昉科技
    • $ENTITY 实体内部标识,表示在哪个实体中查找
  • 示例:ID({no}, 'SalesOrder')
ISNULL ~~v3.5
  • 作用:判断是否为空值(适用所有类型的字段)
  • 语法:ISNULL($VALUE)
    • $VALUE 要判断的值,可以是字段,也可以是具体的值
  • 示例:ISNULL({ziduan1}) ISNULL(0)
CURRENTUSER
  • 作用:获取当前登录用户(ID)
  • 语法:CURRENTUSER()
  • 示例:CURRENTUSER()
CURRENTBIZUNIT
  • 作用:获取当前登录用户的所在部门(ID)
  • 语法:CURRENTBIZUNIT()
  • 示例:CURRENTBIZUNIT()
CURRENTDATE
  • 作用:获取当前日期(时间)
  • 语法:CURRENTDATE()
  • 示例:CURRENTDATE()
CHINESEYUAN
  • 作用:转换数字(字段)为人民币大写
  • 语法:CHINESEYUAN($NUMBER)
    • $NUMBER 数字,可以是数字字段,也可以是具体的数字值,例如 9800
  • 示例:CHINESEYUAN({jine}) CHINESEYUAN(123)
HANLPPINY ~~v3.9
  • 作用:转换中文为拼音(全拼或首字母)
  • 语法:HANLPPINY($STR, [$FIRST_CHAR])
    • $STR 中文字符,可以是字段或具体值,例如 锐昉科技
    • $FIRST_CHAR 指定为 true 表示返回首字母,否则为全拼
  • 示例:HANLPPINY({kehuName}) HANLPPINY('锐昉科技')
CONCATID ~~v3.9
  • 作用:连接多个 ID(字段)为 ID 数组。常用于将多个引用字段连接为一个 多引用 字段返回
  • 语法:CONCATID($ID1, $ID2, [$ID3, $ID4, $ID5])
    • $ID1 ID 字段,可以是引用/多引用字段,也可以是具体的 ID 值,例如 999-0000000000000001
    • $ID2 $ID3 $ID4 $ID5 同上
  • 示例:CONCATID({kehu1}, {kehu2})
CONCATARRAY ~~v3.9
  • 作用:连接多个(字段)为数组。虽然此函数接受任何参数,但更常用于将多个媒体类字段(图片、附件、头像)连接为一个 附件 字段返回,也可以将多个字段连接后进行更多逻辑处理。
  • 语法:CONCATARRAY($OBJ1, $OBJ2, [$OBJ3, $OBJ4, $OBJ5])
    • $OBJ1 任意字段或具体值
    • $OBJ2 $OBJ3 $OBJ4 $OBJ5 同上
  • 示例:CONCATARRAY({img1}, {file2})
SQLQUERY ~~v3.9
  • 作用:执行 SQL 查询,返回一个字段值。
  • 语法: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})
  • SQL 语句示例
    • 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
  • 作用:计算两个 位置(字段)的直线距离(米)
  • 语法:LOCATIONDISTANCE($LOC1, $LOC2)
    • $LOC1 表示起始坐标,可以是位置字段,也可以是具体的坐标值,例如 123.1234567,321.12345678
    • $LOC2 表示结束坐标,可以是位置字段,也可以是具体的坐标值,例如 123.1234567,321.12345678
  • 示例:LOCATIONDISTANCE({qiyundi}, {mudidi}) LOCATIONDISTANCE({qiyundi}, {mudidi}) / 1000
REQUEST
  • 作用:请求给定 URL 以获取结果
  • 语法: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 高级计算公式实战

该文档内容对您是否有帮助?没有
您也可以通过 社区群组 向我们反馈问题
更新时间 2025-03-23
目录