研发协作
在 Salesforce Industries CME…
基于 DataPack 模板创建、组装或按 120 分评分标准审查 EPC Product2 产品、可配置属性和 Offer 捆绑包元数据。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 Salesforce Industr特定
解决思路
- 先确认目录意图:询问产品类型(spec product 还是 offer bundle)、Family/Type/SubType/分类路径与渠道、属性需求(必填/可选、picklist 值、默认值)、捆绑包组成(子产品、数量约束、可选/必填)、目标 org 命名空间模型(%vlocity_namespace%、vlocity_cmt 或 Core)。
- 生成新 Offer 捆绑包前必须完成澄清清单:Offer 名称与 ProductCode、是否新建或更新、Family/Type/SubType 与渠道、是否设置 SpecificationType=Offer 与 SpecificationSubType=Bundle、EffectiveDate 与 SellingStartDate、IsActive 与 %vlocity_namespace%__IsOrderable__c、子产品清单及必填/可选与顺序、每个子产品的 MinQuantity/MaxQuantity/默认 Quantity 与是否启用 %vlocity_namespace%__MinMaxDefaultQty__c、属性必填/可选与有效值/默认值/显示类型/显示顺序、是否同时生成 pricebook 与 price list 条目及 orchestration/decomposition/override/parent-key 文件、命名空间约定与需保留的 global key/source key;任一必填项未答先追问,不要生成最终文件。
- 构建 Product2 主干:为每条新 EPC 记录定义 Name、唯一且稳定与环境无关的 ProductCode、稳定的 UUID 风格 %vlocity_namespace%__GlobalKey__c、%vlocity_namespace%__SpecificationType__c 与 %vlocity_namespace%__SpecificationSubType__c、%vlocity_namespace%__Status__c 与日期字段(EffectiveDate、SellingStartDate)、IsActive 与 %vlocity_namespace%__IsOrderable__c;以 assets/product2-offer-template.json 为基线。
- 添加属性:填充 %vlocity_namespace%__AttributeMetadata__c 分类与 productAttributes 记录;填充 %vlocity_namespace%__AttributeDefaultValues__c 的属性代码到默认值映射;创建 %vlocity_namespace%__AttributeAssignment__c 记录,包含分类关联、属性关联、UI 显示类型(如 dropdown)、有效值与默认标记;以 assets/attribute-assignment-template.json 为基线。
- 构建 Offer 捆绑包:父 Product2 保持为 Offer(SpecificationType=Offer、SpecificationSubType=Bundle);创建根 %vlocity_namespace%__ProductChildItem__c 行并设置 IsRootProductChildItem=true;为每个组件添加子行,包含父子引用、sequence 与 line number、min/max/default 数量行为(MinMaxDefaultQty、MinQuantity、MaxQuantity、Quantity);仅当行为与继承/默认不同时才使用 override 行;以 assets/product-child-item-template.json 为结构基线。
- 完整捆绑包需同时对齐并包含:assets/pricebook-entries-template.json、assets/price-list-entries-template.json、assets/object-field-attributes-template.json、assets/orchestration-scenarios-template.json、assets/decomposition-relationships-template.json、assets/compiled-attribute-overrides-template.json、assets/override-definitions-template.json、assets/parent-keys-template.json。
- 生成配套元数据文件时作为一组一致文件同时生成/更新:pricebook-entries 与 price-list-entries 保持 Product2 GlobalKey/ProductCode 引用与父 Offer 对齐;object-field-attributes 保持对象类引用与字段映射与同一 Offer 模型对齐;orchestration-scenarios 与 decomposition-relationships 保持与捆绑包子项一致;compiled-attribute-overrides 与 override-definitions 保持 override key 与引用与属性元数据和分配对齐;parent-keys 保持父级链接值与生成的 artifact key 同步;除非用户明确要求有限文件范围,否则不要只生成部分子集。
- 交付时提供完成块:EPC Model Complete: <Name>、Type: <Spec Product|Offer Bundle>、ProductCode: <code>、Attributes: <count>、Bundle Children: <count>、Companion Metadata Files: <count generated>、Validation Score: <score>/120、Risks: <none|list>。
- 遇到反模式必须停止并确认:缺少 ProductCode 或不稳定代码值(改用确定性代码约定);关系中硬编码 org 特定 ID(改用带匹配 key/global key 的 lookup 对象);Offer 捆绑包缺少根 PCI 行(添加根 %vlocity_namespace%__ProductChildItem__c);属性默认值不在有效值中(确保默认值存在于允许值集合);同一属性分类中显示顺序重复(强制唯一且留间隔的 sequence 值);Offer 标记为 active 但子引用不完整(激活前完成并校验子链接集);命名风格混杂(按参考文档强制命名约定)。
- 按 120 分模型评分:Catalog Identity and Naming 20 分(产品名清晰唯一、ProductCode 约定质量、Type/SubType/Family 一致性、稳定 keying);EPC Product Structure 20 分(必需 Product2+EPC 字段、生命周期日期与状态对齐、orderable/active 标志一致、record type 与分类一致);Attribute Modeling 25 分(分类与属性分组质量、有效值与默认值对齐、必填/只读/可过滤语义、显示顺序与 UX 一致);Offer Bundle Composition 25 分(根 PCI 存在且正确、子引用与顺序完整、数量约束正确、可选/必填语义反映在 min/max/default);DataPack Integrity 15 分(命名空间占位符正确、lookup 对象 key 完整、无环境特定脆弱字段);Documentation and Handoff 15 分(清晰说明建模意图、包含测试清单、明确列出风险与假设);阈值:>=95 可部署、70-94 需审查、<70 阻止并修复。
- 使用 CLI 查询与校验:sf data query -q "SELECT Id,Name,ProductCode,Family,IsActive FROM Product2 ORDER BY LastModifiedDate DESC" -o <org>;sf data query -q "SELECT Id,Name,%vlocity_namespace%__ParentProductName__c,%vlocity_namespace%__ChildProductName__c,%vlocity_namespace%__MinMaxDefaultQty__c FROM %vlocity_namespace%__ProductChildItem__c WHERE %vlocity_namespace%__ParentProductName__c='<Offer Name>'" -o <org>;sf project retrieve start -m Product2:<DeveloperNameOrName> -o <org>;sf project deploy start -x manifest/package.xml --dry-run -o <org>。
- 保持 DataPack-first 与可移植性:在模板中保留 %vlocity_namespace% 占位符;优先创建可复用 spec product,再通过子关系组装 Offer。
- 跨技能衔接:需要依赖与命名空间清单时先用 sf-industry-commoncore-omnistudio-analyze;需要对象/字段就绪时先用 sf-metadata;需要现有目录查询分析时先用 sf-soql;建模后配置引导销售 UX 用 sf-industry-commoncore-omniscript;构建服务端编排用 sf-industry-commoncore-integration-procedure;部署已验证目录元数据用 sf-deploy。
适用边界 · 注意事项
- 设计 OmniScripts/FlexCards/Integration Procedures 时不要触发(改用 sf-industry-commoncore-* 技能)。
- 实现 Apex 业务逻辑时不要触发(改用 sf-apex)。
- 排查部署流水线问题时不要触发(改用 sf-deploy)。