跨对象规则
定义这样一类规则:一个对象上的条件,触发另一个对象上的动作,可以拦住保存、创建一条记录,或者更新相关联的记录。这是一种保证数据完整性的自动化,在表单里写完,不用代码,也不用等某个定时流程。
有些业务规则装不进单个字段的校验里:金额超过一定数目的商机,没有附上方案就不能保存;每一个赢单商机都应当产生一条实施记录;改动一家客户的状态,需要反映到与之关联的合同上。跨对象规则表达的正是这件事:条件在一个对象上,效果落在另一个对象上。
如何创建
- 打开“设置”,在“自动化与流程”分组里点击“跨对象规则”。
- 填写规则名称,并选择来源对象,也就是要被观察的那类记录所属的对象。
- 在“何时”里,选择创建时、编辑时,或创建或编辑时。
- 在“条件(全部成立)”里点击“添加条件”,逐行搭建:字段、运算符和值。
- 选择动作:拦截、创建记录或更新关联记录。后两者还需要指定目标对象。
- 勾选“启用”,然后点击“保存”。
字段是从列表里选的,不是手输的,这样就不会写错内部名称。可用的运算符有等于、不等于、大于、大于或等于、小于、小于或等于、包含、为空和已填写。条件是叠加的:全部成立规则才会触发,而一条不带任何条件的规则则每次都会触发。
三种动作
- 拦截:阻止保存,并显示你写的拦截提示语。校验发生在写入之前,所以不会留下写了一半的东西。
- 创建记录:在目标对象上创建一条记录。在“新记录的数据”里,你搭建一组要填入的字段和值。
- 更新关联记录:遍历目标对象中通过“关联字段”(来源对象上的一个关系字段)指向这条来源记录的那些记录,并把“新值”写进“要修改的字段”。
Example: 规则“大额生意必须附方案”。来源对象:商机。何时:创建或编辑时。条件:金额大于 50000,并且方案为空。动作:拦截,提示语为“金额超过 50,000 元的商机,请先附上方案再保存”。结果:谁想在没有方案的情况下保存,就会看到这条提示,而保存不会发生。
注意事项与边界
- 由一条规则触发的动作,不会再去重新评估目标对象上的规则。这是有意为之:避免两条规则互相召唤形成死循环,把系统卡住。
- 一条规则最多接受二十个条件。
- 取消勾选“启用”会关掉规则而不删除它,这是验证某个怀疑时最稳妥的做法。
- 会拦截的规则对所有人生效,包括走同一条写入路径的导入和集成。写提示语时,请想着读它的人。
- 在“更新关联记录”里,“关联字段”是从来源对象的关系字段中选的。没有它、也没有“要修改的字段”,这条规则什么都不做。
谁可以操作
创建、编辑和删除规则需要管理配置的权限。但效果是所有人都会感受到的:任何人保存来源对象的一条记录,都要经过这条规则。
常见问题
- 我的规则不触发:请确认它处于“启用”状态、触发时机覆盖了你测试的那种操作,并且所有条件在同一时刻都成立。
- 数字和日期的比较:大于和小于这些运算符按数值比较;等于和包含按文本比较,其中包含不区分大小写。
- 删掉规则会撤销它已经做过的事吗?不会。已创建的记录和已写入的值都留着;规则只是从此不再起作用。
- 它和“校验”有什么区别?校验管的是记录本身,逐个字段。跨对象规则看的是一个对象,作用在另一个对象上。