用途
本技能用于配置 Salesforce 消费品行业 Trade Promotion Management (TPM) 组织的 RTR(Real Time Reporting,实时报告)导出管道,将促销度量(promotion measures)推送到 Data Cloud(Data 360)。它既可作为独立技能运行,也可由 consumer-goods-tpe-dashboard-configure 作为委派步骤调用,后者会传递其已收集的用户名、dry-run 标志和 GenieAdmin 确认结果。
主要能力
技能通过有序阶段执行配置:
- 验证或分配 GenieAdmin 权限集,并确认 TPM Admin 角色分配。
- 通过匿名 Apex 写入(upsert)Data_Cloud_Enabled 系统设置并确认写入。
- 在捕获基线 Batch_Run_Status__c Id 后,针对 System_Setting__c 触发范围限定的 SF Data Sync。
- 轮询并验证同步是否完成(状态包括 Done/Error/Fatal/Running)。
- 验证 Usage__c 上是否存在 datacloudpromotionmeasuresmeta picklist 值——若缺失则停止并引导用户前往 Setup 手动添加(无程序化修复方式)。
- 逐个 Sales Org 循环处理:解析 Sales Org Name → Id,复用现有 RTR_Report_Configuration__c 或收集 KPI Set、度量编码、起始日期并创建新记录,如有变更则同步,然后询问是否添加下一个 Sales Org。
- 在阶段 6 循环完全结束后,针对每个已配置的 Sales Org 触发一次导出,使用 scripts/sf-rest.js(而非 sf api request rest),并捕获 requestId 作为导出 guid。
- 通过 scripts/sf-rest.js 轮询每个 Sales Org 的导出状态(Ready/Error/Aborted/Queued/InProgress)。
- 所有 Sales Org 轮询完毕后,要求用户自行同步 promotionmeasures Data Cloud 数据流并获得明确完成确认——本技能从不触发该同步。
- 仅当用户明确要求时,通过 scripts/sf-rest.js 中止进行中的导出。
- 按阶段报告 pass/blocked/pending 状态。
使用方式
开始前需阅读 references/inputs-and-namespace.md,其中涵盖:阶段 1 之前必须收集(或由调用技能传入)的 username/dry-run/GenieAdmin/TPM-Admin/namespace 输入;阶段 6 惰性收集的 Sales Org/KPI Set/度量编码/起始日期输入(仅当某 Sales Org 的现有配置检查为空时按其收集);命名空间检测流程(scripts/detect-namespace.js)及贯穿各阶段的 NS/NS_SEGMENT/NS_APEX/NS_FIELD 派生方法。scripts/render-apex.js(Apex 模板渲染)和 scripts/resolve-id-by-name.js(名称到 Id 查询)均加载 scripts/soql-escape.js 以安全转义 SOQL/Apex 插值字面量。完整的分步命令、查询和 Apex 模板见 references/procedure.md,须按顺序运行各阶段。
适用场景与限制
本技能目前仅支持 Usage__c = 'datacloudpromotionmeasuresmeta'(JSON__c.object = "promotionmeasures"),该值硬编码,从不作为输入询问。账号计划度量(datacloudaccountplanmeasuresmeta)尚未接入。当请求的导出类型不是促销度量时,应说明限制后停止,或询问用户是否改为该 Sales Org 的促销度量导出;不得为不支持路径提供逐字段手动配置说明、建议的 Usage__c/JSON__c 值或 picklist 添加步骤,应将运行报告为 blocked 而非部分通过。
关键规则包括:未经用户明确同意,不得分配权限集、写入记录或触发同步/导出;不得猜测或硬编码 Batch_Name__c;不得程序化添加缺失的 Usage__c picklist 值;不得跳过阶段 6 的存在性检查(以 Usage__c + Sales_Organization__c 为键),未经单独明确同意不得覆盖已存在的 RTR_Report_Configuration__c;阶段 6 循环未完全结束前不得触发阶段 7 导出;须允许用户提供自定义 Internal_Name__c,否则默认 "Data 360 Promotion Measures Export <Sales Org Name>"(无连字符),且该值在阶段 7 导出中作为 metaname;阶段 7 每个 Sales Org 导出一次而非整批一次;Sales Org 和 KPI Set 均以 Name 给出并由查询解析为 Id,本技能从不创建 Sales_Organization__c、KPI_Set__c 或 KPI Set 关联行;未经本次运行实际创建则不得同步;非用户明确要求不得调用 abort;不得仅凭阶段 8 的 Ready 状态声称阶段 9 完成;不得在任何 REST 路径、Apex 片段或 SOQL 查询中硬编码命名空间;仅调用全局 Apex 类、REST 端点或本技能自有 scripts/ 目录中的匿名 Apex 模板。
运行结束时,按阶段 1-10 给出结构化状态(pass/blocked/pending),附具体阻塞原因和修复点击路径(如缺失 picklist 值的 Setup 路径),并说明因 dry-run 或被拒绝的确认而跳过的内容。通过委派调用时,此报告为中间结果,应返回给调用技能继续其下一阶段,而非作为最终答案呈现;仅当本技能独立调用时才直接向用户呈现该报告。