salesforce开发中,我们会对object进行很多的操作,比如对object设置字段的必填性唯一性等,设置validation rule实现一下相关的字段的逻辑校验,设置workflow实现某个字段的更改或者发送邮件等,设置trigger实现before和after的数据相关逻辑处理,设置sharing setting实现数据share,设置master detail的rollup summary字段等。当这些操作铺天盖地的上来时,你还搞得清楚当新增/修改一条记录以后到底怎么运行的吗?有了下面的图以后(从国外博客盗的图,忘记了链接,不好意思),相信可以以后对于这些操作的处理顺序变得游刃有余。

1.当数据进行新增/修改操作时,从DB中获取原始数据;

2.从request中加载新数据的value;

3.如果请求来自标准的UI,UI上面可以自动check相关的pagelayout上的必填性校验等,相关字段必填性配置可以放在page layout做限制;

4.如果请求来自自定义的VF页面或者apex进行匿名块操作,则先忽略相关pagelayout上的必填性校验,执行before trigger内容;

5.运行系统的校验,比如字段级别的必填性,validation rule;

6.当通过validation rule以后,执行save操作,此时数据保存到DB,不过事务上还没有commit,在after trigger及以后如果此obj有addError类似操作,会导致数据的rollback,简单demo:

 trigger GoodsTrigger on Goods__c (after insert) {
if(trigger.isAfter) {
if(trigger.isInsert) {
List<Goods__c> goodsList = trigger.new;
for(Goods__c goods : goodsList) {
goods.addError('测试错误提示信息');
}
}
}
}

理论上after trigger以前数据已经保存到DB上了,但是因为after操作对object进行了addError操作,导致事务回滚,添加失败。

7.执行after trigger操作;

8.通过sharing rule分配相关数据共享操作;

9.执行workflow rules,workflow rules可以执行field update,如果进行了field update以后会重新执行before trigger,workflow rules可以设置field update只是进行一次还是每次更改都会进入workflow rules,这里根据需求好好选择,避免和trigger作用发生死循环;

10.如果有rollup summary字段,更新rollup summary;

11.提交事务,此时才真正事务commit,7-10期间 如果有addError类似操作便会使数据rollback;

12.如果有email send操作,发送邮件。

总结:了解数据处理的顺序无论对初学者还是有经验的人来说都是必要的,因为有的时候,因为执行顺序的问题可能导致意想不到的错误发生。千里之行,始于足下,打好基础方能放眼未来。如果篇中有描述错误的地方欢迎指出,有问题欢迎留言。

salesforce 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)的更多相关文章

  1. salesforce 零基础学习(十九)Permission sets 讲解及设置

    Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...

  2. salesforce 零基础学习(十八)WorkFlow介绍及用法

    说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...

  3. salesforce零基础学习(九十九)Salesforce Data Skew(数据倾斜)

    本篇参考: https://developer.salesforce.com/blogs/engineering/2013/04/managing-lookup-skew-to-avoid-recor ...

  4. salesforce 零基础学习(十六)Validation Rules & Date/time

    上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...

  5. salesforce零基础学习(九十九)Git 在salesforce项目中的应用(vs code篇)

    本篇参考: https://code.visualstudio.com/docs/editor/versioncontrol https://git-scm.com/doc https://git-s ...

  6. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

  7. salesforce 零基础学习(六十八)http callout test class写法

    此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...

  8. salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现

    项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...

  9. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

随机推荐

  1. django-查询语句(一)

    1.model 假设我们的model如下: 某个JobType下有很多Job. class JobType(models.Model): name = models.CharField(max_len ...

  2. Javascript学习九

    计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...

  3. dns服务搭建

    DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的. 域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器 ...

  4. C# 知识回顾 - 装箱与拆箱

    装箱与拆箱 目录 生活中的装箱与拆箱 C# 的装箱与拆箱 值类型和引用类型 装箱 拆箱 生活中的装箱与拆箱    我们习惯了在网上购物,这次你想买本编程书 -- <C 语言从入门到放弃> ...

  5. Javascript基础 - js中曾经忽略的知识点

    深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...

  6. 强大的健身软件——Keep

    Keep是一款具有社交属性的健身工具类产品.用户可利用碎片化的时间,随时随地选择适合自己的视频健身课程,进行真人同步训练.完成后还可以"打卡"晒成就.   你可根据器械.部位.难度 ...

  7. 1349: [Baltic2006]Squint

    1349: [Baltic2006]Squint Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 427  Solved: 248[Submit][Stat ...

  8. Node软件的安装

    1.官网网址:https://nodejs.org/en/ 左边被推荐,右边最新 下载完成一键下一步直接安装,当然,如果你想修改安装目录的话当然没问题,注意:不要有英文目录 2.Window+r打开命 ...

  9. 简学Python第六章__class面向对象编程与异常处理

    Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群  群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...

  10. 【SF】开源的.NET CORE 基础管理系统系列导航

    SF是一套基于ASP.NET Core MVC+EFCore+Bootstrap开发出来的基础管理系统,源代码完全开源,可以帮助你解决C#.NET项目中重复编码的繁琐工作,让开发人员远离加班! SF ...