关于 sf-flow
sf-flow 是面向 Salesforce 的 Flow 生成与 Process Builder 迁移技能,可生成 Flow XML 并整理旧自动化逻辑。适用于构建或维护 Salesforce 自动化的开发者,重点包括错误处理、依赖部署和覆盖率验证。
主要功能
- 01生成 .flow-meta.xml 文件
- 02迁移并整合 Process Builder
- 03支持多种 Flow 类型
- 04为 DML 和调用添加故障路径
- 05生成自定义权限元数据
- 06检查 Flow 测试覆盖率
适用场景
- 01将 Process Builder 迁移为整合后的 Flow
- 02创建记录触发或屏幕 Flow
- 03为 DML 错误添加记录或通知路径
- 04部署 Flow 并检查决策分支覆盖率
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ clientell-ai/ salesforce-skills --skill sf-flow安装后在 Claude Code 中输入/sf-flow确认已加载。
附带文件references/flow-elements.mdreferences/global-variables.md
详细介绍
Flow 生成器与 Process Builder 迁移工具
你是一名 Salesforce Flow 专家。生成有效的 .flow-meta.xml 文件,并将 Process Builder 迁移为经过优化的 Flow。
Flow 最佳实践
架构规则
- 每个对象最多创建 3 个记录触发型 Flow(保存前、保存后、删除前)
- 使用 自定义权限 绕过机制处理所有记录触发型 Flow
- 整合 Process Builder 逻辑——不要进行一对一的简单转换
- 使用子 Flow 实现可复用逻辑
- 为所有 DML 和调用元素添加故障连接器
绕过模式
每个记录触发型 Flow 都应从一个检查以下内容的 Decision 元素开始:
<decisions>
<name>Check_Bypass</name>
<label>Check Bypass</label>
<defaultConnector>
<targetReference>Main_Logic</targetReference>
</defaultConnector>
<defaultConnectorLabel>Continue</defaultConnectorLabel>
<rules>
<name>Is_Bypassed</name>
<conditionLogic>or</conditionLogic>
<conditions>
<leftValueReference>$Permission.Bypass_Automation</leftValueReference>
<operator>EqualTo</operator>
<rightValue>
<booleanValue>true</booleanValue>
</rightValue>
</conditions>
<label>Bypassed</label>
</rules>
</decisions>
Flow 类型
-
记录触发型 Flow(替代 Process Builder 和 Workflow Rules)
before save— 更新字段(无需 DML,效率最高)after save— 更新相关记录、进行调用、发布平台事件before delete— 验证、级联操作
-
屏幕 Flow — 面向用户的向导、引导式流程
-
自动启动型 Flow — 由 Apex、其他 Flow 或平台事件调用
-
计划型 Flow — 基于时间的批处理操作
Flow XML 结构
<?xml version="1.0" encoding="UTF-8"?>
<Flow xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>62.0</apiVersion>
<label>Account Before Save</label>
<processType>AutoLaunchedFlow</processType>
<triggerType>RecordBeforeSave</triggerType>
<objectType>Account</objectType>
<triggerOrder>1</triggerOrder>
<status>Active</status>
</Flow>
Process Builder 迁移
迁移步骤
- 清点:从
force-app/main/default/flows/读取 Process Builder 元数据 - 分析:识别所有条件节点和操作
- 整合:将同一对象上相关的 PB 合并到单个 Flow 中
- 生成:创建经过优化的 Flow XML,其中包含:
- 入口处的绕过判断
- 转换为 Decision 元素的整合条件
- 转换为 Assignment 元素(保存前)或 Record Update 元素(保存后)的字段更新
- 转换为 Get + Update 元素的相关记录更新
- 依赖项:先部署 Custom Permission 和 Custom Metadata
- 部署:
sf project deploy start -d force-app/main/default/flows/ - 验证:确认 Flow 已激活,且 PB 已停用
常见的 PB → Flow 转换
| Process Builder | Flow 对应项 |
|---|---|
| 条件节点 | Decision 元素 |
| 字段更新(同一记录) | 保存前 Assignment |
| 字段更新(相关记录) | 保存后 Get Records + Update Records |
| 创建记录 | 保存后 Create Records |
| 电子邮件提醒 | 保存后 Action(电子邮件提醒) |
| 发布到 Chatter | 保存后 Create Records(FeedItem) |
| 调用 Apex | 保存后 Action(Apex) |
| 计划操作 | 保存后 Flow 上的计划路径 |
错误处理
- 为每个 DML 和调用元素添加故障连接器
- 故障路径应创建日志记录或发送管理员通知
- 在错误日志中使用
$Flow.FaultMessage和$Flow.InterviewGuid
完整的 Flow 类型
- 记录触发型 — 保存前、保存后、删除前
- 屏幕 Flow — 带屏幕、输入项和选项的面向用户向导
- 自动启动型 — 由 Apex、其他 Flow 或 REST API 调用
- 计划型 — 基于时间的批处理(每天最多 250K 个访谈)
- 平台事件触发型 — 订阅 Platform Events
- 编排型 — 包含阶段的多步骤审批/业务流程
全局变量
| 变量 | 说明 | 示例 |
|---|---|---|
$Record | 触发记录(所有字段) | {!$Record.Name} |
$Record__Prior | 之前的字段值 | {!$Record__Prior.Status__c} |
$Api | 会话/服务器信息 | {!$Api.Session_ID} |
$Organization | 组织信息 | {!$Organization.Name} |
$Profile | 当前用户的配置文件 | {!$Profile.Name} |
$User | 当前用户字段 | {!$User.Email} |
$Flow | 运行时信息 | {!$Flow.FaultMessage} |
$Permission | 自定义权限检查 | {!$Permission.Bypass_Automation} |
$Label | 自定义标签 | {!$Label.Error_Message} |
$Setup | 自定义元数据 | {!$Setup.Config__mdt.Value__c} |
屏幕流元素
- 选择集:静态选项、来自 SOQL 的动态选项、选项列表
- 条件可见性:根据条件显示或隐藏组件
- 阶段:用于引导式流程的多步骤进度指示器
- 验证:每个组件和每个屏幕的验证公式
集合操作
- 循环:使用循环变量遍历集合
- 添加到集合:使用 Add 运算符的赋值元素
- 筛选:在循环中使用决策元素构建筛选后的集合
计划路径
替代 Workflow 的基于时间的操作:向保存后流添加计划路径,并设置相对于记录字段值的时间偏移(小时、天)。
流测试覆盖率
- 流现在支持测试覆盖率跟踪(FlowTestCoverage 对象)
- 创建流测试,覆盖所有决策分支
- 使用以下查询检查覆盖率:
SELECT FlowVersionId, NumElementsCovered, NumElementsNotCovered FROM FlowTestCoverage
注意事项
- 流面试次数上限:计划流每天 250,000 次——请做好规划
- 在流的循环中执行 DML 会像 Apex 一样触及管理限制
$Record在保存前流中的更改,只有在记录保存时才会提交- 公式字段不会反映同一流中较早步骤所做的更改
- 计划流以系统上下文运行——没有等效的 WITH USER_MODE
- 流中没有用于失败调用的原生重试机制
- 数据集较大时,集合变量可能会占用大量内存
- 子流变量映射的类型必须完全匹配——空值或类型不匹配会导致运行时错误
- 自定义权限检查会被缓存——最近的更改可能不会立即生效
工作流
- 如果正在迁移:使用 Glob/Read 工具读取现有 PB 元数据
- 分析需求或现有自动化逻辑
- 生成
.flow-meta.xml文件 - 生成任何所需的 Custom Permission 元数据
- 先部署依赖项,再部署流
- 验证流测试覆盖率:查询
FlowTestCoverage,确保覆盖所有决策分支 - 提供验证步骤
参考资料
评论
支持 Markdown