用途
sf-industry-commoncore-integration-procedure 用于在 Salesforce OmniStudio 中创建和验证 Integration Procedure(集成过程,IP)。它面向服务端流程编排场景,帮助把多个数据源和逻辑步骤组合为声明式的多步骤操作。
适用场景包括:需要声明式多步骤编排、包含分支、错误处理以及混合数据源(Salesforce 对象、外部 API 或两者兼有)的流程。技能也提示,在构建前应评估替代方案——有时单个 DataRaptor、Apex 服务或 Flow 是更合适的选择。
主要能力
- IP 生成:根据需求创建结构良好的 Integration Procedure,选择正确的元素类型并连接输入/输出。
- 元素组合:将 DataRaptor 动作、Remote Action、HTTP 调用、条件块、循环以及嵌套 IP 调用组装成协调的编排。
- 依赖分析:在部署前验证所引用的 DataRaptor、Apex 类和嵌套 IP 是否存在且处于激活状态。
- 错误处理:在所有修改数据的步骤中强制使用 try/catch 模式、条件回滚和响应验证。
技能支持的主要元素类型及其 PropertySet 键包括:DataRaptor Extract Action(读取 Salesforce 数据,bundle)、DataRaptor Load Action(写入 Salesforce 数据,bundle)、DataRaptor Transform Action(数据塑形/映射,bundle)、Remote Action(调用 Apex 类方法,remoteClass、remoteMethod)、Integration Procedure Action(调用嵌套 IP,ipMethod 格式为 Type_SubType)、HTTP Action(外部 API 调用,path、method)、Conditional Block(分支逻辑)、Loop Block(遍历集合)、Set Values(赋值变量/常量)。
命名约定为 [Type]_[SubType],使用 PascalCase;IP 内元素名称应清晰描述其动作,例如 GetAccountDetails、ValidateInput、CreateOrderRecord。
使用方式
技能按 5 个阶段推进:
- 需求收集:确定要编排的业务流程、目标对象和数据源、Type/SubType 命名以及目标 org 别名;通过 CLI 查询现有 IP,识别可复用的 DataRaptor/Data Mapper,并借助 sf-industry-commoncore-omnistudio-analyze 审查依赖组件。
- 设计与元素选择:选择元素类型,设计元素链,使每一步的输出自然流入下一步输入,并显式映射输出。
- 生成与验证:构建包含正确 Type/SubType、有序元素链、显式输入/输出映射、错误处理和条件分支的 IP 定义,并以严格模式校验。
- 部署:先部署前置的 DataRaptor/Data Mapper,再部署 IP,在目标 org 中激活(IsActive=true),并通过 CLI 查询验证。
- 测试:先单独测试每个元素,再测试完整链;覆盖单元、集成、错误路径、批量与端到端场景。
相关 CLI 命令(保持原样):
- 查询激活的 IP:
sf data query -q "SELECT Id,Name,Type,SubType,IsActive FROM OmniProcess WHERE IsActive=true AND IsIntegrationProcedure=true" -o <org> - 查询全部 IP(含未激活):
sf data query -q "SELECT Id,Name,Type,SubType,IsActive,LastModifiedDate FROM OmniProcess WHERE IsIntegrationProcedure=true ORDER BY LastModifiedDate DESC" -o <org> - 检索 IP:
sf project retrieve start -m OmniIntegrationProcedure:<Name> -o <org> - 部署 IP:
sf project deploy start -m OmniIntegrationProcedure:<Name> -o <org> - 先做 dry-run 校验:
sf project deploy start -m OmniIntegrationProcedure:<Name> -o <org> --dry-run
创建 Data API 记录时注意:创建 OmniProcess 记录需设置 IsIntegrationProcedure = true,OmniProcessType 由该布尔值计算得出,不能直接设置;Name 是 OmniProcess 的必填字段(标准 OmniStudio 文档中未记录)。使用 sf api request rest --method POST --body @file.json 进行创建,因为 sf data create record --values 无法处理 PropertySetConfig 这类 JSON textarea 字段。必需字段包括 Name、Type、SubType、Language、VersionNumber、IsIntegrationProcedure=true,之后通过 REST API 为每个动作步骤创建 OmniProcessElement 子记录,全部元素创建完成后再设置 IsActive=true 激活。
关键要点
- 编排顺序:sf-industry-commoncore-omnistudio-analyze -> sf-industry-commoncore-datamapper -> sf-industry-commoncore-integration-procedure -> sf-industry-commoncore-omniscript -> sf-industry-commoncore-flexcard。IP 引用的 Data Mapper 必须先存在;IP 必须激活后 OmniScript 或 FlexCard 才能调用。
- 链式调用:IP 通过 Integration Procedure Action 元素调用其他 IP,一个步骤的输出通过响应映射供给下一步输入,尽量保持线性数据流。
- 响应映射:每个元素的输出在其元素名下以命名空间形式存在于响应 JSON 中,使用 %elementName:keyPath% 语法在下游输入中引用上游输出。
- 缓存:IP 支持平台缓存,用于读多的编排,在过程的 PropertySet 中设置 cacheType 和 cacheTTL;避免缓存执行 DML 的过程。
- 版本管理:Type/SubType 组合唯一标识一个 IP,可用 SubType 做版本控制(例如 Type=AccountOnboarding,SubType=v2),同一 Type/SubType 同时只能有一个版本处于激活状态。
- Core 命名空间辨别:OmniStudio Core 把 Integration Procedure 和 OmniScript 都存储在 OmniProcess 表中,必须用 IsIntegrationProcedure = true 或 OmniProcessType = 'Integration Procedure' 过滤,否则查询会返回混合结果。
评分与限制
评分采用 110 分制,覆盖 6 个类别:设计结构(20 分)、数据操作(25 分)、错误处理(20 分)、性能(20 分)、安全(15 分)、文档(10 分)。阈值:90 分以上可部署;67-89 分建议复核;低于 67 分阻止部署,必须修复。
严格模式下的阻断项包括:缺少 Type/SubType、循环 IP 调用、无错误处理的 DML、引用不存在的 DataRaptor/Apex 类。警告项包括:无 LIMIT 的无界提取、只读 IP 缺少缓存、PropertySetConfig 中硬编码 ID、未使用元素、缺少元素描述。技能明确要求,即使被明确要求,也不生成反模式,例如循环 IP 调用、无错误处理的 DML、无界 DataRaptor 提取、PropertySetConfig 中硬编码 Salesforce ID、本可并行却串行的调用、缺少响应验证。
其他限制与边界情况:外部 API 超时应为 HTTP Action 元素设置超时值并实现重试或优雅降级;大批量集合输入到 Loop Block 应设置批大小并测试实际数据量;Type/SubType 与现有 IP 冲突时应先查询再创建,使用 SubType 版本化避免冲突;混合命名空间(Vlocity 与 Core)时需确认 org 命名空间,因为元素属性名在不同包中不同。调试要点:IP 未执行需检查 IsActive 标志和 Type/SubType 匹配;元素被跳过需检查条件块逻辑和输入数据形态;超时需检查 DataRaptor 查询范围与 HTTP 超时设置;部署失败需确认所有引用组件已部署且激活。
依赖(可选):sf-deploy、sf-industry-commoncore-datamapper、sf-industry-commoncore-omnistudio-analyze。API 版本 66.0,严格模式(警告会阻断),评分低于 67 分阻止部署。许可证为 MIT License,Copyright (c) 2026 David Ryan (weytani)。