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

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:

 1 trigger GoodsTrigger on Goods__c (after insert) {
 2     if(trigger.isAfter) {
 3         if(trigger.isInsert) {
 4             List<Goods__c> goodsList = trigger.new;
 5             for(Goods__c goods : goodsList) {
 6                 goods.addError('测试错误提示信息');
 7             }
 8         }
 9     }
10 }

理论上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操作,发送邮件。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王大锤

github for Mac 教程

3296
来自专栏Android先生

20分钟教你使用hexo搭建github博客

备注:该教程基于Hexo 2.x版本,目前Hexo是3.x版本,照本教程实现有可能会出现404错误,笔者目前还未找时间去解决,待笔者找时间解决该问题后,再写一篇...

872
来自专栏Youngxj

YoungxjTools开源工具箱

答:项目本身支持站内站外跳转,添加新的工具箱,你只需要在网站根目录创建一个文件夹,在文件夹内部就是你的工具箱,只需要在头部插入

84926
来自专栏進无尽的文章

推送-远程通知推送教程

本文翻译自:raywenderlich.com,原文作者:Jack Wu,译者:JMStack

1062
来自专栏LeoXu的博客

[翻译]Ext JS 教程-MVC架构 原

大规模的客户端应用程序常常难于去编写、组织机构和维护。随着你加入更多的功能,并且投入更多的开发人员,它们渐渐趋向于失去控制。ExtJS 4 带来了一种新的不仅...

931
来自专栏腾讯移动品质中心TMQ的专栏

Appium:轻松玩转app+webview混合应用自动化测试

Appium这个听起来既生疏也熟悉的自动化测试工具,比起原生的UiAutomator可能是异常的不起眼,可是却是有自身独当一面的能力,可以完成许多高难度作业,完...

2.4K1
来自专栏進无尽的文章

Fastlane| 一句代码完成自动打包发布到蒲公英

第一个选项的意思是:自动截屏。这个功能能帮我们自动截取APP中的截图,并添加手机边框(如果需要的话) 第二个选项的意思是:自动发布beta版本用于TestFli...

1333
来自专栏散尽浮华

Linux下快速迁移海量文件的操作记录

有这么一种迁移海量文件的运维场景:由于现有网站服务器配置不够,需要做网站迁移(就是迁移到另一台高配置服务器上跑着),站点目录下有海量的小文件,大概100G左右,...

2497
来自专栏Fred Liang

Service Worker 实现 web 应用消息推送

Service Worker 是事件驱动的 worker,生命周期与页面无关,关联页面未关闭时,它也可以退出,没有关联页面时,它也可以启动.

3922
来自专栏云计算教程系列

在Ubuntu 16.04上安装OpenVAS 8

OpenVAS(开放式漏洞评估系统)是一个客户端/服务器架构,它常用来评估目标主机上的漏洞。OpenVAS是Nessus项目的一个分支,它提供的产品是完全地免费...

1552

扫码关注云+社区