mcpField
S
sf-flow

sf-flow

github.com/clientell-ai开发21101 次安装33 周前更新
代码仓库

关于 sf-flow

sf-flow 是面向 Salesforce 的 Flow 生成与 Process Builder 迁移技能,可生成 Flow XML 并整理旧自动化逻辑。适用于构建或维护 Salesforce 自动化的开发者,重点包括错误处理、依赖部署和覆盖率验证。

主要功能

  1. 01生成 .flow-meta.xml 文件
  2. 02迁移并整合 Process Builder
  3. 03支持多种 Flow 类型
  4. 04为 DML 和调用添加故障路径
  5. 05生成自定义权限元数据
  6. 06检查 Flow 测试覆盖率

适用场景

  1. 01将 Process Builder 迁移为整合后的 Flow
  2. 02创建记录触发或屏幕 Flow
  3. 03为 DML 错误添加记录或通知路径
  4. 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 类型
  1. 记录触发型 Flow(替代 Process Builder 和 Workflow Rules)

    • before save — 更新字段(无需 DML,效率最高)
    • after save — 更新相关记录、进行调用、发布平台事件
    • before delete — 验证、级联操作
  2. 屏幕 Flow — 面向用户的向导、引导式流程

  3. 自动启动型 Flow — 由 Apex、其他 Flow 或平台事件调用

  4. 计划型 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 迁移

迁移步骤
  1. 清点:从 force-app/main/default/flows/ 读取 Process Builder 元数据
  2. 分析:识别所有条件节点和操作
  3. 整合:将同一对象上相关的 PB 合并到单个 Flow 中
  4. 生成:创建经过优化的 Flow XML,其中包含:
    • 入口处的绕过判断
    • 转换为 Decision 元素的整合条件
    • 转换为 Assignment 元素(保存前)或 Record Update 元素(保存后)的字段更新
    • 转换为 Get + Update 元素的相关记录更新
  5. 依赖项:先部署 Custom Permission 和 Custom Metadata
  6. 部署:sf project deploy start -d force-app/main/default/flows/
  7. 验证:确认 Flow 已激活,且 PB 已停用
常见的 PB → Flow 转换
Process BuilderFlow 对应项
条件节点Decision 元素
字段更新(同一记录)保存前 Assignment
字段更新(相关记录)保存后 Get Records + Update Records
创建记录保存后 Create Records
电子邮件提醒保存后 Action(电子邮件提醒)
发布到 Chatter保存后 Create Records(FeedItem)
调用 Apex保存后 Action(Apex)
计划操作保存后 Flow 上的计划路径

错误处理

  • 为每个 DML 和调用元素添加故障连接器
  • 故障路径应创建日志记录或发送管理员通知
  • 在错误日志中使用 $Flow.FaultMessage 和 $Flow.InterviewGuid
完整的 Flow 类型
  1. 记录触发型 — 保存前、保存后、删除前
  2. 屏幕 Flow — 带屏幕、输入项和选项的面向用户向导
  3. 自动启动型 — 由 Apex、其他 Flow 或 REST API 调用
  4. 计划型 — 基于时间的批处理(每天最多 250K 个访谈)
  5. 平台事件触发型 — 订阅 Platform Events
  6. 编排型 — 包含阶段的多步骤审批/业务流程
全局变量
变量说明示例
$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
  • 流中没有用于失败调用的原生重试机制
  • 数据集较大时,集合变量可能会占用大量内存
  • 子流变量映射的类型必须完全匹配——空值或类型不匹配会导致运行时错误
  • 自定义权限检查会被缓存——最近的更改可能不会立即生效

工作流

  1. 如果正在迁移:使用 Glob/Read 工具读取现有 PB 元数据
  2. 分析需求或现有自动化逻辑
  3. 生成 .flow-meta.xml 文件
  4. 生成任何所需的 Custom Permission 元数据
  5. 先部署依赖项,再部署流
  6. 验证流测试覆盖率:查询 FlowTestCoverage,确保覆盖所有决策分支
  7. 提供验证步骤

参考资料

  • 流元素 — 所有元素类型、连接器和故障处理的完整 XML 参考
  • 全局变量 — 包含所有可访问字段的完整 $Variable 参考

评论

支持 Markdown