我有一个问题......如果我们无法在触发器后(例如插入后)更新记录的任何字段值(trigger.new的一部分),那么工作流(使用评估标准:创建记录)如何修改字段值?
问问题
1453 次
3 回答
1
如果记录是trigger.new的一部分,并且如果我们尝试在 after trigger 中修改/更新记录,则会在锁定时引发异常。
在成功执行后触发器时,记录被解锁,并且在第一次执行后触发器后执行工作流规则;工作流字段更新可以修改记录,因为记录上没有锁定。
希望,它会消除你的疑惑!:)
于 2016-07-12T11:54:25.437 回答
0
工作流字段更新实际上会导致插入操作完成后发生新的更新操作。
所以这种情况下的执行顺序是这样的:
- 在插入触发器之前
- 插入触发器后
- 工作流字段更新
- 更新触发前
- 更新触发后
于 2016-07-08T18:05:16.680 回答
0
当您使用 insert、update 或 upsert 语句保存记录时,Salesforce 按顺序执行以下事件:
- 从数据库加载原始记录或为 upsert 语句初始化记录。
- 从请求中加载新的记录字段值并覆盖旧值。如果请求来自标准 UI 编辑页面,Salesforce 会运行系统验证以检查记录:
- 符合特定于布局的规则
- 布局级别和字段定义级别的必需值
- 有效的字段格式
- 最大字段长度
当请求来自其他来源时,例如 Apex 应用程序或 SOAP API 调用,Salesforce 仅验证外键。在执行触发器之前,Salesforce 会验证任何自定义外键不引用对象本身。
如果创建了多行项目,例如报价行项目和商机行项目,Salesforce 会运行用户定义的验证规则。
- 在触发器之前执行所有操作。
- 再次运行大多数系统验证步骤,例如验证所有必填字段是否具有非空值,并运行任何用户定义的验证规则。Salesforce 不会再次运行的唯一系统验证(当请求来自标准 UI 编辑页面时)是执行特定于布局的规则。
- 执行重复的规则。如果重复规则将记录标识为重复并使用阻止操作,则不会保存记录并且不会采取进一步的步骤,例如在触发器和工作流规则之后。
- 将记录保存到数据库,但尚未提交。
- 在触发器之后执行所有操作。
- 执行分配规则。
- 执行自动响应规则。
- 执行工作流规则。
- 如果有工作流字段更新,请再次更新记录。
- 如果记录使用工作流字段更新进行了更新,则在更新触发器之前和更新触发器之后再触发一次(并且仅再触发一次),此外还有标准验证。自定义验证规则、重复规则和升级规则不会再次运行。
- 执行进程。
如果有工作流流触发器,则执行流。
Process Builder 已取代以前在试点计划中提供的流触发工作流操作。使用流触发工作流操作的组织可以继续创建和编辑它们,但流触发工作流操作不适用于新组织。
- 执行升级规则。
- 执行权利规则。
- 如果记录包含汇总汇总字段或者是跨对象工作流的一部分,则执行计算并更新父记录中的汇总汇总字段。父记录通过保存过程。
- 如果父记录已更新,并且祖父记录包含汇总汇总字段或者是跨对象工作流的一部分,则执行计算并更新祖父记录中的汇总汇总字段。祖父母记录经过保存程序。
- 执行基于标准的共享评估。
- 将所有 DML 操作提交到数据库。
- 执行提交后逻辑,例如发送电子邮件。
有关详细信息,请参阅Salesforce 文档。
于 2016-07-08T12:05:47.607 回答