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 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Centos下MooseFS(MFS)分布式存储共享环境部署记录

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,分布式文...

3115
来自专栏电光石火

windows下安装redis

1、redis简介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、lis...

1707
来自专栏分布式系统和大数据处理

C#网络编程(基本概念和操作) - Part.1

C#网络编程系列文章计划简单地讲述网络编程方面的基础知识,由于本人在这方面功力有限,所以只能提供一些初步的入门知识,希望能对刚开始学习的朋友提供一些帮助。如果想...

843
来自专栏大闲人柴毛毛

Linux文件系统——全方位掌握

文件系统的特性 磁盘分区完毕后需要进行格式化,操作系统才能使用这个分区。 不同操作系统能够使用的文件系统是不同的,例如:Windows98以前使用FAT/F...

3509
来自专栏Python小白进阶之旅

13个web安全-python网络测试工具+白帽黑客必备,大神整理,小白可以先收藏起来

Python有很多完善可用的库,这里面就包含渗透测试工具,所以广大白帽黑客大多都使用Python语言,这样更有利于利用Python提供的这些库参与漏洞研究、逆向...

43610
来自专栏程序猿DD

微服务架构:Eureka参数配置项详解

来源:https://www.areatao.com/article/5b45718d7ab07c574d5888d0?from=timeline&isappi...

673
来自专栏企鹅号快讯

Redis

Redis介绍: (Redis)是一个基于 key-value 键值对的持久化数据库存储系统。支持多种数据结构,包括 string (字符串)、list (链表...

3757
来自专栏运维小白

parted分区GPT格式

fdisk分区工具,它的分区格式为MBR,特点是,最多分4个主分区,磁盘大小不能超过2T。 而GPT分区格式,突破了这些限制,它没有主分区、扩展分区、逻辑分区之...

2703
来自专栏xiaoheike

Elasticsearch Network Settings

Elasticsearch 缺省情况下是绑定 localhost。对于本地开发服务是足够的(如果你在相同机子上启动多个节点,它还可以形成一个集群),但是你需要配...

632
来自专栏即时通讯技术

新手入门:史上最全Web端即时通讯技术原理详解前言 学习交流 更多资料一、传统Web的通信原理二、传统通信方式实现IM应用需要解决的问题三、全双工低延迟的解决办法 五、WebSocket结束语

浏览器本身作为一个瘦客户端,不具备直接通过系统调用来达到和处于异地的另外一个客户端浏览器通信的功能。这和我们桌面应用的工作方式是不同的,通常桌面应用通过sock...

533

扫码关注云+社区