触发器

! 文档已过期,请 查看新版

触发器可以实现自动化的、个性化的业务流程处理,例如为客户发送生日提醒、服务到期提醒、汇总客户总成交金额、自动审批、根据 A 字段的值自动填写 B 字段的值,甚至调用外部程序接口等等。

触发器是一种当下流行的 RPA(机器人流程自动化)技术。采用 IFTTT 模式,其核心思想为“如果怎样,就怎样”,例如“如果合同审批通过,就创建订单”、“如果客户生日,就发送短信”等等。触发器是 RB 核心功能之一,支持丰富的自动化处理。

添加触发器

要添加触发器,首先进入管理中心 - 触发器,然后点击页面右上角的 [添加] 按钮。

  1. 选择触发器类型
  2. 选择触发源实体

选择/填写完成后点击 [确定] 按钮,系统将进入下一步对触发器进行完整配置。

  1. 源实体
  2. 当(源实体/记录)发生指定“动作”时执行该触发器
  3. 通过配置附加过滤条件进一步限定只有符合的数据才会被触发
  4. 触发器类型
  5. 根据不同的触发器类型,此处的触发内容也不同,详见下文 配置触发器
  6. 如果一个实体有多个触发器,且存在依赖,可以配置触发的先后顺序

? 触发动作中的“审批通过时”是指最终通过(即审批完成),而非某一审批步骤通过。同时注意部分触发动作可能不被源实体所支持,例如一个未开启审批流程的实体不会产生审批相关动作

定期执行

触发器除了在特定动作下触发执行,也可以被“定期执行”。对于那些没有合适触发时机或需要定期触发的业务(动作)特别有用(例如发送客户生日提醒)。

请注意下图中的执行时段(从 V2.9 开始支持),默认为 0~24 点,您可以根据需要选择指定的时段内执行。例如每天执行 2 次,执行时段选择 0~24 点,其执行时间分别为 0:00 和 12:00 点;执行时段选择 9~18 点,其执行时间分别为 9:00 和 13:00 点。

定期执行一般适用于无需实时而又需要周期性执行的情况,通常会搭配“附加过滤条件”使用

配置触发器

系统提供了丰富的触发器用于满足各种业务场景。我们将在后续版本中提供更多触发器,以便满足您的更多业务需要。RB 目前支持的触发器:

字段更新

字段更新与 字段聚合 共同为 RB 提供强大的动态业务运算能力。字段更新一般应用在 1 > 1 关系中(例如根据订单总金额、已付金额计算出未付金额),而字段聚合一般应用在 N > 1 关系(例如将多笔订单明细金额聚合到订单总计金额)。

字段更新同时也支持 1 > N 关系(此关系下的目标实体会显示 (N) 标识),例如多个订单会引用同一个客户,可以通过此触发器在客户更新时同步更新其下所有订单的(字段)值。

字段更新支持(从源实体字段)字段赋值、固定值、计算公式等更新方式,并且对所有字段(类型)均提供支持。需要注意的是,不同字段类型之间的转换可能导致精度损失(例如小数转整数)。

  1. 目标实体,即要更新的目标字段属于哪个实体
  2. 根据需求配置更新规则并点击 [+添加],支持添加多个
  3. “自动设置目标字段为只读”后字段将不可填写,建议启用
  4. “允许强制更新”允许对只读记录进行强制更新(如审批中、审批通过的记录),可根据需要启用(从 V2.9 开始支持)
  5. 立即执行此触发器(从 V2.9 开始支持)

字段更新支持丰富的更新方式,以及高级计算公式,详情参阅 计算公式

字段聚合

字段聚合用于将多条(记录)值聚合到一条(记录)值,例如订单明细中的小计金额聚合(求和)到订单的总计金额,或计算客户的客单价(平均值)等。字段聚合通常应用在 N > 1 关系中,如 N明细 > 1订单 N订单 > 1客户

字段聚合提供的聚合方式包括求和、计数、平均值以及计算表达式等运算能力。

  1. 目标实体,即要聚合的目标字段属于哪个实体
  2. 根据需求配置聚合规则并点击 [+添加],支持添加多个
  3. 仅针对符合条件的数据进行聚合运算(例如仅聚合审批通过的订单)
  4. “自动设置目标字段为只读”后字段将不可填写,建议启用
  5. “允许强制更新”允许对只读记录进行强制更新(如审批中、审批通过的记录),可根据需要启用 ~~v3.1
  6. 立即执行此触发器 ~~v3.1

分组聚合 ~~v2.5

分组聚合与字段聚合类似,不同的是其可以通过配置“分组字段关联”进行目标记录匹配(且具备自动新建的能力),不要求“源实体”与“目标实体”有直接的关联关系,仅需存在间接关联即可。例如在统计仓库库存时,需要将仓库、产品同时作为分组字段进行关联。

  1. 数据将聚合到目标实体
  2. 建立两个实体之间的字段关联(即分组)
  3. 聚合规则与 字段聚合 的用法一致
  4. 仅聚合符合条件的数据(例如审批通过的)
  5. 如果通过“分组字段关联”未找到匹配记录,是否允许自动新建
  6. “自动设置目标字段为只读”后字段将不可填写,建议启用
  7. “允许强制更新”允许对只读记录进行强制更新(如审批中、审批通过的记录),可根据需要启用 ~~v3.1
  8. 聚合后回填聚合记录到源记录中 ~~v3.1

分组字段关联

“分组字段关联”仅对有限字段类型提供支持(不支持的字段会被过滤)。同时注意,如目标字段类型为“日期”,将按照目标字段的“格式”进行分组(如年月);如目标字段类型为“分类”,将按照目标字段的“分类级别”进行分组。目标字段的级别必须小于等于源字段,例如源字段为 YYYY-MM(即年月格式),而目标字段为 YYYY-MM-DD(即年月日格式),则无法被系统允许。同理,2 级分类无法分组至 3 级分类。

数据校验 ~~v2.5

通过配置“校验条件”,校验录入的数据是否符合业务规则(例如库存数量不能小于 0)。注意“校验条件”与“附加过滤条件”为并且关系,即需同时符合两个条件,一般情况下仅设置“校验条件”即可。

! 在 2.9.4 版本此功能有调整,请注意阅读使用说明(原有配置不受影响,但修改时务必按照新的使用说明配置)

自动审批

自动 审批 通常用于某些无需人工介入的记录审批(例如对金额小于 1000 元的订单进行自动审批),或者某些由系统自动创建的记录(参考下文自动记录转换)。

  1. 选择使用哪个审批流程(可选)
  2. 启用提交模式(启用此模式则必须选择一个审批流程使用),启用后系统会自动提交审批,而非自动审批通过 ~~v3.0

? 若记录处于审批中、已审批状态,则不会进行自动审批

自动撤销审批 ~~v3.1

自动撤销审批可以帮助您撤销相关记录,例如当一个报价被撤销,其所关联的合同也要撤销。您仅需配置要撤销的记录范围即可。

自动记录转换 ~~v2.2

自动记录转换可以将 记录转换 自动化执行,减少无意义的手动操作或执行系统级的业务规则(例如库存管理中根据盘点的盘盈盘亏自动转换相应的入库出库记录)。

自动记录转换通常配合“附加过滤条件”使用,当记录符合条件时执行自动转换。

自动删除 ~~v3.1

自动删除可以帮助您删除无效/无意义记录,仅需配置要删除的记录范围。需要注意的是,仅当您启用了回收站功能时,此触发器才会被执行。同时,处于审批中或审批通过的记录不能被自动删除。

自动共享

将记录自动 共享 给指定用户。

自动取消共享 ~~v3.2

TODO

自动分配

将记录自动 分配 给指定用户。例如新的客户资源产生,将其分配给不同的销售人员以便其进行跟进。

发送通知

发送通知通常用于获知数据的变化,或当数据变化时通知相关用户,例如一个新的线索被添加通知销售人员进行跟进。同时,您也可以配合 定期执行 发送定时的或周期性的提醒,例如在客户生日当天发送关怀短信。

通知外部人员 ~~v2.9

您也可以发送通知(短信、邮件)给外部人员(例如客户生日提醒)。RB 会列出源实体中的电话、邮件字段供您选择接收地址。使用此功能需要您正确配置 短信服务 或/和 邮件服务

回调 URL

回调 URL 主要用于与三方系统对接。当发生指定动作时 RB 将会以 POST 的方式将数据(JSON 格式)发送到指定的 URL。

POST 数据格式示例

{
  "user": "002-0000000000000000",     // 操作人
  "action": "DELETE",                 // 动作
  "recordId": "999-0000000000000001", // 操作记录ID
  "recordData": xxx                   // 操作记录数据(若有)
}

您可以使用 https://webhook.site 测试不同动作时的数据格式

新建动态 ~~v3.2

TODO

计算公式

在上文 字段更新 中提到可以通过计算公式实现复杂的字段值计算,以下介绍两种计算公式的使用方法。

公式编辑器

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

公式编辑器支持数字、日期类型字段(如果是其他类型的字段,会自动切换到“高级计算公式”编辑器),您可以根据业务需求配置合适的公式。请注意,计算公式所返回的结果需要与“目标字段”类型匹配,例如目标字段为数字,那么公式计算结果也应是数字,RB 不会对公式结果进行验证,请自行保证正确性。

使用函数

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

DATEDIFF
  • 作用:比较两个日期(时间),得出差值(数字类型)
  • 语法:DATEDIFF($DATE1, $DATE2, [H|D|M|Y])
    • $DATE1$DATE2 表示日期,可以是日期字段,也可以是具体的日期值,如 2021-01-01
    • [H|D|M|Y] 表示差值单位(可选,默认为 D)。H 表示小时,D 表示天,M 表示月,Y 表示年
  • 示例:DATEDIFF({ziduan1}, {ziduan2}) DATEDIFF({ziduan1}, {ziduan2}, "M")
DATEADD
  • 作用:将日期(时间)加,得出新值(日期类型)
  • 语法:DATEADD($DATE, $NUMBER, [H|D|M|Y])
    • $DATE 表示日期,可以是日期字段,也可以是具体的日期值,如 2021-01-01
    • $NUMBER 表示数字,可以是数字字段,也可以是具体的数字值,如 30
    • [H|D|M|Y] 表示数字单位(可选,默认为 D)。H 表示小时,D 表示天,M 表示月,Y 表示年
  • 示例:DATEADD({ziduan1}, {ziduan2}, "D") DATEADD({ziduan1}, 5, "D")
DATESUB
  • 作用:将日期(时间)减,得出新值(日期类型)
  • 语法:DATESUB($DATE, $NUMBER, [H|D|M|Y])
    • $DATE 表示日期,可以是日期字段,也可以是具体的日期值,如 2021-01-01
    • $NUMBER 表示数字,可以是数字字段,也可以是具体的数字值,如 30
    • [H|D|M|Y] 表示数字单位(可选,默认为 D)。H 表示小时,D 表示天,M 表示月,Y 表示年
  • 示例:DATESUB({ziduan1}, {ziduan2}, "D") DATESUB({ziduan1}, 5, "D")

高级计算公式 ~~v2.4

RB 的计算公式底层使用 Aviator 实现,因此您可以编写任何符合 Aviator Script 语法的代码来实现业务需求(上节中介绍的内置函数也可在高级计算公式中使用)。在开始使用高级计算公式前我们强烈建议您阅读 Aviator 文档,尤其是 函数库列表 章节。

同公式编辑器一样,高级计算公式中的字段变量也需要通过 {xxx} 包裹,在公式执行时 RB 会自动替换实际的字段值。同时注意引用型字段(如下拉列表、分类、引用等)输出为 ID,如需获取文本可以参见上节中介绍的 TEXT 函数。

RB 内置函数库

  • CURRENTUSER() 当前用户(ID)
  • CURRENTBIZUNIT() 当前用户的所在部门(ID)
  • CURRENTDATE() 当前日期(时间)
  • LOCATIONDISTANCE($LOC1, $LOC2) 两个位置(字段)的直线距离(米)
  • REQUEST($URL, [$DEFAULT]) 请求给定 URL 以获取结果
  • TEXT($ID, [$DEFAULT]) 转换 ID(字段)为文本 ~~v2.9.4
  • CHINESEYUAN($NUMBER) 将金额转换为大写形式 ~~v3.1
  • StringUtils 字符处理工具集(此工具集所提供的方法请 参见文档)~~v3.0

请注意函数名区分大小写。字段请使用 {} 包裹、字符使用引号包裹、数字无需引号

高级计算公式要求您具备一定的编程基础,否则可能无法顺利进行

字段变量值说明

为保持最大兼容性,RB 对字段变量值进行了一些处理。如您在表达式中使用了逻辑判断,请务必阅读以下说明:

  • 除数字类型字段会保持为数字,其余字段变量值均处理为字符串(包括日期等)
  • 如字段变量值为空,对于数字类型字段将处理为数字 0,对于非数字字段将处理为空字符串 ''

返回值说明

公式计算出的值需要符合字段在数据库中定义的存储类型,RB 不会对值类型进行转换,需您自行处理。在编写高级表达式前,您应清楚并理解各类型字段值的含义。

  • 对于格式文本类字段,RB 不会进行格式验证(如电话、邮箱等),请自行保证格式正确
  • 对于引用型字段(包括下拉列表、分类、引用、多引用),需要保证值为有效的 ID
  • 对于多选、状态类型的字段,数据库存储的是整数数字

示例

注意下列示例中使用 {} 包裹的均为字段内部标识,内部标识可在字段管理或字段编辑页面获知

将两个字段值拼接(注意字段 ziduan1 和 ziduan2 均为文本类型,非文本请先转换)
{ziduan1} + "-" + {ziduan2}
米转换成公里(注意下列 juli 字段为数字类型,非数字请先转换)
{juli} / 1000
获取两个日期之间的的小时数
DATEDIFF({date1}, {date2}, "H")

高级主题

关联执行

某些触发器可能会引起关联执行,例如 A 触发器用于更新某实体字段值,当实体字段值被更新后,会被动触发“更新”动作,从而引起 B 触发器(若有)执行,B 触发器又可能引起 C 触发器(若有)执行… 简而言之,无论“更新”动作是如何发生(如手动更新、API 更新、触发器更新等),其对应的触发器都会被执行(其他“动作”同理)。

如果两个(或多个)触发器之间存在循环关联执行,RB 会自动检测并可避免死循环的发生,您无需关心此问题。

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