今天,因为一个Bug 小喵查了一下salesforce的执行流程,下面就分享给大家!
当我们保存与插入,更新,或更新插入语句的记录,Salesforce的可以依次执行以下事件。
注:Salesforce在服务器上执行这些事件之前,浏览器运行JavaScript验证是否有记录包含任何依赖列表字段。验证每个依赖列表字段限制了它的可用值。无其他验证发生在客户端。
执行顺序 :
1. 从数据库加载原始记录或初始化一个用于更新插入(upsert)语句的记录。
2. 从请求加载新记录的字段值并覆盖旧的值。
如果请求来自一个标准的UI(user interface)编辑页面,Salesforce会运行系统验证去检查记录是否符合以下规则:
•符合布局的具体规则
•在布局水平和字段定义级别是否是必须入力的值
•有效字段格式
•最大字段长度
注意:当这个请求来自其他资源的时候(比如来自Apex application 或者 SOAP API 调用的时候.),salesforce并没有在此步骤中执行系统验证
3. 执行所有的before 触发器。
4. 再次运行大部分的系统验证步骤,如验证所有必填字段没有一个非空值,并运行所有用户自定义的验证规则。
5. 保存记录到数据库中,但不提交事务(commit)。
6. 执行所有的after 触发器。
7. 执行分配规则(assignment rules)。
8. 执行自动响应规则(auto-response rules)。
9. 执行工作流程规则。
10. 如果有工作流将一些字段更新了,再更新该记录。
11. 如果记录在工作流更新字段值得时候被更新了,再一次(仅仅再一次)触发before update和after updata触发器,同时还有标准的验证规则也会被执行(自定义的验证规则不会被执行)。
12. 如果有工作流流程触发器(workflow flow triggers),执行流(flow)。
13. 执行升级规则。
14. 如果记录包含一个卷起的汇总字段,或者是一个跨对象工作流程的一部分,执行计算并更新父记录卷起汇总字段。父记录经过保存的程序。
15. 如果父记录被更新,和祖父母记录包含一个卷起的汇总字段,或者是一个跨对象工作流程的一部分,执行计算并更新父记录卷起汇总字段。祖父母记录经过保存的程序。
16. 执行基于共享的评价标准。
17. 要求所有DML操作到数据库。
18. 执行post-commit的逻辑,如发送电子邮件。
转自 >>
为了方便小伙伴们理解,再附上一个口诀 :
- 页面后台两不同,
- 布局规则最优先,
- 格式长度和必填。
- Before Trigger触发前,
- 后台只将外键检。
- 批量插入有例外,
- 验证规则提前验。
- Before之后做验证,
- 自定规则和必填,
- 系统规则不二遍。
- 验证之后跑去重,
- 存入DB不提交。
- After Trigger触发后,
- 分配/回复/工作流,
- 如果字段有更新,
- 验证/去重不再做,
- Trigger仅再跑一次。
- PB/Flow依次跑,
- 数据操作从头走,
- Case规则在随后。
- 父表汇总此时算,
- 工作流把父表更,
- 共享规则重计算。
- 数据DB提交后,
- 后续邮件才发送。
今天,小喵就 拿来即用 的给大家分享一下了
你 Get 到了吗?
(^_^)~喵~!!