关于 modeling-omnistudio-epc-catalog
用于 Salesforce Industries CME EPC 的产品目录建模技能,可创建 Product2 产品、属性和产品子项组成的优惠套餐。它以 DataPack 模板为基础,并校验定价及相关元数据的一致性。
主要功能
- 01创建 EPC Product2 产品和优惠
- 02建模属性、默认值与有效值
- 03使用 Product Child Item 组合套餐
- 04生成定价及配套元数据
- 05按六类标准进行 120 分评分
适用场景
- 01生成包含子产品的优惠套餐 DataPack
- 02为产品配置属性和默认值
- 03审查套餐、定价与相关元数据的一致性
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill modeling-omnistudio-epc-catalog安装后在 Claude Code 中输入/modeling-omnistudio-epc-catalog确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/attribute-assignment-template.jsoncompiled-attribute-overrides-template.jsoncompletion-block-template.txtdecomposition-relationships-template.jsonassets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.jsonBusiness-Internet-Premium-FTTC_CompiledAttributeOverrides.jsonBusiness-Internet-Premium-FTTC_DataPack.jsonBusiness-Internet-Premium-FTTC_DecompositionRelationships.jsonBusiness-Internet-Premium-FTTC_ObjectFieldAttributes.jsonBusiness-Internet-Premium-FTTC_OrchestrationScenarios.jsonBusiness-Internet-Premium-FTTC_OverrideDefinitions.jsonBusiness-Internet-Premium-FTTC_ParentKeys.jsonBusiness-Internet-Premium-FTTC_PricebookEntries.jsonBusiness-Internet-Premium-FTTC_PriceListEntries.jsonBusiness-Internet-Premium-FTTC_ProductChildItems.jsonBusiness-Internet-Premium-FTTC_RuleAssignments.jsonassets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.jsonBusiness-Internet-Pro-VPL_DataPack.jsonBusiness-Internet-Pro-VPL_DecompositionRelationships.jsonBusiness-Internet-Pro-VPL_ObjectFieldAttributes.jsonBusiness-Internet-Pro-VPL_OrchestrationScenarios.jsonBusiness-Internet-Pro-VPL_ParentKeys.jsonBusiness-Internet-Pro-VPL_PricebookEntries.jsonBusiness-Internet-Pro-VPL_PriceListEntries.jsonBusiness-Internet-Pro-VPL_ProductChildItems.jsonassets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.jsonSamsung-Galaxy-S22-Bundle_DataPack.jsonSamsung-Galaxy-S22-Bundle_DecompositionRelationships.jsonSamsung-Galaxy-S22-Bundle_ObjectFieldAttributes.jsonSamsung-Galaxy-S22-Bundle_OrchestrationScenarios.json详细介绍
modeling-omnistudio-epc-catalog:CME EPC 产品与优惠建模
Salesforce Industries CME EPC 专家建模器,用于创建基于 Product2 的目录条目、分配可配置属性,并通过 Product Child Item 关系构建优惠套餐。
此技能针对 DataPack 风格的元数据编写进行了优化。请使用 assets/ 中的规范模板集:
assets/product2-offer-template.jsonassets/attribute-assignment-template.jsonassets/product-child-item-template.jsonassets/pricebook-entries-template.jsonassets/price-list-entries-template.jsonassets/object-field-attributes-template.jsonassets/orchestration-scenarios-template.jsonassets/decomposition-relationships-template.jsonassets/compiled-attribute-overrides-template.jsonassets/override-definitions-template.jsonassets/parent-keys-template.json
assets/examples/ 下还提供了其他打包示例,并按优惠类型整理:
assets/examples/samsung-galaxy-s22-bundle/— 套餐优惠示例assets/examples/business-internet-premium-fttc-simple-offer/— 简单优惠示例assets/examples/business-internet-pro-vpl-simple-offer/— 简单优惠示例assets/examples/static-ip-simple-offer/— 简单优惠示例
examples/business-internet-plus-bundle/ 文件夹包含一个生成的套餐示例,并附有分步记录。
根目录下的 assets/ 文件夹包含用于编写套餐的规范基线模板集。
范围
- 范围内:创建和审查 EPC Product2 记录、Product Child Item、属性元数据、优惠套餐、定价条目、分解与编排工件,以及 DataPack JSON 负载
- 范围外:OmniScript/FlexCard/Integration Procedure 设计(请使用
building-omnistudio-omniscript、building-omnistudio-flexcard或building-omnistudio-integration-procedure),Apex 业务逻辑实现(请使用generating-apex),部署流水线故障排查(请使用deploying-metadata)
快速参考
- 主要对象:
Product2(EPC 产品和优惠记录) - 属性数据:
%vlocity_namespace%__AttributeMetadata__c、%vlocity_namespace%__AttributeDefaultValues__c和%vlocity_namespace%__AttributeAssignment__c - 优惠套餐组成:
%vlocity_namespace%__ProductChildItem__c - 优惠标记:
%vlocity_namespace%__SpecificationType__c = "Offer"和%vlocity_namespace%__SpecificationSubType__c = "Bundle" - 配套套餐工件:价格手册条目、价格表条目、对象字段属性、编排场景、分解关系、编译属性覆盖、覆盖定义和父键
评分:6 个类别共 120 分。
阈值:>= 95 可部署 | 70-94 需要审查 | < 70 阻止并修复。
术语表:EPC = 企业产品目录 | CME = 通信、媒体与能源 | DataPack = Vlocity JSON 部署工件 | PCI = ProductChildItem
资产模板集
创建套餐负载时,请使用根目录下 assets/ 中的模板:
product2-offer-template.jsonattribute-assignment-template.jsonproduct-child-item-template.jsonpricebook-entries-template.jsonprice-list-entries-template.jsonobject-field-attributes-template.jsonorchestration-scenarios-template.jsondecomposition-relationships-template.jsoncompiled-attribute-overrides-template.jsonoverride-definitions-template.jsonparent-keys-template.json
如需其他实际应用变体,请使用 assets/examples/ 下各示例对应的文件夹。
核心职责
- 产品创建:创建 EPC Product2 记录,并确保命名、生命周期日期、状态和分类字段保持一致。
- 属性建模:定义基于类别的属性、默认值、有效值集、显示顺序和必填标记。
- 套餐建模:使用
%vlocity_namespace%__ProductChildItem__c记录组合包含子产品的报价,并明确数量规则。 - 配套元数据生成:从同一报价基线生成并对齐所有相关套餐文件(定价、对象字段属性、编排/分解、覆盖项、父级键)。
- DataPack 一致性:确保记录源键、全局键、查找对象和命名空间字段在部署时保持内部一致。
调用规则(必需)
当提示意图符合以下任一条件时,路由至此技能:
-
创建产品套餐:
- 用户要求创建/构建/生成/建模 EPC 报价套餐。
- 用户要求设置带有 Product Child Items 的 Product2 报价。
- 用户要求根据模板/示例生成套餐 DataPack JSON 工件。
-
为现有产品套餐评分或审查:
- 用户要求为现有 EPC 套餐评分/评估/验证/审计。
- 用户要求对现有 Product2/ProductChildItem (PCI)/属性负载应用 120 分评分标准。
- 用户要求指出套餐元数据的风险、质量差距或修复建议。
指令优先级:将这两种意图视为 modeling-omnistudio-epc-catalog 的直接触发条件,即使提示很简短且未提及 EPC。
工作流(创建/审查)
阶段 0:前提条件
继续之前,请验证:
- 已启用 EPC 的 Salesforce Industries 组织
- 已在 sf CLI 中进行身份验证的组织别名 — 运行
sf org display --target-org <alias>进行确认 - 已确定命名空间模型:
%vlocity_namespace%、vlocity_cmt或 Core
如果未满足任何前提条件,请在继续之前要求用户提供组织别名或命名空间。
阶段 1:确定目录意图
询问:
- 产品类型:规格产品或报价套餐
- 领域分类体系:Family、Type/SubType、类别路径和渠道
- 属性要求:必填/可选、选项列表值、默认值
- 套餐组成:子产品、数量限制、可选还是必需
- 目标组织命名空间模型:
%vlocity_namespace%、vlocity_cmt或 Core
幂等性检查:如果提供了 ProductCode,请在生成工件前确认不存在匹配的 Product2:
sf data query --query "SELECT Id, Name, ProductCode FROM Product2 WHERE ProductCode = '<code>'" --target-org <alias>
如果找到匹配项,请在继续之前询问用户这是全新记录,还是要更新现有记录。
阶段 1A:完整捆绑包的澄清问题(必需)
在生成新的优惠捆绑包负载之前,请先提出澄清问题,直到确认所有必需输入。
必需的澄清清单:
- 优惠身份
- 优惠名称和
ProductCode是什么? - 这是全新优惠,还是对现有 Product2 优惠的更新?
- 优惠名称和
- 目录分类
- Family、Type/SubType 和渠道/销售场景的值是什么?
- 现在是否应设置
SpecificationType=Offer和SpecificationSubType=Bundle?
- 生命周期和可用性
EffectiveDate和SellingStartDate是什么?- 创建时
IsActive和%vlocity_namespace%__IsOrderable__c是否应为 true?
- 子产品组成
- 包含哪些子产品(每个产品的名称/代码)?
- 对于每个子产品,必需/可选语义和顺序是什么?
- 每个子产品的数量行为
MinQuantity、MaxQuantity和默认Quantity是多少?- 是否应对每条明细强制执行
%vlocity_namespace%__MinMaxDefaultQty__c?
- 属性模型
- 哪些属性是必需的,哪些是可选的?
- 有效值、默认值、显示类型和显示顺序是什么?
- 定价和配套制品
- 是否现在生成价格手册和价格清单条目?
- 是否应在同一请求中包含编排/分解/覆盖/父级键文件?
- 命名空间和键
- 应使用哪种命名空间约定(
%vlocity_namespace%、vlocity_cmt或 Core)? - 是否有需要保留的现有全局键/源键?
- 应使用哪种命名空间约定(
如果必需清单中的任何项目尚未回答,请先提出有针对性的后续问题,不要生成最终捆绑包文件。
阶段 2:构建 Product2 主干
对于每条新的 EPC 记录,定义:
NameProductCode(唯一、稳定且与环境无关)%vlocity_namespace%__GlobalKey__c(稳定的 UUID 样式键)%vlocity_namespace%__SpecificationType__c和%vlocity_namespace%__SpecificationSubType__c%vlocity_namespace%__Status__c和日期字段(EffectiveDate、SellingStartDate)IsActive和%vlocity_namespace%__IsOrderable__c
使用 assets/product2-offer-template.json 作为基准结构。
阶段 3:添加属性
需要属性时:
- 填充
%vlocity_namespace%__AttributeMetadata__c类别和productAttributes记录。 - 填充
%vlocity_namespace%__AttributeDefaultValues__c,建立属性代码到默认值的映射。 - 创建
%vlocity_namespace%__AttributeAssignment__c记录,包含:- 类别关联
- 属性关联
- UI 显示类型(下拉菜单等)
- 有效值和默认值标记
使用 assets/attribute-assignment-template.json 作为分配基准。
阶段 4:构建优惠捆绑包
对于优惠:
- 将父级
Product2记录保留为优惠(SpecificationType=Offer、SpecificationSubType=Bundle)。 - 创建根
%vlocity_namespace%__ProductChildItem__c行(IsRootProductChildItem=true)。 - 按组件添加子行,包含:
- 父级和子级引用
- 顺序和行号
- 最小/最大/默认数量行为(
MinMaxDefaultQty、MinQuantity、MaxQuantity、Quantity)
- 仅当行为与继承/默认行为不同时,才使用覆盖行。
使用 assets/product-child-item-template.json 作为子级关系结构。
对于完整的捆绑包负载,还需保持一致并包含:
assets/pricebook-entries-template.jsonassets/price-list-entries-template.jsonassets/object-field-attributes-template.jsonassets/orchestration-scenarios-template.jsonassets/decomposition-relationships-template.jsonassets/compiled-attribute-overrides-template.jsonassets/override-definitions-template.jsonassets/parent-keys-template.json
阶段 4B:生成配套元数据文件
当用户要求生成一个套件时,请将所有配套文件作为一个完整、一致的集合一并生成/更新:
pricebook-entries-template.json和price-list-entries-template.json- 确保 Product2 GlobalKey/ProductCode 引用与父级优惠保持一致。
object-field-attributes-template.json- 确保对象类引用和字段映射与同一优惠模型保持一致。
orchestration-scenarios-template.json和decomposition-relationships-template.json- 确保分解和编排工件与套件子项保持一致。
compiled-attribute-overrides-template.json和override-definitions-template.json- 确保覆盖键和引用与属性元数据及分配保持一致。
parent-keys-template.json- 确保父级关联值与生成的工件键保持同步。
强制规则:除非用户明确要求限制文件范围,否则在用户请求完整套件负载时,不得只生成部分文件。
阶段 5:验证并交付
读取 assets/completion-block-template.txt,填写每个字段以生成交付摘要块。
输出预期
对于完整优惠套件请求,将生成以下文件:
| 文件模式 | 内容 |
|---|---|
*_DataPack.json | Product2 优惠记录 |
*_AttributeAssignments.json | 属性类别和分配负载 |
*_ProductChildItems.json | 根级和子级 ProductChildItem (PCI) 行 |
*_PricebookEntries.json | 标准和自定义价格手册条目 |
*_PriceListEntries.json | 价格清单条目 |
*_ObjectFieldAttributes.json | 对象字段映射 |
*_OrchestrationScenarios.json | 编排元数据 |
*_DecompositionRelationships.json | 分解元数据 |
*_CompiledAttributeOverrides.json | 编译后的属性覆盖负载 |
*_OverrideDefinitions.json | 覆盖定义负载 |
*_ParentKeys.json | 父级键关联 |
对于规格产品(非套件)请求,只需生成 DataPack、AttributeAssignments、PricebookEntries 和 PriceListEntries 文件。
如果生成任何文件失败,请立即停止。列出截至目前已成功生成的所有文件,并告知用户在重试完整套件前删除不完整文件集——不完整套件会导致 DataPack 导入时出现 GlobalKey 不匹配。除非用户确认已删除不完整文件集且可以开始全新尝试,否则不要生成剩余文件。
易错点
| 问题 | 解决方案 |
|---|---|
| 属性默认值不在有效值列表中 | 确保默认值存在于 values[] 数组中 — cart 会在运行时拒绝无效默认值 |
| 缺少根 ProductChildItem 行 | 缺少 IsRootProductChildItem=true 时,优惠套餐遍历会失败 — 务必先创建根行 |
| 同一负载中混用命名空间约定 | 选择一种命名空间风格(%vlocity_namespace% 或 vlocity_cmt),并在套餐中的所有文件中保持一致 |
| 同一属性类别中显示顺序重复 | 会导致 UI 排序冲突 — 使用间隔递增的值(10、20、30),以便日后插入而不发生冲突 |
ProductCode 包含环境后缀 | 会破坏跨 org 引用 — 移除 _DEV、_UAT、_PROD 后缀 |
| 配套文件使用不同的优惠名称生成 | 键不匹配会导致 DataPack 导入失败 — 使用相同的基准优惠名称和 GlobalKey 生成所有配套文件 |
DataPack 导入失败并出现 Key not found 错误 | 查找对象引用指向目标 org 中不存在的 GlobalKey — 导入前验证所有配套文件中的 GlobalKey 是否一致 |
| DataPack 导入静默回滚 | 部署时添加 --verbose,并检查日志,找出触发回滚的具体记录和字段 |
| 同一套餐中的文件命名空间不匹配 | 一个负载中混用 %vlocity_namespace% 和 vlocity_cmt 风格会导致字段解析失败 — 在所有文件中统一使用一种命名空间风格 |
生成规范(强制)
如果出现任何反模式,请停止并在继续前征求确认。
| 反模式 | 失败原因 | 必须进行的修正 |
|---|---|---|
缺少 ProductCode 或代码值不稳定 | 会破坏报价/购物车引用和软件包差异比较 | 使用确定性的代码约定 |
| 关系中硬编码特定 org 的 ID | 无法跨 org/环境使用 | 使用键/全局键匹配的查找对象 |
| 优惠套餐缺少根 PCI 行 | 会导致运行时套餐遍历问题 | 添加根 %vlocity_namespace%__ProductChildItem__c |
| 属性默认值不在有效值中 | 会导致购物车配置默认值无效 | 确保默认值存在于允许值集合中 |
| 同一属性类别中显示顺序重复 | 会导致 UI 排序冲突 | 使用唯一且间隔递增的顺序值 |
| 子引用不完整时将优惠标记为激活 | 会导致运行时套餐损坏 | 激活前补全并验证子链接集合 |
命名风格混杂(snake_case、随意缩写) | 降低可维护性和可发现性 | 遵循 references 文档中的命名约定 |
评分模型(120 分)
阅读 references/scoring-model.md,了解完整的 6 类评分标准和各类别的评估条件。
| 类别 | 分数 |
|---|---|
| 目录标识与命名 | 20 |
| EPC 产品结构 | 20 |
| 属性建模 | 25 |
| 优惠套餐组成 | 25 |
| DataPack 完整性 | 15 |
| 文档与交接 | 15 |
| 总计 | 120 |
CLI 和验证命令
阅读 scripts/cli-validation-commands.sh,了解用于检查和验证 org 中 EPC 工件的 sf CLI 查询。运行前,请将 <org> 替换为已通过身份验证的 org 别名。
技能调用命令示例
阅读 scripts/sample-invocations.sh,了解涵盖常见 EPC 建模任务的调用示例。如果本地 Agent 命令包装器不同,请将 cursor-agent 替换为对应命令。
参考文件索引
| 文件 | 何时阅读 |
|---|---|
assets/product2-offer-template.json | 阶段 2 — 每个新 Product2 产品报价记录的基准结构 |
assets/attribute-assignment-template.json | 阶段 3 — 属性分配结构 |
assets/product-child-item-template.json | 阶段 4 — 根 PCI 行和子 PCI 行结构 |
assets/pricebook-entries-template.json | 阶段 4B — 价格手册条目配套文件 |
assets/price-list-entries-template.json | 阶段 4B — 价格列表条目配套文件 |
assets/object-field-attributes-template.json | 阶段 4B — 对象字段映射配套文件 |
assets/orchestration-scenarios-template.json | 阶段 4B — 编排场景配套文件 |
assets/decomposition-relationships-template.json | 阶段 4B — 分解关系配套文件 |
assets/compiled-attribute-overrides-template.json | 阶段 4B — 编译后属性覆盖项配套文件 |
assets/override-definitions-template.json | 阶段 4B — 覆盖项定义配套文件 |
assets/parent-keys-template.json | 阶段 4B — 父级键配套文件 |
assets/completion-block-template.txt | 阶段 5 — 交接摘要块模板 |
assets/examples/samsung-galaxy-s22-bundle/ | 阶段 4 — 套餐产品报价示例;先加载 *_DataPack.json 和 *_ProductChildItems.json,然后按需加载配套文件 |
assets/examples/business-internet-premium-fttc-simple-offer/ | 阶段 4 — 简单产品报价(FTTC)示例;先加载 *_DataPack.json 和 *_AttributeAssignments.json |
assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json | 阶段 4 — FTTC 产品报价规则分配示例;在建模基于规则的属性约束时加载 |
assets/examples/business-internet-pro-vpl-simple-offer/ | 阶段 4 — 简单产品报价(Pro VPL)示例;先加载 *_DataPack.json 和 *_AttributeAssignments.json |
assets/examples/static-ip-simple-offer/ | 阶段 4 — 简单产品报价(静态 IP)示例;先加载 *_DataPack.json 和 *_AttributeAssignments.json |
examples/business-internet-plus-bundle/ | 阶段 4 — 包含逐步操作记录的生成套餐示例;先加载 TRANSCRIPT.md,然后加载其中引用的特定 JSON 文件 |
references/epc-field-guide.md | 阶段 2 和 3 — EPC 字段级指南和常见问题 |
references/naming-conventions.md | 阶段 2 和 3 — 命名和键规范 |
references/scoring-model.md | 阶段 5 — 包含各类别标准的完整 6 类评分标准 |
scripts/cli-validation-commands.sh | 阶段 5 — 用于在组织中验证 EPC 工件的 sf CLI 查询 |
scripts/sample-invocations.sh | 开始时 — 常见 EPC 任务的参考调用示例 |
跨技能集成
| 来源技能 | 转到 modeling-omnistudio-epc-catalog | 何时 |
|---|---|---|
| analyzing-omnistudio-dependencies | -> modeling-omnistudio-epc-catalog | 需要先获取当前依赖项和命名空间清单 |
| generating-custom-object / generating-custom-field | -> modeling-omnistudio-epc-catalog | EPC 建模前需要确认对象或字段已准备就绪 |
| querying-soql | -> modeling-omnistudio-epc-catalog | 需要分析现有目录查询 |
来自 modeling-omnistudio-epc-catalog | 转到技能 | 何时 |
|---|---|---|
| modeling-omnistudio-epc-catalog | -> building-omnistudio-omniscript | 使用建模后的目录配置引导式销售 UX |
| modeling-omnistudio-epc-catalog | -> building-omnistudio-integration-procedure | 构建基于产品和定价负载的服务器端编排 |
| modeling-omnistudio-epc-catalog | -> deploying-metadata | 部署已验证的目录元数据 |
外部参考资料
本地参考资料:
- references/epc-field-guide.md — EPC 字段级指南和必填字段
- references/naming-conventions.md — 产品、属性和产品包的命名与键值约定
说明
- 此技能以 DataPack 为先,并针对
vlocity/Product2/...制品编写进行了优化。 - 保留模板中的
%vlocity_namespace%占位符,以确保可移植性。 - 优先创建可复用的规格产品,然后通过子级关系组装产品报价。