当前位置: 首页 > news >正文

Salesforce 执行顺序(Order of Execution)详解

Salesforce 执行顺序(Order of Execution)详解

Salesforce 执行顺序(Order of Execution)是每个开发人员必须掌握的核心概念,它定义了 Salesforce 在记录被插入、更新、删除或恢复时处理事件的具体步骤。理解这一流程对于避免触发器、验证规则和自动化流程之间的冲突至关重要,能确保业务逻辑按预期执行。

什么是执行顺序?

执行顺序指的是当记录被保存(插入或更新)时,Salesforce 遵循的一系列处理步骤。这个过程确保所有业务规则、验证和自动化逻辑以一致的顺序应用,避免数据不一致或逻辑冲突。

完整执行顺序

以下是记录被保存时发生的详细事件序列:

1. 初始化(Initialize)

  • 系统加载数据库中的原始记录(针对更新操作)或初始化新记录(针对插入操作)。
  • 验证用户是否有执行当前操作的权限(如对象级权限、字段级权限)。
  • 合并触发器上下文变量(Trigger.oldTrigger.new 等),供后续步骤使用。

2. 预验证触发器(Before Triggers)

  • 执行 before 触发器(声明为 before insertbefore update 的触发器)。
  • 这是修改记录字段的最早时机,此时数据尚未经过系统验证。
  • 常见用途:设置默认值、标准化数据格式(如统一邮箱格式)。
trigger AccountBeforeTrigger on Account (before insert, before update) {for (Account acc : Trigger.new) {// 为新记录设置默认行业if (Trigger.isInsert && acc.Industry == null) {acc.Industry = 'Technology';}// 标准化网站格式(添加 http://)if (acc.Website != null && !acc.Website.startsWith('http')) {acc.Website = 'https://' + acc.Website;}}
}

3. 系统验证(System Validations)

  • 执行基础数据验证:
    • 检查必填字段是否已填写
    • 验证字段格式(如邮箱、电话格式)
    • 确保数据类型匹配(如数字字段不包含文本)
    • 检查记录所有权规则和角色层级权限
  • 执行 验证规则(Validation Rules)
  • 若任何验证失败,整个保存过程终止并返回错误信息。

4. 记录级操作(Record-Level Actions)

  • 生成 自动编号(Auto-number) 字段值(仅插入操作)。
  • 更新系统字段(如 CreatedDateLastModifiedDate)。
  • 执行 字段默认值(Field Defaults)(未被触发器覆盖的字段)。
  • 处理 主从关系字段(如查找字段引用的记录是否存在)。

5. 数据库操作(Database Operations)

  • 将记录写入数据库(此时记录已保存,但尚未触发后续自动化)。
  • 对于更新操作,系统会创建记录的历史版本(供后续审计追踪)。

6. 后操作触发器(After Triggers)

  • 执行 after 触发器(声明为 after insertafter update 的触发器)。
  • 此时记录已保存到数据库,可获取系统生成的字段(如 Id、自动编号)。
  • 常见用途:同步数据到外部系统、创建关联记录(如商机创建后自动生成任务)。
trigger OpportunityAfterTrigger on Opportunity (after insert) {List<Task> tasks = new List<Task>();for (Opportunity opp : Trigger.new) {// 为新商机创建跟进任务tasks.add(new Task(Subject = '跟进商机:' + opp.Name,WhatId = opp.Id,ActivityDate = Date.today().addDays(3),Priority = 'High'));}insert tasks; // 批量插入任务
}

7. 流程和自动化(Processes and Automation)

  • 执行 Workflow 规则(包括字段更新、邮件提醒等)。
  • 执行 Process Builder 流程。
  • 执行 Flow 自动流程(如记录触发的 Flow)。
  • 注意:这些自动化可能再次修改记录,导致触发新一轮的验证和触发器(称为“递归”)。

8. 权限重新验证(Re-validation)

  • 若自动化流程修改了记录,系统会重新执行:
    • 验证规则(Validation Rules)
    • 字段级安全检查
    • 必要时再次执行 before 触发器(仅当记录被修改时)

9. 最终更新(Final Updates)

  • 系统更新所有因自动化流程产生的字段变更。
  • 更新相关的汇总字段(如父对象的汇总字段)。
  • 处理 roll-up summary 字段 的计算。

10. 后续操作(Post-Commit Actions)

  • 执行 异步操作
    • 触发 @future 方法
    • 执行 Queueable 任务
    • 发布 Platform Event
  • 发送 电子邮件通知(Workflow 或 Process Builder 触发的邮件)。
  • 这些操作在记录成功保存后执行,即使后续步骤失败,记录也不会回滚。

11. 触发后续事件(Subsequent Events)

  • 若当前操作导致其他记录被修改(如级联更新),系统会对这些记录触发新的执行顺序。
  • 例如:更新父账户后,触发子联系人的更新流程。

关键注意事项

  1. 递归问题:自动化流程修改记录可能导致触发器和验证规则重新执行,需通过代码控制(如使用静态变量)避免无限循环。

  2. 事务边界:整个执行顺序在一个事务中完成,任何步骤失败都会导致全部操作回滚(异步操作除外,它们在事务提交后执行)。

  3. 字段可见性:触发器可以修改用户无权限的字段,但流程和 Workflow 受字段级安全限制。

  4. 删除操作的特殊性:删除记录时,执行顺序会简化(无字段验证),主要执行 before delete 和 after delete 触发器、删除相关记录等。

实际应用示例

假设创建一个新的 Opportunity 记录,执行顺序如下:

  1. 初始化新 Opportunity 记录,验证用户权限。
  2. Before insert 触发器设置默认 CloseDate。
  3. 系统验证必填字段(如 Name、StageName)和验证规则。
  4. 生成 Opportunity 的 Id 和系统字段。
  5. 将记录写入数据库。
  6. After insert 触发器创建关联的 Task。
  7. Process Builder 检查金额,若超过 10 万则自动分配给销售经理。
  8. 重新验证修改后的记录(如负责人变更)。
  9. 更新账户的汇总金额(若有 roll-up 字段)。
  10. 触发 @future 方法同步数据到外部 ERP。
  11. 发送新商机通知邮件。

理解 Salesforce 执行顺序是设计可靠自动化和触发器的基础。通过掌握这一流程,开发人员可以准确预测代码和配置的执行结果,避免常见的集成冲突和数据不一致问题。

http://www.dtcms.com/a/391177.html

相关文章:

  • Linux内核进程管理子系统有什么第五十七回 —— 进程主结构详解(53)
  • Vue 记账凭证模块组件
  • ORACLE-数据库闪回
  • 【Python】集合
  • 【Leetcode hot 100】437.路径总和 Ⅲ
  • 神经网络学习笔记16——高效卷积神经网络架构汇总(SqueezeNet、MobileNet、ShuffleNet、EfficientNet、GhostNet)
  • 解码阳光电源技术壁垒:以IPD和数字化驱动模块化创新的研发体系
  • ARM体系结构—架构—指令集—寄存器—工作模式
  • 自适应全变分模型的图像平滑去噪与边缘保留算法
  • 主流前端框架比较
  • 前端接口参数序列化
  • 精细调光,稳定驱动:AP5165B 在低压LED照明中的卓越表现
  • EasyGBS如何实现企业园区视频监控一体化管理?
  • Ledit 16.3 版图软件全面系统性教程
  • Linux的DTS配置信息
  • 线程池全面解析:核心原理、参数配置与实践指南
  • 【Linux】自定义协议——网络计算器实现
  • Ubuntu 安装的docker-compose拉取镜像失败问题处理办法
  • 第35篇:AI前沿:具身智能(Embodied AI)与通用人工智能(AGI)
  • LangChain 入门到精通企业项目实践之 LangChain 聊天模型
  • crush情感分析项目01
  • 免费插件分享 | Missing References Search
  • ECU OTA测试
  • Jenkins运维之路(Slave容器节点)
  • Amazon Lambda + API Gateway 实战,无服务器架构入门
  • 芯片管脚的源电流与漏电流
  • Django+ARIMA微博舆情预警系统 SnowNLP情感分析 Echarts可视化 机器学习 大数据项目✅
  • SIMetrix 8.30仿真蓝牙天线上的无源滤波器
  • [x-cmd] 升级 x-cmd 指南
  • AXI4-Stream总线流控握手实战经验总结