概述
当你的触发器配置了大量的执行操作,或者正在跟很多其它的自动化能力结合使用时,了解触发器的内部执行机制,将大大有助于你进行深度调试、理解各种动作的执行顺序、真正「玩转」触发器。
执行机制1:
被触发的不同触发器/工作流的执行是并列执行的,执行完成时间是不定的,不会依赖于触发时间从前往后执行完成,当数据的录入形式存在导入时,需要注意该机制。
示例:如下是一个用于统计地产中介公司的经纪人的带看工作量的触发器/工作流,每当产生一条带看的时候,则去每日工作量表里查找,是否创建了该经纪人今天的工作量数据,如果没有创建,则创建数据。
如果带看是通过导入数据的形式产生的,这时同时导入了一个经纪人的一天的10条带看,因为不同操作触发的触发器/工作流的执行是并行的,所以有可能产生1-10条每日工作量,这与我们想要的结果有差异(只产生一条每日工作量),所以表格存在导入的时候,设计触发器/工作流需要考虑触发器/工作流并发执行的问题。
解决方案:
使用聚合表基于时间和经纪人分组统计,再通过在聚合表中设定定时触发器/工作流来创建每日工作量。
注:聚合表具有聚合时长,因此数据会不具有实时性。
执行机制2:
单个触发器/工作流的后续操作的执行是无顺序的,执行结果并非实时生效。
执行机制3:
在触发触发器/工作流的时候,{当前数据}、{当前数据.字段}值就已经固定,不会变更。
示例:触发器/工作流第一个操作修改了当前数据的值,第二个操作使用当前数据的字段值还是第一个操作修改前的值。
解决方案:
如果第二个操作需要获取当前数据的新值,可使用ITEM查询。
执行机制4:
在同一次操作触发的触发器/工作流中,计算字段的更新不是实时,等同一次触发的触发器/工作流都执行完成后才会更新计算字段。
执行机制5:
跨表格计算,计算字段的值的变化是不会触发触发器/工作流的。
执行机制6:
触发器/工作流的后续操作修改可以绕过必填、数据验证、显隐。
执行机制7:
被本表触发器/工作流的后续操作修改字段触发的触发器/工作流不会被触发。
举例:
A表(字段A1,A2,A3)有两个触发器/工作流:
触发器/工作流1:A1修改后会触发触发器/工作流,后续操作修改当前数据的字段A2。
触发器/工作流2:A2修改后会触发触发器/工作流,后续操作修改当前数据的字段A3。
B表(字段B1(关联A表),字段B2):
触发器/工作流3:B2修改后会触发触发器/工作流,后续操作修改字段B1关联的A表数据的字段A2。
那么修改字段A1后,只会触发触发器/工作流1
虽然触发器/工作流2也满足条件,但是根据触发器/工作流机制是不会执行的,修改B2会触发触发器/工作流3,
因为字段A2的修改是别表触发器/工作流导致的,所以会继续往下执行。
解决方案:
将触发器/工作流进行合并,合并成一个触发器/工作流,进行两个执行操作。
执行机制8:
执行操作内 引用当前数据的 字段 赋值时,获取的是当前数据创建/修改后的字段值,该值在触发器执行前已经生成。
示例如下:
表格有A、B两个字段,手动创建数据后,触发器执行分别给两个字段赋值:
- 给字段A赋值,表达式为'1'
- 给字段B赋值,表达式为{当前数据.字段A};
现手动创建一条字段A、B均为空的数据,成功触发了触发器执行。
触发器执行后,字段A值为1,字段B值为空。
执行机制9:
触发器中,自增函数执行逻辑如下:
- 触发器每模拟运行一次,自增函数的结果编号+1。
- 有多个自增函数 且 为同一个自增通道时,自增函数会依次递增。
示例如下:
如图,触发器中,临时变量和字段的表达式如下:
- 临时变量A赋值表达式为:INCREMENT('A')
- 字段B赋值表达式为:INCREMENT('A')
- 字段C赋值表达式为:{临时变量.A}
请问触发器首次执行,字段 B & C 的结果为多少?
基于自增函数的执行逻辑,执行后临时变量返回结果=1(自增函数执行第一次的结果),字段B返回结果=2(自增函数执行第二次的结果),字段C返回结果=1(获取临时变量的结果)。
执行机制10:
数值类型的数值,保留小数并转换成文本类型值时,通过触发器转换会省略小数部分最后几位的 0,通过快捷按钮可完整转换,具体效果可见示例:
赋值方式\数值字段的值 | 数值为 6.00 | 数值为 0.60 | 数值为6.000 | |
---|---|---|---|---|
触发器 | 用“{数值字段}”赋值 | 6 | 0.6 | 6 |
用“text({数值字段})函数”赋值 | 6 | 0.6 | 6 | |
快捷按钮 | 用“{数值字段}”赋值 | 6.00 | 0.60 | 6.000 |
用“text({数值字段})函数”赋值 | 6.00 | 0.60 | 6.000 |