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:
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 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)的更多相关文章
- salesforce 零基础学习(十九)Permission sets 讲解及设置
Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...
- salesforce 零基础学习(十八)WorkFlow介绍及用法
说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...
- salesforce零基础学习(九十九)Salesforce Data Skew(数据倾斜)
本篇参考: https://developer.salesforce.com/blogs/engineering/2013/04/managing-lookup-skew-to-avoid-recor ...
- salesforce 零基础学习(十六)Validation Rules & Date/time
上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...
- salesforce零基础学习(九十九)Git 在salesforce项目中的应用(vs code篇)
本篇参考: https://code.visualstudio.com/docs/editor/versioncontrol https://git-scm.com/doc https://git-s ...
- salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...
- salesforce 零基础学习(六十八)http callout test class写法
此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...
- salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现
项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...
- salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见
项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...
随机推荐
- JSP-表单元素示例
<%@ page language="java" pageEncoding="UTF-8"%><%@ page import="ja ...
- 使用jQuery快速高效制作网页特效-----------------------------之jQuery事件与动画
1.基础事件 分为三个事件 1.1 window事件 所谓window事件,就是当用户执行某些会影响浏览器的操作时,而触发的事件. 1.2 鼠标事件 鼠标事件顾名思义就是当用户在文档上移动或单击鼠标时 ...
- Swift 包管理器命令行使用
1.swift -version //swift 版本查看 2.swift build //swift工程编译 3.swift package generate-xcodeproj //创建Xcode ...
- asp.net mvc源码分析-Route的GetRouteData
我知道Route这里东西应该算路由,这里把它放到mvc里面有些不怎么合适,但是我想大家多数遇到路由都是在mvc的时候吧.首先我们还是来看看GetRouteData方法吧 [csharp] public ...
- 浅谈HTML5中的浮动问题
浮动是我们在前端页面中经常会用到的一种布局方式.那什么是浮动呢? 首先我们先来看一下它的定义.浮动是指让元素脱离文档标准流(脱标),按照指定的方向去横向排列.浮动的取值有两个,分别是float:lef ...
- 升级后 VTE 类虚拟终端不工作
故障现象 运行 vte 终端,如 gnome terminal.sakura 等光标不出来.xterm 可以运行. 在 xterm 终端中运行 gnome terminal 出现一下错误: grant ...
- 容斥原理及SQL in关键字在EF中的应用
突然意识到文字的重要性,于是开始写了第一个篇博客,博客目的紧紧为记录,以便温故. 同时也希望抛砖能达到引玉的作用,欢迎各位来发表自己的感想与想法,以此达到相互学习促进! 背景: 在做百度地图电子围栏的 ...
- jsp想js,action传值
1.struts2 action如何向JSP的JS函数传值 action中定义变量 public class TestAction extends ActionSupport implements S ...
- Leetcode_001_TwoSum_求和为固定数的两个数的索引
题目描述 给定一个整型数组,在数组中找出两个数使这两个数的和为给定数,从小到大输出这两个数在数组中的位置(我们可以假定输出结果只有一个).例如,输入:N={1,4,8,20}, target=1 ...
- IntelliJ Idea和IntelliJ webstrm 常用快捷键
Ctrl+Shift + Enter,语句完成"!",否定完成,输入表达式时按 "!"键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shif ...