在使用 Apex 代码插入或更新数据的时候,若干事件会被按顺序执行。了解这些顺序可以提高调试程序的效率,也可以避免不必要的错误。

可以参考官方文档

事件的执行顺序

  1. 从数据库中读取要更新的数据记录或初始化要插入的数据
  2. 更新相关的字段值
  3. 如果插入或更新的请求来自标准的 Salesforce 新建或编辑页面,检查相关的要求,比如字段是否必须、字段的长度是否符合定义、字段的格式是否合理
  4. 如果插入或更新的请求来自 Apex 代码或 API,则只检查外键关联是否合理
  5. 执行所有的 before 类型的触发器代码。注意,当一个操作有不同的触发器逻辑,则它们的执行顺序是不确定的。比如对于“客户”的记录有两个 before insert 类型的触发器逻辑,则任一逻辑都可能先执行
  6. 再次执行第3步所提到的检查
  7. 执行系统中定义的“重复规则”(Duplicate Rules)
  8. 将更新的数据保存到数据库,但是暂时不提交
  9. 执行所有的 after 类型的触发器代码
  10. 执行“分配规则”(Assignment Rules)
  11. 执行“自动回复规则”(Auto-response Rules)
  12. 执行“工作流规则”(Workflow Rules)
  13. 如果“工作流规则”中对于该记录进行了更新,则再次更新该记录。然后,再次执行一次第3步中的检查,和 before 和 after 类型的触发器代码。其他的自定义验证规则以及第7、10、11步中所定义的规则则不会执行
  14. 执行相关的流程(Process)
  15. 执行“升级规则”(Escalation Rules)
  16. 执行“权利过程”(Entitlement Process)
  17. 对与该记录相关的记录进行更新,比如“累计汇总”(Roll-Up Summary)字段的值
  18. 计算记录的分享规则结果
  19. 将第8步中保存的数据提交到数据库,真正的保存起来
  20. 执行其他的事件,比如发送电子邮件等

Apex 中插入更新数据的事件执行顺序的更多相关文章

  1. echarts异步数据加载(在下拉框选择事件中异步更新数据)

    接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...

  2. mysql 插入/更新数据

    mysql 插入/更新数据 INSERT 语句 1.一次性列出全部字段的值,例如: INSERT INTO student VALUES('Chenqi','M', 29); INSERT INTO ...

  3. 【SQL模板】三.插入/更新 数据模板TSQL

    ---Name: 插入/更新 数据模板.sql ---Purpose: 用于更新 数据库中 历史数据 或 插入 新数据 的脚本模板 ---Author: xx ---Time: 2015-12-18 ...

  4. jquery ajax中各个事件执行顺序如下

    $(function(){ setTimeout(function(){ $.ajax({ url:'/php/selectStudent.php', }); },0); $(document).aj ...

  5. jquery中各个事件执行顺序如下:

    jquery中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事件) 6.e ...

  6. jquery ajax 中各个事件执行顺序

    jquery ajax 中各个事件执行顺序如下: 1.ajaxStart(全局事件) 2.beforeSend 3.ajaxSend(全局事件) 4.success 5.ajaxSuccess(全局事 ...

  7. SQL Server ->> DISABLE索引后插入更新数据再REBUILD索引 和 保留索引直接插入更新数据的性能差异

    之前对于“DISABLE索引后插入更新数据再REBUILD索引 和 保留索引直接插入更新数据的性能差异”这两种方法一直认为其实应该差不多,因为无论如何索引最后都需要被维护,只不过是个时间顺序先后的问题 ...

  8. MySQL_(Java)使用JDBC向数据库中插入(insert)数据

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...

  9. [Vue]vue中各选项及钩子函数执行顺序

    在vue中,实例选项和钩子函数和{{}}表达式都是不需要手动调用就可以直接执行的. 一.生命周期图示 二.vue中各选项及钩子函数执行顺序 1.在页面首次加载执行顺序有如下: beforeCreate ...

随机推荐

  1. vscode (1.41.0版本,1.41.1版本)node_modules部分TS声明文件@types包会导致该版本没JS语法提示

    正常提示如下: 然而我的提示没了,本以为是插件问题,把所有插件禁用不行!卸载重装vscode还是不行!!但是其他电脑的1.41.1版本,同样代码确没问题!!!简直日了*了 折腾大半天,发下问题如下: ...

  2. 转载:RAID5和RAID10,哪种RAID更适合你

    转自 http://storage.it168.com/h/2007-06-28/200706281204046_3.shtml 存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储 ...

  3. 明解C语言 中级篇 第一章答案

    练习1-1 #include <stdio.h> #include<stdlib.h> int main() { srand(time()); ; printf("您 ...

  4. Delta-wave HDU - 1030

    Delta-wave HDU - 1030 A triangle field is numbered with successive integers in the way shown on the ...

  5. NimSystem实现

    题目 题目比较长,我直接放截图吧 简述 一个比较经典的类与对象的题目,三个类实现了一个比较简单的系统,具体的每个类的要求可以从上面的题目描述中看出(只要你有耐心读完..),不再赘述,代码如下 代码实现 ...

  6. ECMAScript 6.0 简要学习

    由于在学习vue的时候有许多自己不懂的语法,于是简单的学习一下ES6. 1.ES简介 ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版. ...

  7. javascript中的发布订阅模式与观察者模式

    这里了解一下JavaScript中的发布订阅模式和观察者模式,观察者模式是24种基础设计模式之一. 设计模式的背景 设计模式并非是软件开发的专业术语,实际上设计模式最早诞生于建筑学. 设计模式的定义是 ...

  8. LinkedHashMap实现和LRU

    HashMap是Java中叫法,在Python中就叫Dict 在Python的标准库中实现了LinkedHashMap,它的名字叫OrderedDict,它的源码比较简单,OrderedDict继承了 ...

  9. 【题解】Norma [COCI2014] [SP22343]

    [题解]Norma [COCI2014] [SP22343] 传送门:\(\text{Norma [COCI2014]}\) \(\text{[SP22343]}\) [题目描述] 给定一个整数 \( ...

  10. Winform中设置ZedGraph多条Y轴时与多条曲线一一对应

    场景 Winform中实现ZedGraph的多条Y轴(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1001322 ...