Salesforce记录触发流DML错误处理:批量更新部分失败时的处理方案
Salesforce记录触发流实现局部失败处理(类似Try-Catch)
核心思路
Salesforce默认批量DML是原子性的,要么全成功要么全回滚。要实现“部分成功、部分失败单独处理”,就得把批量操作拆成单条可独立失败的处理,同时收集错误信息。
具体实现步骤
1. 配置流的触发方式
把Account的记录触发流设置为触发后更新(After Update),触发条件设为“特定字段被修改”,确保Account字段更新完成后再处理关联对象。
2. 获取关联的自定义对象记录
添加「获取记录」元素,查询当前Account关联的所有目标自定义对象记录,开启“允许集合存储多个值”,把查询结果存入集合变量(比如命名为relatedCustomRecords)。
3. 循环处理单条记录并捕获错误
添加「循环」元素,遍历relatedCustomRecords集合:
- 先把当前循环的记录复制到单条记录变量(比如
currentRecord) - 修改
currentRecord的状态字段为目标值 - 添加「更新记录」元素,选择“指定要更新的记录”并选中
currentRecord,必须开启高级设置里的“允许部分成功”——这个开关会让单条记录更新失败时,不中断整个流,继续处理下一条 - 紧接着添加「获取元素结果」元素,提取本次更新的成功状态和错误信息:
- 如果更新成功,可将记录加入
successRecords集合用于后续日志(可选) - 如果更新失败,把记录ID和错误信息拼接成字符串(比如
ID: 001XXXX, 错误原因: 验证规则「XX规则」触发),存入failureDetails文本集合
- 如果更新成功,可将记录加入
4. 发送失败通知邮件
添加「决策」元素,判断failureDetails集合是否不为空:
- 若存在失败记录,添加「发送电子邮件」元素,收件人选管理员,邮件主题设为“自定义对象批量更新失败通知”,正文把
failureDetails里的内容逐行列出,清晰展示每条失败记录的信息。
关键注意点
- “允许部分成功”是核心:没有这个设置,批量更新只要有一条失败就会全回滚,无法实现局部成功
- 流的执行限制:循环里的单条更新会占用DML次数,若关联记录数量超过流的DML限制(默认150次),可以考虑用Apex类配合流处理,但中小批量场景下流完全够用
- 错误信息的准确性:「获取元素结果」能拿到原生的错误描述,直接拼接即可,不用额外处理
内容的提问来源于stack exchange,提问作者Gaurav Dholakiya
相关产品推荐
相关产品推荐

