用途
sf-industry-commoncore-omniscript 是面向 Salesforce OmniStudio 的 OmniScript 构建与校验技能。OmniScript 是 OmniStudio 中对应 Screen Flow 的能力:以声明式、分步式方式创建引导型数字体验,即多步骤、可交互的流程,用于收集用户输入、编排服务端逻辑(Integration Procedures、DataRaptors),并向用户呈现结果,全程无需编写代码。该技能适用于构建引导式数字体验、多步骤表单或交互式流程的场景。
主要能力
核心职责包括:
- OmniScript 生成:根据需求创建结构良好的 OmniScript,为每个步骤选择合适的元素类型。
- 元素设计:为每个元素配置 PropertySetConfig JSON,包含正确的数据绑定、校验与条件逻辑。
- 依赖分析:在部署前梳理对所有 Integration Procedures、DataRaptors 和嵌入式 OmniScript 的引用。
- 数据流分析:追踪数据在 OmniScript JSON 结构中的流动——从预填、用户输入到最终保存动作。
该技能覆盖的元素类型包括容器元素(Step、Conditional Block、Loop Block、Edit Block)、输入元素(Text、Text Area、Number、Date、Date/Time、Checkbox、Radio、Select、Multi-select、Type Ahead、Signature、File、Currency、Email、Telephone、URL、Password、Range、Time)、展示元素(Text Block、Headline、Aggregate、Disclosure、Image、Chart)、动作元素(DataRaptor Extract/Load Action、Integration Procedure Action、Remote Action、Navigate Action、DocuSign Envelope Action、Email Action)以及逻辑元素(Set Values、Validation、Formula、Submit Action)。
关键概念
- Type/SubType/Language 三元组:唯一标识一个 OmniScript,三个值均必填,共同构成复合键。例如 Type=ServiceRequest、SubType=NewCase、Language=English。
- PropertySetConfig:包含元素全部配置的 JSON 块,涵盖布局、数据绑定、校验规则、条件可见性,真正的逻辑所在。
- 核心命名空间:OmniProcess 中 IsIntegrationProcedure = false(等价于 OmniProcessType='OmniScript'),元素为其子记录 OmniProcessElement。
- 元素层级:元素使用 Level/Order 字段构成树形结构。Level 0 为 Steps,Level 1+ 为步骤内元素,Order 决定同一层级内的顺序。
- 版本管理:同一 Type/SubType/Language 三元组可存在多个版本,但只能有一个处于激活状态,通过 IsActive 字段激活。
- 数据 JSON:OmniScript 在所有步骤间传递单一 JSON 数据结构,元素通过合并字段语法读写这一共享 JSON。
使用方式(五阶段工作流)
阶段 1 需求收集:构建前先评估替代方案——复杂多步引导流程适合 OmniScript,简单单屏数据录入考虑 Screen Flow,仅展示数据而无交互考虑 FlexCard。需向用户收集 Type、SubType、Language、用途、目标 org、数据源等信息,并检查已有 OmniScript 避免重复,识别可复用的 Integration Procedures 或 DataRaptors,梳理依赖链。
阶段 2 设计与元素选择:设计每个步骤并选择与交互模式匹配的元素类型。
阶段 3 生成与校验:校验采用严格模式,阻止项(BLOCK)包括缺失 Type/SubType/Language、循环嵌入 OmniScript、断裂的 IP/DataRaptor 引用、缺失必需的 PropertySetConfig 字段;警告项(WARN)包括无元素的步骤、无校验的输入元素、动作缺少错误处理、未使用的数据路径、嵌套超过 4 层。评分报告按 6 类别 0–120 分输出。
阶段 4 部署:先部署全部依赖(DataRaptors、Integration Procedures、被引用的 OmniScript),再检索或部署 OmniScript 元数据,部署成功后激活版本并验证。
阶段 5 测试:覆盖正常路径、校验测试、条件测试、数据预填、暂存续填、导航、错误场景、嵌入式 OmniScript、批量数据等场景。
编排顺序
调用顺序为:omnistudio-analyze → datamapper → integration-procedure → omniscript(本技能)→ flexcard。OmniScript 会消费 Integration Procedures 和 DataRaptors,因此必须先构建它们;FlexCard 可能启动 OmniScript,应在之后构建。开始前应使用 omnistudio-analyze 梳理完整依赖树。
评分(120 分,6 类别)
- 设计与结构 25 分:Type/SubType/Language 设置、步骤组织、元素命名、条件逻辑、版本管理。
- 数据集成 20 分:DataRaptor 引用、Integration Procedure 引用、输入/输出映射、数据预填。
- 错误处理 20 分:动作错误处理、面向用户的错误消息、必填项校验、回退行为。
- 性能 20 分:无无界数据请求、懒加载、每步元素数量、条件渲染。
- 用户体验 20 分:步骤流程、输入标签与帮助文本、导航控件、响应式布局。
- 安全 15 分:客户端 JSON 不含敏感数据、IP 动作使用服务端处理、遵守字段级访问。
阈值:90+ 可部署,67–89 需复核,低于 67 阻止部署(必须修复)。
CLI 命令
列出激活的 OmniScript: sf data query -q "SELECT Id,Name,Type,SubType,Language,IsActive,VersionNumber FROM OmniProcess WHERE IsActive=true AND OmniProcessType='OmniScript'" -o <org>
查询指定 OmniScript 的元素: sf data query -q "SELECT Id,Name,ElementType,PropertySetConfig,Level,Order FROM OmniProcessElement WHERE OmniProcessId='<id>' ORDER BY Level,Order" -o <org>
检索元数据:sf project retrieve start -m OmniScript:<Name> -o <org>
部署元数据:sf project deploy start -m OmniScript:<Name> -o <org>
检查版本: sf data query -q "SELECT Id,VersionNumber,IsActive,LastModifiedDate FROM OmniProcess WHERE Type='<Type>' AND SubType='<SubType>' AND OmniProcessType='OmniScript' ORDER BY VersionNumber DESC" -o <org>
生成护栏(强制)
需避免的反模式包括:循环嵌入 OmniScript(导致无限渲染循环)、无界 DataRaptor Extract(性能下降)、缺失输入校验(脏数据录入)、硬编码 Salesforce ID(跨 org 部署失败)、无错误处理的 IP 动作(静默失败)、Text Block 中使用大图(页面加载慢)、单步骤元素过多(用户体验差)、缺失条件可见性(显示无关字段)。即使被明确要求,也不得生成反模式。
跨技能集成
从 omnistudio-analyze、datamapper、integration-procedure 可流转至本技能(依赖就绪后构建 OmniScript);从本技能可流转至 flexcard(构建启动本 OmniScript 的 FlexCard)、sf-deploy(部署至目标 org)、omnistudio-analyze(部署前梳理完整依赖树)、integration-procedure(为本 OmniScript 动作新建 IP)、datamapper(为数据预填新建 DataRaptor)。
边界情况
多语言 OmniScript:按 Language 创建独立版本,共享 Type/SubType,使用翻译工作台处理标签。嵌入式 OmniScript 数据传递:通过 prefillJSON 将父数据 JSON 键映射到子 OmniScript 输入,并测试数据往返。大型 Loop Block 数据集:分页或限制 DataRaptor 结果,考虑在 IP 中做服务端过滤。Community/Experience Cloud 部署:确认 Experience Builder 中组件可用,检查访客用户权限。Save & Resume:配置 saveNameTemplate、saveExpireInDays,用部分数据测试续填。版本冲突:激活新版本前先停用旧版本,同一三元组绝不可有两个激活版本。
调试要点
OmniScript 不渲染 → 检查激活状态与元素层级;数据未预填 → 验证 DataRaptor Extract 输出映射与 JSON 路径;IP 动作失败 → 先独立检查 IP,再验证输入映射;步骤未显示 → 检查条件可见性表达式。
依赖与配置
必需依赖:sf-industry-commoncore-datamapper、sf-industry-commoncore-integration-procedure。可选依赖:sf-deploy、sf-industry-commoncore-flexcard、sf-industry-commoncore-omnistudio-analyze。API:66.0。模式:严格(警告即阻止)。评分:低于 67 分阻止部署。参考文档见 references/ 目录中的元素类型与最佳实践。以编程方式创建 OmniScript 时使用 REST API(sf api request rest --method POST --body @file.json)。
限制
关于该技能的收费、价格、具体平台支持的完整细节,暂未提供。