mcpField
B
building-omnistudio-omniscript

building-omnistudio-omniscript

github.com/forcedotcom开发1.1k2.4k 次安装1 天前更新
代码仓库

关于 building-omnistudio-omniscript

用于按需求创建和验证 OmniStudio OmniScript 的技能,面向构建多步骤引导流程的开发者。它涵盖元素配置、数据流与依赖检查,以及评分、部署和激活。

主要功能

  1. 01按需求生成多步骤 OmniScript
  2. 02配置元素与 PropertySetConfig
  3. 03检查数据流和组件依赖
  4. 04按六类指标验证并评分
  5. 05部署并激活版本

适用场景

  1. 01创建收集输入并提交数据的引导流程
  2. 02将 Integration Procedures 和 DataRaptors 接入流程
  3. 03部署前检查引用和配置问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/forcedotcom/sf-skills --skill building-omnistudio-omniscript

安装后在 Claude Code 中输入/building-omnistudio-omniscript确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

CREDITS.md
assets/
omni-process-element-step.json
omni-process-element-text-block.json
omni-process-omniscript.json
references/
best-practices.md
element-types.md
scripts/
check-duplicate-omniscript.sh
cli-reference.sh
deploy-omniscript.sh

详细介绍

building-omnistudio-omniscript:OmniStudio OmniScript 创建与验证

专业的 OmniStudio OmniScript 构建器,用于创建声明式、分步骤的引导式数字体验。OmniScript 类似于 OmniStudio 中的 Screen Flow:它是多步骤交互流程,可收集输入、协调服务器端逻辑(Integration Procedure、DataRaptor),并向用户呈现结果——全程无需编写代码。

快速参考

评分:6 个类别共 120 分。阈值:✅ 90+(部署)| ⚠️ 67-89(审核)| ❌ <67(阻止——需要修复)


范围

  • 范围内:根据需求创建 OmniScript,选择元素并设计 PropertySetConfig,分析依赖项(Integration Procedure、DataRaptor),追踪数据流,按 120 分制验证评分,以及部署和激活
  • 范围外:构建 FlexCard(使用 building-omnistudio-flexcard),直接创建 Integration Procedure(使用 building-omnistudio-integration-procedure),映射完整依赖树(使用 analyzing-omnistudio-dependencies),将元数据部署到组织(使用 deploying-metadata)

必需输入

构建前收集以下信息:

输入说明默认值
Type流程类别(例如,ServiceRequest、Enrollment)无——必填
SubType具体变体(例如,NewCase、UpdateAddress)无——必填
LanguageOmniScript 的区域设置English
Purpose此 OmniScript 引导的业务流程无——必填
Target org部署所用的组织别名当前默认组织
Data sources要查询或更新的对象/API根据需求确定

核心职责

  1. OmniScript 生成:根据需求创建结构完善的 OmniScript,为每个步骤选择合适的元素类型
  2. 元素设计:为每个元素配置 PropertySetConfig JSON,确保数据绑定、验证和条件逻辑正确
  3. 依赖分析:部署前映射所有对 Integration Procedure、DataRaptor 和嵌入式 OmniScript 的引用
  4. 数据流分析:追踪 OmniScript JSON 结构中的数据流——从预填充到用户输入,再到最终保存操作

关键:编排顺序

analyzing-omnistudio-dependencies → building-omnistudio-datamapper → building-omnistudio-integration-procedure → building-omnistudio-omniscript → building-omnistudio-flexcard(当前位置:building-omnistudio-omniscript)

OmniScript 会调用 Integration Procedure 和 DataRaptor。请先构建它们。FlexCard 可能会启动 OmniScript,因此应在之后构建 FlexCard。开始前,使用 analyzing-omnistudio-dependencies 映射完整的依赖树。


关键要点

要点详情
Type/SubType/Language 三元组唯一标识一个 OmniScript。三个值均为必填,并共同构成复合键。例如:Type=ServiceRequest、SubType=NewCase、Language=English
PropertySetConfig包含所有元素配置的 JSON 数据块,包括布局、数据绑定、验证规则和条件可见性。实际逻辑都在这里
Core 命名空间OmniProcess 的 IsIntegrationProcedure = false(等价于 OmniProcessType='OmniScript')。元素是子级 OmniProcessElement 记录
元素层级结构元素使用 Level/Order 字段构成树形结构。Level 0 = 步骤,Level 1+ = 步骤内的元素。Order 决定同一层级内的顺序
版本管理可以存在多个版本;每个 Type/SubType/Language 三元组只能有一个激活版本。通过 IsActive 字段激活
Data JSONOmniScript 会在所有步骤中传递同一个 JSON 数据结构。元素通过合并字段语法读取和写入此共享 JSON

工作流设计(5 阶段模式)

阶段 1:需求收集

开始构建前,请评估替代方案:OmniScripts 最适合复杂的多步骤引导流程。对于简单的单屏数据录入,请考虑使用 Screen Flows。对于无需交互的数据展示,请考虑使用 FlexCards。

询问用户以收集以下信息:

  • Type:流程类别(例如,ServiceRequest、Enrollment、ClaimSubmission)
  • SubType:具体变体(例如,NewCase、UpdateAddress、FileAppeal)
  • Language:通常为 English,除非需要支持多种语言
  • Purpose:此 OmniScript 要引导用户完成的业务流程
  • Target org:用于部署的组织别名
  • Data sources:需要查询或更新的对象/API

然后:检查现有 OmniScripts 以避免重复,找出可复用的 Integration Procedures 或 DataRaptors,并梳理依赖链。

阶段 2:设计与元素选择

设计每个步骤,并根据交互模式选择合适的元素类型。

容器元素
元素类型用途关键配置
StepUI 元素组的顶层容器;每个 Step 都是向导中的一个页面chartLabel、knowledgeOptions、show(条件可见性)
Conditional Block根据条件显示或隐藏一组元素conditionType、show 表达式
Loop Block遍历数据列表,并为每个项目渲染元素loopData(指向数组的 JSON 路径)
Edit Block用于表格数据内联编辑的容器editFields、dataSource
输入元素
元素类型用途关键配置
Text单行文本输入label、placeholder、pattern(正则表达式验证)
Text Area多行文本输入label、maxLength、rows
Number带可选格式设置的数字输入label、min、max、step、format
Date日期选择器label、dateFormat、minDate、maxDate
Date/Time日期和时间选择器label、dateFormat、timeFormat
Checkbox布尔值切换label、defaultValue
Radio用于单选的单选按钮组label、options(静态或由数据驱动)
Select下拉选择label、options、optionSource(静态/数据)
Multi-select多项选择label、options、maxSelections
Type Ahead搜索/自动补全输入label、dataSource、searchField、minCharacters
Signature签名采集区label、penColor、backgroundColor
File文件上传label、maxFileSize、allowedExtensions
Currency按区域设置格式的货币输入label、currencyCode、min、max
Email带格式验证的电子邮件输入label、placeholder
Telephone带掩码的电话号码输入label、mask、placeholder
URL带格式验证的 URL 输入label、placeholder
Password带掩码的文本输入label、minLength
Range滑块输入label、min、max、step
Time时间选择器label、timeFormat
显示元素
元素类型用途关键配置
Text Block静态内容展示(支持 HTML)textContent、HTMLTemplateId
Headline分区标题text、level(h1-h6)
Aggregate计算汇总值展示aggregateExpression、format
Disclosure可展开/折叠的内容label、defaultExpanded
Image图片展示imageURL、altText
Chart数据可视化chartType、dataSource
操作元素
元素类型用途关键配置
DataRaptor Extract 操作从 Salesforce 提取数据bundle、inputMap、outputMap
DataRaptor Load 操作将数据推送到 Salesforcebundle、inputMap
Integration Procedure 操作调用服务器端 Integration ProcedureipMethod(Type_SubType)、inputMap、outputMap、remoteOptions
远程操作调用 Apex @RemoteAction 或 RESTremoteClass、remoteMethod、inputMap
导航操作页面导航或重定向targetType、targetId、URL
DocuSign 信封操作触发 DocuSign 信封templateId、recipientMap
电子邮件操作发送电子邮件emailTemplateId、recipientMap
逻辑元素
元素类型用途关键配置
设置值变量赋值和数据转换elementValueMap(键值对)
验证输入验证规则和自定义消息validationFormula、errorMessage
公式使用公式表达式计算值expression、dataType
提交操作提交收集的数据postMessage、preTransformBundle、postTransformBundle
阶段 3:生成与验证

运行 scripts/check-duplicate-omniscript.sh <Type> <SubType> <Language> <org>,确认不存在重复的 Type/SubType/Language。

构建 OmniScript:

  1. 创建 OmniProcess 记录,设置 Type、SubType、Language 和 OmniProcessType='OmniScript'
  2. 为每个步骤创建 OmniProcessElement 子记录(Level=0)
  3. 为步骤中的每个元素创建 OmniProcessElement 子记录(Level=1+,按 Order 字段排序)
  4. 为每个元素配置 PropertySetConfig JSON
  5. 将操作元素连接到其 Integration Procedure / DataRaptor

验证(严格模式):

  • 阻止:缺少 Type/SubType/Language、OmniScript 嵌入循环、IP/DataRaptor 引用失效、缺少必需的 PropertySetConfig 字段
  • 警告:步骤不含元素、输入元素未配置验证、操作缺少错误处理、未使用的数据路径、元素嵌套过深(>4 层)

验证报告格式(6 类评分,0-120):

Score: 102/120 ---- Very Good
-- Design & Structure: 22/25 (88%)
-- Data Integration: 18/20 (90%)
-- Error Handling: 17/20 (85%)
-- Performance: 18/20 (90%)
-- User Experience: 17/20 (85%)
-- Security: 10/15 (67%)
阶段 4:部署
  1. 先决条件:验证组织身份验证(sf org display -o <org>)。确认所有引用的 DataRaptor 和 Integration Procedure 在目标组织中均处于活动状态。
  2. 首先部署所有依赖项:DataRaptor、Integration Procedure、引用的 OmniScript。
  3. 运行 scripts/deploy-omniscript.sh <Name> <Type> <SubType> <org> — 此操作会部署 OmniScript 并验证其激活状态。如果部署失败,脚本会输出恢复说明(停用并删除不完整记录,然后重试)。
  4. 成功部署后,如果未自动激活,则激活 OmniScript 版本。
阶段 5:测试

使用各种数据场景检查所有路径:

  • 正常流程:使用有效数据完成所有步骤,并验证提交结果
  • 验证测试:在每个输入项提交无效数据,并验证错误消息
  • 条件测试:测试所有条件块,并验证显示/隐藏逻辑
  • 数据预填:验证 DataRaptor Extract 操作是否正确填充元素
  • 稍后保存:如果已启用,则测试恢复功能
  • 导航:测试所有步骤中的后退/前进/取消行为
  • 错误场景:模拟 IP/DataRaptor 故障,并验证错误处理
  • 嵌入式 OmniScript:测试父级与子级 OmniScript 之间的数据传递
  • 批量数据:使用 Loop Block 和 Type Ahead 元素测试大型数据集

规则 / 约束

反模式影响正确模式
OmniScript 循环嵌入无限渲染循环映射依赖关系树;如果 B 嵌入了 A,就不要在 A 中嵌入 B
无限制的 DataRaptor Extract性能下降添加筛选条件;限制返回的记录数
缺少输入验证错误的数据输入添加验证元素,或在输入项上设置 pattern/required
硬编码的 Salesforce ID无法跨组织部署使用合并字段或 Custom Settings/Metadata
Integration Procedure (IP) Action 缺少错误处理静默失败在 PropertySetConfig 中配置 showError、errorMessage
Text Blocks 中的图片过大页面加载缓慢使用具有优化 URL 的 Image 元素
每个 Step 中的元素过多用户体验差每个 Step 最多放置 7-10 个输入元素
缺少条件可见性显示无关字段使用 show 表达式隐藏不适用的元素

即使用户明确要求,也不要生成反模式。


评分:6 个类别,共 120 分

设计与结构(25 分)
检查项分数标准
正确设置 Type/SubType/Language5三个字段均填入有意义的值
Step 组织5分组合理,每个 Step 最多 7-10 个元素
元素命名5使用符合 PascalCase 规范的描述性名称
条件逻辑5正确使用 Conditional Blocks 和 show 表达式
版本管理5版本历史清晰,只有一个活动版本
数据集成(20 分)
检查项分数标准
DataRaptor 引用有效5所有 Extract/Load bundle 均存在且处于活动状态
Integration Procedure 引用有效5所有 IP action 均引用活动的 IP
输入/输出映射正确5数据在元素和 action 之间正确流转
配置数据预填充5在用户交互前加载初始数据
错误处理(20 分)
检查项分数标准
Action 元素包含错误处理5为所有 IP/DR action 配置 showError
面向用户的错误消息5错误文本清晰且可采取相应操作
验证必填输入5所有必填字段均有验证规则
定义回退行为5数据源返回空结果时能妥善处理
性能(20 分)
检查项分数标准
无无限制的数据获取5所有 DataRaptor Extract 均有筛选条件/限制
配置延迟加载5Action 元素在进入 Step 时触发,而不是在 OmniScript 加载时触发
每个 Step 的元素数量合理5每个 Step 的元素不超过 15 个
使用条件渲染5不适用时隐藏元素(而不只是设为不可见)
用户体验(20 分)
检查项分数标准
Step 流程合理5Step 按照自然的任务顺序排列
输入标签和帮助文本5所有输入项均有清晰的标签和上下文帮助
导航控件5根据需要配置 Back、Next、Cancel、Save for Later
响应式布局5为移动设备和桌面设备的断点配置元素
安全性(15 分)
检查项分数标准
客户端 JSON 中不包含敏感数据5密码、SSN、令牌保留在服务端
IP action 使用服务端处理5敏感逻辑放在 Integration Procedures 中,而不是客户端 OmniScript 中
遵循字段级访问权限5数据访问权限与用户配置文件/权限集一致

CLI 命令

完整的命令参考请参见 scripts/cli-reference.sh。常用命令:

# List active OmniScripts
sf data query -q "SELECT Id,Name,Type,SubType,Language,IsActive,VersionNumber FROM OmniProcess WHERE IsActive=true AND OmniProcessType='OmniScript' LIMIT 50" -o <org>

# Query elements for a specific OmniScript
sf data query -q "SELECT Id,Name,ElementType,Level,Order FROM OmniProcessElement WHERE OmniProcessId='<id>' ORDER BY Level,Order LIMIT 200" -o <org>

# Check OmniScript versions
sf data query -q "SELECT Id,VersionNumber,IsActive,LastModifiedDate FROM OmniProcess WHERE Type='<Type>' AND SubType='<SubType>' AND OmniProcessType='OmniScript' ORDER BY VersionNumber DESC LIMIT 10" -o <org>

跨技能集成

来源技能到构建 OmniStudio OmniScript适用情形
analyzing-omnistudio-dependencies-> building-omnistudio-omniscript“构建 OmniScript 前先分析依赖项”
building-omnistudio-datamapper-> building-omnistudio-omniscript“DataRaptor 已就绪,构建使用它的 OmniScript”
building-omnistudio-integration-procedure-> building-omnistudio-omniscript“IP 已就绪,将它接入 OmniScript 操作”
来源技能到技能适用情形
building-omnistudio-omniscript-> building-omnistudio-flexcard“构建用于启动此 OmniScript 的 FlexCard”
building-omnistudio-omniscript-> deploying-metadata“将 OmniScript 部署到目标组织”
building-omnistudio-omniscript-> analyzing-omnistudio-dependencies“部署前映射完整的依赖关系树”
building-omnistudio-omniscript-> building-omnistudio-integration-procedure“需要为此 OmniScript 操作新建 IP”
building-omnistudio-omniscript-> building-omnistudio-datamapper“需要用于数据预填充的 DataRaptor”

注意事项

问题解决方法
多语言 OmniScript为每种语言创建单独版本,并共享 Type/SubType;使用翻译工作台处理标签
嵌入式 OmniScript 数据传递将父级数据 JSON 键映射到子级 OmniScript 输入中的 prefillJSON;测试数据往返传递
大型 Loop Block 数据集对 DataRaptor 结果进行分页或限制;考虑在 Integration Procedure (IP) 中进行服务器端筛选
FlexCard 弹出层中的 OmniScript确保 FlexCard 传递所需的上下文数据;测试弹出层尺寸
Community/Experience Cloud 部署确认 Experience Builder 中有 OmniScript 组件;检查访客用户权限
保存并恢复(稍后保存)配置 saveNameTemplate、saveExpireInDays;使用部分数据测试恢复
版本冲突激活新版本前停用旧版本;同一 Type/SubType/Language 组合绝不能有两个激活版本
OmniScript 中的自定义 LWC将 LWC 注册为 OmniScript 兼容;遵循 omniscript-lwc 命名空间约定
带命名空间的组织如果部署到受管理的 OmniStudio 包组织中,请为捆绑包名称和 API 名称添加相应的命名空间前缀(例如 omnistudio__)
创建时无法设置 OmniProcessTypeOmniProcessType 根据 IsIntegrationProcedure 计算得出(OmniScripts 中为 false);不要直接设置

常见运行时问题排查(元素未渲染、数据未预填充、IP 操作静默失败),请参阅 references/best-practices.md 第 8 节。


备注

API:66.0 | 模式:严格(警告会阻止操作) | 评分:如果评分 < 67,则阻止部署

必需的上游技能:building-omnistudio-datamapper、building-omnistudio-integration-procedure

可选技能:deploying-metadata、building-omnistudio-flexcard、analyzing-omnistudio-dependencies

以编程方式创建 OmniScripts:使用 REST API(sf api request rest --method POST --body @file.json)。必需字段:Name、Type、SubType、Language、VersionNumber。OmniScripts 默认 IsIntegrationProcedure=false——请勿直接设置 OmniProcessType(该值由系统计算)。sf data create record --values 标志无法处理 PropertySetConfig 等 JSON 文本区域字段。请通过 REST API 为每个 Step 和元素创建子级 OmniProcessElement 记录。


输出要求

此技能生成的交付物:

  • OmniScript JSON(assets/omni-process-omniscript.json 模板)——可通过 REST API 创建的 OmniProcess 记录
  • 步骤元素 JSON(assets/omni-process-element-step.json 模板)——每个步骤对应的 OmniProcessElement 记录(Level=0)
  • 元素 JSON(assets/omni-process-element-text-block.json 等)——子元素对应的 OmniProcessElement 记录(Level=1+)
  • 验证报告——涵盖 6 个类别、满分 120 分,并给出通过/警告/阻止阈值结果

参考文件索引

文件阅读时机
references/element-types.md阶段 2——元素选择:为任何元素类型配置 PropertySetConfig 前阅读
references/best-practices.md阶段 2-5——设计模式:阅读以了解步骤设计、数据预填、验证、导航、性能和故障排除指南
assets/omni-process-omniscript.json阶段 3——生成:通过 REST API 构建 OmniScript 时,将其用作 OmniProcess 记录模板
assets/omni-process-element-step.json阶段 3——生成:将其用作步骤(Level=0)OmniProcessElement 记录模板
assets/omni-process-element-text-block.json阶段 3——生成:将其用作文本块元素模板;其他显示元素类型可据此调整
scripts/check-duplicate-omniscript.sh阶段 3——运行此脚本,再创建 OmniScript,以确认不存在相同 Type/SubType/Language 的记录
scripts/deploy-omniscript.sh阶段 4——运行此脚本以部署 OmniScript 并验证其激活状态;包含前置检查和错误恢复
scripts/cli-reference.sh任意阶段——查询、检索、部署和验证 OmniScript 的完整 CLI 命令参考

评论

支持 Markdown