字段更新

字段更新是 RB 较为常用且最强大的触发器之一,其应用场景可简单描述为通过 A 字段值更新 B 字段值、或通过 A B C ... 字段值更新 D 字段值。例如,可根据订单总金额、已付金额计算未付金额;再例如,多个订单会引用同一个客户,可以通过此触发器在客户更新时同步更新其下所有订单的(字段)值。

字段更新支持(从源实体字段)字段赋值,或使用固定值、计算公式等丰富的更新方式。

配置触发器

1. 目标实体

更新哪个实体(记录)。源实体与目标实体通过 引用字段 关联,只有存在关联关系的实体才能被选择。

带有 (N) 标识的表示会影响到多条记录。例如订单中“购买客户”字段引用客户(即 1客户:N订单),因此在以客户为源实体时会更新多条订单(若有)。同时注意“通过字段匹配”也会影响到多条记录

通过字段匹配 ~~v3.8

如果源实体与目标实体之间没有关联关系,可以“通过字段匹配”。例如实体 A 中有物料编号、供应商编号,实体 B 中也有物料编号、供应商编号,即使实体 A、B 之间没有引用字段关联,B 也可以作为目标实体使用。

其关联逻辑为:A 实体(记录)触发时,会通过自身的物料编号、供应商编号到 B 实体中查找一样的记录进行处理(如找到多条则会更新多条)。

2. 更新规则

根据业务需要设置“更新方式”、“源字段”(或 计算公式),系统会将结果自动填写到“目标字段”中。设置完成后点击 [添加],一个触发器可添加多个更新规则。

3. 自动设置目标字段为只读

将“目标字段”设置无只读模式(即用户不能填写)。

4. 允许强制更新

如果目标实体启用了 审批流程,目标记录可能处于审批只读状态,如不启用此选项可能无法完成更新且不会提示错误。

5. 源字段为空时置空目标字段 ~~v3.3

默认情况下源字段为空时(或源记录被删除时)系统会忽略执行更新,这将导致先前更新的值无法还原到空,启用此选项可避免此问题出现,您可根据需要启用此选项。

6. 禁用级联执行 ~~v3.8

禁用 级联执行。如您无法确定是否需要禁用,请不要禁用。

7. 目标记录不存在时自动新建 ~~v3.9

本选项仅在“通过字段匹配”时可用,当匹配不到任何记录时将自动新建。

计算公式

计算公式可以实现复杂的字段值处理,甚至支持编写代码来进行各种逻辑条件的处理。

公式编辑器

  1. 在“更新方式”中选择“计算公式”
  2. 点击“计算公式”打开公式编辑器
  3. 点击可切换为 高级计算公式 模式
  4. 详见下文 使用日期函数

公式编辑器仅支持数字、日期类型字段,如果是其他类型的字段,会自动切换到“高级计算公式”编辑器。请注意计算公式所返回的结果需要与“目标字段”类型匹配,例如目标字段为数字则计算结果也应为数字,否则可能导致触发器执行失败。

使用日期函数

系统提供了多个针对日期处理的函数,使用函数时请注意保证其语法正确性。

DATEDIFF
  • 作用:比较两个日期(时间),得出差值(数字类型)
  • 语法:DATEDIFF($DATE1, $DATE2, [H|D|M|Y|I])
    • $DATE1$DATE2 表示日期,可以是日期字段,也可以是具体的日期值,如 2021-01-01
    • [H|D|M|Y|I] 表示差值单位(可选,默认为 D)。H 表示小时,D 表示天,M 表示月,Y 表示年,I 表示分钟
  • 示例:DATEDIFF({riqi1}, {riqi2}) DATEDIFF({riqi1}, {riqi2}, "M")

自 V3.6 支持简易写法,如 $DATE1 - $DATE2 得出差值(天数)。或直接通过大于、小于比较两个日期得到布尔值用于 if 判断,如 $DATE1 > $DATE2 $DATE1 < $DATE2

DATEADD
  • 作用:将日期(时间)加,得出新日期
  • 语法:DATEADD($DATE, $NUMBER, [H|D|M|Y|I])
    • $DATE 表示日期,可以是日期字段,也可以是具体的日期值,如 2021-01-01
    • $NUMBER 表示数字,可以是数字字段,也可以是具体的数字值,如 30
    • [H|D|M|Y|I] 表示数字单位(可选,默认为 D)。H 表示小时,D 表示天,M 表示月,Y 表示年,I 表示分钟
  • 示例:DATEADD({riqi1}, {shuzi2}, "D") DATEADD({riqi1}, 5, "D")

自 V3.6 支持简易写法,如 $DATE + $NUMBER 得出新日期(加天数)

DATESUB
  • 作用:将日期(时间)减,得出新值日期
  • 语法:DATESUB($DATE, $NUMBER, [H|D|M|Y|I])
    • $DATE 表示日期,可以是日期字段,也可以是具体的日期值,如 2021-01-01
    • $NUMBER 表示数字,可以是数字字段,也可以是具体的数字值,如 30
    • [H|D|M|Y|I] 表示数字单位(可选,默认为 D)。H 表示小时,D 表示天,M 表示月,Y 表示年,I 表示分钟
  • 示例:DATESUB({riqi1}, {shuzi2}, "D") DATESUB({riqi1}, 5, "M")

自 V3.6 支持简易写法,如 $DATE - $NUMBER 得出新日期(减天数)

DATEPICKAT ~~v3.5
  • 作用:获取日期(时间)中的指定部分,得出新值(数字)
  • 语法:DATEPICKAT($DATE, [Y|Q|M|D|H|I|W])
    • $DATE 表示日期,可以是日期字段,也可以是具体的日期值,如 2021-01-01 2023-01-01 10:01:02
    • [Y|Q|M|D|H|I] 表示获取单位(可选,默认为 D)。Y 表示年,Q 表示季度,M 表示月,D 表示日,H 表示小时,I 表示分钟,W 表示周几(V3.6)
  • 示例:DATEPICKAT({riqi1}) DATEPICKAT({riqi1}, "Q")

高级计算公式

高级计算公式的编写方法请参见 计算公式,同时您需要注意,公式的返回值需符合目标字段的类型要求,在编写表达式前,您应清楚并理解各类型字段值的含义。

  • 对于格式文本型字段(包括电话、邮箱、链接等),系统不会进行格式验证,请自行保证格式正确
  • 对于引用型字段(包括下拉列表、分类、引用),需要保证值为有效的 ID(20 位 Hash 字符串)
  • 对于多引用字段,需要保证值为 ID 数组
  • 对于图片、附件字段,需要保证值为 JSON 数组(如 ['rb/aaa','rb/bbb']
  • 对于多选、状态字段,需要保证值为整数数字(多个选型值相加)

对于分类、下拉列表、多选字段,您可以通过 OpenAPI 获取其对应返回值(ID 或数字)

常见问题

如何选择合适的源实体?

源实体:数据从哪里来;目标实体:到哪里去。

是否支持实时计算?

不支持,触发器仅在保存时由后台进行计算。若您需要实时计算,可以考虑使用表单计算公式(或配合使用),目前 小数日期日期时间 均支持表单计算公式。

性能优化建议

在不影响业务逻辑的情况下,您可以:

  • 将多个触发器合并到一个触发器执行
  • 设置“附加过滤条件”,过滤不必要的执行
  • 启用“禁用级联执行”,让触发器不引起其他触发器的执行
该文档内容对您是否有帮助?没有
您也可以通过 社区群组 向我们反馈问题
更新时间 2025-03-23
目录