@salesforce/afv-skills 1.63.0 → 1.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/agentforce-gpt-email-generation-configure/SKILL.md +312 -0
- package/skills/agentforce-offline-experimentation-run/SKILL.md +253 -0
- package/skills/agentforce-offline-experimentation-run/scripts/build_report.py +796 -0
- package/skills/agentforce-offline-experimentation-run/scripts/resolve-token.sh +111 -0
- package/skills/agentforce-offline-experimentation-run/scripts/sfap_replay.py +1053 -0
- package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +64 -0
- package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +46 -0
- package/skills/automation-company-profile-info-query/SKILL.md +51 -0
- package/skills/automation-digital-wallet-configure/SKILL.md +689 -0
- package/skills/automation-flow-coordinate/SKILL.md +95 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +1569 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +96 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +23 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +31 -0
- package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +179 -0
- package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +13 -0
- package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +83 -0
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +69 -0
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +274 -0
- package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +192 -0
- package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +130 -0
- package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +92 -0
- package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +88 -0
- package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +152 -0
- package/skills/automation-flow-coordinate/references/elements/start/start.md +539 -0
- package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +152 -0
- package/skills/automation-flow-coordinate/references/elements/wait/wait.md +497 -0
- package/skills/automation-flow-coordinate/references/recipes/author/author.md +868 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +300 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +292 -0
- package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +323 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +109 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +219 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +180 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +175 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +255 -0
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +212 -0
- package/skills/automation-flow-coordinate/references/resources/variable/variable.md +171 -0
- package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +786 -0
- package/skills/automation-flow-coordinate/references/shared/end/end.md +267 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +69 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +80 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +116 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +321 -0
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +320 -0
- package/skills/automation-flow-coordinate/references/shared/server-functions.md +597 -0
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +21 -11
- package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +10 -0
- package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
- package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +44 -1
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +132 -124
- package/skills/automation-sandbox-post-copy-configure/references/flow_activation_path.md +151 -0
- package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +55 -9
- package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +69 -0
- package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +78 -0
- package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +373 -0
- package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +273 -0
- package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +259 -0
- package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +369 -0
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +542 -0
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +159 -0
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +349 -0
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +505 -0
- package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +380 -0
- package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +567 -0
- package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +159 -0
- package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +360 -0
- package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +539 -0
- package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +358 -0
- package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +602 -0
- package/skills/commerce-b2b-store-configure/SKILL.md +251 -0
- package/skills/commerce-credit-memo-create/SKILL.md +139 -0
- package/skills/commerce-delivery-business-hours-configure/SKILL.md +277 -0
- package/skills/commerce-delivery-estimation-apply/SKILL.md +155 -0
- package/skills/commerce-delivery-estimation-configure/SKILL.md +377 -0
- package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +174 -0
- package/skills/commerce-estimate-bopis-query/SKILL.md +279 -0
- package/skills/commerce-estimate-delivery-date-query/SKILL.md +349 -0
- package/skills/commerce-fees-apply/SKILL.md +227 -0
- package/skills/commerce-fulfillment-routing-analyze/SKILL.md +200 -0
- package/skills/commerce-guest-buyer-create/SKILL.md +173 -0
- package/skills/commerce-location-bopis-configure/SKILL.md +378 -0
- package/skills/commerce-location-business-hours-configure/SKILL.md +235 -0
- package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +309 -0
- package/skills/commerce-location-graph-integrate/SKILL.md +131 -0
- package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +755 -0
- package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +331 -0
- package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +579 -0
- package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +626 -0
- package/skills/commerce-merchant-catalog-configure/SKILL.md +614 -0
- package/skills/commerce-merchant-extension-provider-configure/SKILL.md +368 -0
- package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +118 -0
- package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +65 -0
- package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +90 -0
- package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +72 -0
- package/skills/commerce-merchant-insights-query/SKILL.md +279 -0
- package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +656 -0
- package/skills/commerce-order-summary-change-apply/SKILL.md +375 -0
- package/skills/commerce-product-details-get/SKILL.md +363 -0
- package/skills/commerce-product-search/SKILL.md +563 -0
- package/skills/commerce-react-storefront-create/SKILL.md +350 -0
- package/skills/commerce-return-order-summary-create/SKILL.md +513 -0
- package/skills/commerce-search-relevance-analyze/SKILL.md +757 -0
- package/skills/commerce-temporary-processing-time-override-create/SKILL.md +274 -0
- package/skills/communications-initial-setup-configure/SKILL.md +630 -0
- package/skills/communications-multisite-configure/SKILL.md +571 -0
- package/skills/communications-revenue-cloud-settings-configure/SKILL.md +74 -0
- package/skills/communications-smb-fiber-catalog-create/SKILL.md +413 -0
- package/skills/communications-tmf-integrate/SKILL.md +1368 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +54 -107
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +1 -1
- package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +82 -5
- package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +35 -2
- package/skills/consumer-goods-promotion-bo-api-deploy/references/preflight-and-seed-queries.md +149 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +17 -1
- package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +448 -0
- package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +269 -0
- package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +271 -0
- package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +382 -0
- package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +373 -0
- package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +389 -0
- package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +338 -0
- package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +547 -0
- package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +346 -0
- package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +1110 -0
- package/skills/crm-analytics-adoption-insights-configure/SKILL.md +224 -0
- package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +418 -0
- package/skills/crm-analytics-dashboards-configure/SKILL.md +731 -0
- package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +233 -0
- package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +184 -0
- package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +167 -0
- package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +55 -0
- package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +1350 -0
- package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +1862 -0
- package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +83 -0
- package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +81 -0
- package/skills/data360-activation-create/SKILL.md +104 -0
- package/skills/data360-activation-external-platform-get/SKILL.md +49 -0
- package/skills/data360-activation-target-create/SKILL.md +93 -0
- package/skills/data360-activation-v2-create/SKILL.md +456 -0
- package/skills/data360-audience-dmo-get/SKILL.md +38 -0
- package/skills/data360-calculated-affinity-create/SKILL.md +82 -0
- package/skills/data360-calculated-insight-create/SKILL.md +148 -0
- package/skills/data360-catalog-metadata-create/SKILL.md +183 -0
- package/skills/data360-code-extension-create/SKILL.md +115 -0
- package/skills/data360-communication-capping-create/SKILL.md +227 -0
- package/skills/data360-connection-create/SKILL.md +491 -0
- package/skills/data360-content-lens-create/SKILL.md +181 -0
- package/skills/data360-data-action-create/SKILL.md +126 -0
- package/skills/data360-data-action-target-create/SKILL.md +181 -0
- package/skills/data360-data-clean-room-create/SKILL.md +238 -0
- package/skills/data360-data-governance-create/SKILL.md +746 -0
- package/skills/data360-data-graph-create/SKILL.md +82 -0
- package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +38 -0
- package/skills/data360-data-lake-object-create/SKILL.md +207 -0
- package/skills/data360-data-model-object-catalog-get/SKILL.md +49 -0
- package/skills/data360-data-model-object-create/SKILL.md +128 -0
- package/skills/data360-data-model-object-mapping-create/SKILL.md +106 -0
- package/skills/data360-data-space-create/SKILL.md +161 -0
- package/skills/data360-data-streams-create/SKILL.md +324 -0
- package/skills/data360-engagement-signal-get/SKILL.md +38 -0
- package/skills/data360-experiment-create/SKILL.md +82 -0
- package/skills/data360-goal-based-campaign-create/SKILL.md +192 -0
- package/skills/data360-harmonization-process-history-get/SKILL.md +38 -0
- package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +84 -0
- package/skills/data360-identity-resolution-create/SKILL.md +115 -0
- package/skills/data360-intelligent-document-processing-create/SKILL.md +148 -0
- package/skills/data360-knowledge-graph-construction-create/SKILL.md +93 -0
- package/skills/data360-knowledge-graph-create/SKILL.md +216 -0
- package/skills/data360-knowledge-space-mcp-configure/SKILL.md +475 -0
- package/skills/data360-machine-learning-mcp-configure/SKILL.md +697 -0
- package/skills/data360-multi-org-mcp-configure/SKILL.md +117 -0
- package/skills/data360-secondary-index-mcp-configure/SKILL.md +126 -0
- package/skills/data360-segment-mcp-configure/SKILL.md +159 -0
- package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +38 -0
- package/skills/data360-semantic-engine-mcp-configure/SKILL.md +62 -0
- package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +38 -0
- package/skills/data360-semantic-metric-mcp-configure/SKILL.md +93 -0
- package/skills/data360-semantic-model-mcp-configure/SKILL.md +115 -0
- package/skills/data360-standard-mapping-mcp-configure/SKILL.md +38 -0
- package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +73 -0
- package/skills/dx-devops-conflict-resolve/SKILL.md +1 -5
- package/skills/dx-devops-pipeline-manage/SKILL.md +1 -5
- package/skills/dx-devops-project-manage/SKILL.md +1 -5
- package/skills/dx-devops-promote/SKILL.md +1 -5
- package/skills/dx-devops-request-status/SKILL.md +1 -5
- package/skills/dx-lifecycle-center/SKILL.md +120 -0
- package/skills/dx-lifecycle-center/examples/workflows.md +175 -0
- package/skills/dx-lifecycle-center/references/connect-api.md +123 -0
- package/skills/dx-lifecycle-center/references/connect-org.md +184 -0
- package/skills/dx-lifecycle-center/references/deploy.md +153 -0
- package/skills/dx-lifecycle-center/references/error-handling.md +21 -0
- package/skills/dx-lifecycle-center/references/hub-org.md +37 -0
- package/skills/dx-lifecycle-center/references/list-orgs.md +99 -0
- package/skills/dx-lifecycle-center/references/request-body.md +75 -0
- package/skills/dx-lifecycle-center/references/troubleshooting.md +31 -0
- package/skills/dx-lifecycle-center/scripts/poll-deploy-status.sh +200 -0
- package/skills/dx-lifecycle-center/scripts/resolve-environment.sh +120 -0
- package/skills/dx-org-devhub-configure/SKILL.md +1 -3
- package/skills/dx-org-shape-manage/SKILL.md +1 -5
- package/skills/dx-org-snapshot-manage/SKILL.md +1 -3
- package/skills/education-cloud-academic-calendar-generate/SKILL.md +1 -3
- package/skills/education-cloud-course-catalog-migrate/SKILL.md +1 -3
- package/skills/education-cloud-domain-configure/SKILL.md +1 -3
- package/skills/education-cloud-multi-campus-configure/SKILL.md +1 -3
- package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +1 -5
- package/skills/experience-afv-query/SKILL.md +234 -0
- package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +63 -0
- package/skills/experience-apex-components-configure/SKILL.md +69 -0
- package/skills/experience-apex-pages-configure/SKILL.md +107 -0
- package/skills/experience-app-home-configure/SKILL.md +76 -0
- package/skills/experience-aura-lightning-out-access-configure/SKILL.md +58 -0
- package/skills/experience-briefcase-configure/SKILL.md +287 -0
- package/skills/experience-community-flexi-page-list-create/SKILL.md +74 -0
- package/skills/experience-community-template-definition-list-query/SKILL.md +48 -0
- package/skills/experience-community-theme-definition-list-query/SKILL.md +38 -0
- package/skills/experience-content-assets-configure/SKILL.md +86 -0
- package/skills/experience-custom-domain-create/SKILL.md +727 -0
- package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +41 -0
- package/skills/experience-field-service-app-builder-configure/SKILL.md +187 -0
- package/skills/experience-flow-category-configure/SKILL.md +117 -0
- package/skills/experience-formula-configure/SKILL.md +358 -0
- package/skills/experience-global-actions-configure/SKILL.md +69 -0
- package/skills/experience-global-publisher-layouts-configure/SKILL.md +79 -0
- package/skills/experience-instrumentation-configure/SKILL.md +64 -0
- package/skills/experience-lex-engagement-configure/SKILL.md +50 -0
- package/skills/experience-lightning-bolt-open/SKILL.md +12 -0
- package/skills/experience-lightning-out-configure/SKILL.md +129 -0
- package/skills/experience-lightning-preview-configure/SKILL.md +67 -0
- package/skills/experience-lightning-types-query/SKILL.md +98 -0
- package/skills/experience-malware-scan-configure/SKILL.md +71 -0
- package/skills/experience-my-salesforce-configure/SKILL.md +126 -0
- package/skills/experience-navigation-menus-configure/SKILL.md +235 -0
- package/skills/experience-notification-types-configure/SKILL.md +206 -0
- package/skills/experience-notifications-configure/SKILL.md +75 -0
- package/skills/experience-record-discovery-query/SKILL.md +227 -0
- package/skills/experience-regenerate-previews-open/SKILL.md +94 -0
- package/skills/experience-sales-cloud-mab-configure/SKILL.md +254 -0
- package/skills/experience-schema-builder-open/SKILL.md +38 -0
- package/skills/experience-simple-record-home-configure/SKILL.md +110 -0
- package/skills/experience-static-resources-configure/SKILL.md +74 -0
- package/skills/experience-ui-bundle-2gp-deploy/SKILL.md +1 -3
- package/skills/experience-ui-bundle-features-generate/SKILL.md +1 -5
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +1 -3
- package/skills/field-service-data-capture-form-deployer-configure/SKILL.md +23 -2
- package/skills/field-service-data-capture-form-designer-configure/SKILL.md +13 -3
- package/skills/field-service-data-capture-migrate/SKILL.md +1 -3
- package/skills/field-service-mobile-branding-configure/SKILL.md +17 -3
- package/skills/field-service-objective-designer-configure/SKILL.md +72 -379
- package/skills/field-service-prework-brief-deployer-configure/SKILL.md +10 -537
- package/skills/field-service-scheduling-policy-designer-query/SKILL.md +65 -1093
- package/skills/{field-service-setup-orchestrator-get → field-service-setup-coordinate}/SKILL.md +18 -3
- package/skills/field-service-sobject-create-configure/SKILL.md +13 -213
- package/skills/field-service-voice-to-form-configure/SKILL.md +40 -11
- package/skills/field-service-work-plan-configure/SKILL.md +253 -0
- package/skills/field-service-work-rule-designer-configure/SKILL.md +121 -95
- package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +180 -0
- package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +196 -0
- package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +106 -0
- package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +96 -0
- package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +111 -0
- package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +250 -0
- package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +122 -0
- package/skills/fsc-digital-origination-coordinate/SKILL.md +653 -0
- package/skills/fsc-digital-origination-demo-run/SKILL.md +225 -0
- package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +112 -0
- package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +396 -0
- package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +336 -0
- package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +208 -0
- package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +375 -0
- package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +83 -0
- package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +248 -0
- package/skills/fsc-digital-origination-sample-data-create/SKILL.md +206 -0
- package/skills/fsc-document-checklist-settings-configure/SKILL.md +57 -0
- package/skills/fsc-flexible-hierarchy-configure/SKILL.md +148 -0
- package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +1430 -0
- package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +471 -0
- package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +429 -0
- package/skills/fsc-pricing-product-configurator-configure/SKILL.md +150 -0
- package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +123 -0
- package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +82 -0
- package/skills/fsc-product-act3-attributes-create/SKILL.md +249 -0
- package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +196 -0
- package/skills/fsc-product-act5-considerations-get/SKILL.md +44 -0
- package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +384 -0
- package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +144 -0
- package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +107 -0
- package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +189 -0
- package/skills/fsc-stage-management-definition-create/SKILL.md +108 -0
- package/skills/fsc-stage-management-permissions-assign/SKILL.md +143 -0
- package/skills/fsc-stage-management-transitions-configure/SKILL.md +139 -0
- package/skills/health-cloud-appt-booking-config-configure/SKILL.md +135 -0
- package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +134 -0
- package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +136 -0
- package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +134 -0
- package/skills/health-cloud-care-requests-create/SKILL.md +178 -0
- package/skills/health-cloud-initial-configure/SKILL.md +511 -0
- package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +1374 -0
- package/skills/health-cloud-provider-search-settings-configure/SKILL.md +924 -0
- package/skills/health-cloud-referral-management-coordinate/SKILL.md +513 -0
- package/skills/health-cloud-timeline-configure/SKILL.md +622 -0
- package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +135 -0
- package/skills/industries-account-score-settings-query/SKILL.md +78 -0
- package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +177 -0
- package/skills/industries-ad-product-availability-search/SKILL.md +399 -0
- package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +628 -0
- package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +73 -0
- package/skills/industries-atm-settings-starter-configure/SKILL.md +76 -0
- package/skills/industries-batch-document-ai-configure/SKILL.md +196 -0
- package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +71 -0
- package/skills/industries-branch-management-settings-configure/SKILL.md +89 -0
- package/skills/industries-bre-decision-table-access-configure/SKILL.md +367 -0
- package/skills/industries-brokerage-settings-configure/SKILL.md +41 -0
- package/skills/industries-calendar-sync-settings-configure/SKILL.md +89 -0
- package/skills/industries-care-request-settings-configure/SKILL.md +218 -0
- package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +54 -0
- package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +380 -0
- package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +216 -0
- package/skills/industries-catalog-process-intake-configure/SKILL.md +219 -0
- package/skills/industries-catalog-process-knowledge-configure/SKILL.md +153 -0
- package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +168 -0
- package/skills/industries-cds-general-settings-configure/SKILL.md +69 -0
- package/skills/industries-claim-financial-settings-configure/SKILL.md +169 -0
- package/skills/industries-clinical-data-model-settings-configure/SKILL.md +136 -0
- package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +105 -0
- package/skills/industries-collection-plan-settings-configure/SKILL.md +132 -0
- package/skills/industries-comms-service-console-settings-configure/SKILL.md +159 -0
- package/skills/industries-compliance-configure/SKILL.md +102 -0
- package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +76 -0
- package/skills/industries-contact-center-app-layout-configure/SKILL.md +88 -0
- package/skills/industries-contact-center-components-configure/SKILL.md +96 -0
- package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +95 -0
- package/skills/industries-contact-center-user-access-assign/SKILL.md +96 -0
- package/skills/industries-course-waitlist-config-configure/SKILL.md +162 -0
- package/skills/industries-crisis-center-settings-configure/SKILL.md +84 -0
- package/skills/industries-custom-object-settings-configure/SKILL.md +94 -0
- package/skills/industries-data-cloud-integration-configure/SKILL.md +88 -0
- package/skills/industries-data-space-feature-mappings-configure/SKILL.md +245 -0
- package/skills/industries-decision-matrix-builder-configure/SKILL.md +78 -0
- package/skills/industries-decision-table-hbase-configure/SKILL.md +87 -0
- package/skills/industries-decision-table-version-configure/SKILL.md +74 -0
- package/skills/industries-decision-tables-builder-configure/SKILL.md +253 -0
- package/skills/industries-decision-tables-configure/SKILL.md +439 -0
- package/skills/industries-energy-utilities-configure/SKILL.md +251 -0
- package/skills/industries-eu-cloud-multisite-configure/SKILL.md +1008 -0
- package/skills/industries-eu-new-connections-configure/SKILL.md +30 -0
- package/skills/industries-explainability-msg-template-configure/SKILL.md +135 -0
- package/skills/industries-expression-set-message-token-configure/SKILL.md +135 -0
- package/skills/industries-field-service-settings-configure/SKILL.md +82 -0
- package/skills/industries-form-framework-settings-configure/SKILL.md +30 -0
- package/skills/industries-fsc-ai-settings-configure/SKILL.md +57 -0
- package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +172 -0
- package/skills/industries-fsc-b2b-settings-configure/SKILL.md +61 -0
- package/skills/industries-fsc-insurance-settings-configure/SKILL.md +58 -0
- package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +103 -0
- package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +117 -0
- package/skills/industries-fsc-wealth-settings-configure/SKILL.md +99 -0
- package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +120 -0
- package/skills/industries-fundraising-rfm-configure/SKILL.md +128 -0
- package/skills/industries-fundraising-settings-configure/SKILL.md +145 -0
- package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +299 -0
- package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +87 -0
- package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +58 -0
- package/skills/industries-hc-score-category-settings-configure/SKILL.md +167 -0
- package/skills/industries-health-engagement-settings-configure/SKILL.md +218 -0
- package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +131 -0
- package/skills/industries-home-health-bundling-policy-create/SKILL.md +50 -0
- package/skills/industries-home-health-entity-labels-configure/SKILL.md +29 -0
- package/skills/industries-home-health-fsl-package-deploy/SKILL.md +71 -0
- package/skills/industries-home-health-fsl-settings-validate/SKILL.md +27 -0
- package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +80 -0
- package/skills/industries-home-health-guided-setup-configure/SKILL.md +836 -0
- package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +55 -0
- package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +61 -0
- package/skills/industries-home-health-licenses-assign/SKILL.md +27 -0
- package/skills/industries-home-health-operating-hours-create/SKILL.md +40 -0
- package/skills/industries-home-health-scheduling-policy-create/SKILL.md +41 -0
- package/skills/industries-home-health-service-objective-create/SKILL.md +22 -0
- package/skills/industries-home-health-skills-create/SKILL.md +31 -0
- package/skills/industries-home-health-users-create/SKILL.md +29 -0
- package/skills/industries-icm-act3-toggles-configure/SKILL.md +198 -0
- package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +361 -0
- package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +550 -0
- package/skills/industries-integrated-care-management-configure/SKILL.md +168 -0
- package/skills/industries-object-enablement-configure/SKILL.md +86 -0
- package/skills/industries-tpm-system-processing-service-configure/SKILL.md +64 -0
- package/skills/insurance-brokerage-agency-billing-configure/SKILL.md +1 -3
- package/skills/integration-apex-settings-configure/SKILL.md +61 -0
- package/skills/marketing-e360-email-archiving-configure/SKILL.md +73 -0
- package/skills/marketing-message-test/SKILL.md +1 -3
- package/skills/nonprofit-fundraising-configure/SKILL.md +240 -0
- package/skills/nonprofit-fundraising-configure/references/gotchas.md +26 -0
- package/skills/nonprofit-fundraising-configure/references/mcp-invocation.md +678 -0
- package/skills/nonprofit-fundraising-configure/references/permission-targeting.md +35 -0
- package/skills/nonprofit-volunteer-management-model-get/SKILL.md +166 -0
- package/skills/nonprofit-volunteer-management-model-get/references/entities.md +315 -0
- package/skills/nonprofit-volunteer-management-model-get/references/relationships.md +175 -0
- package/skills/nonprofit-volunteer-management-model-get/references/themes.md +143 -0
- package/skills/nonprofit-volunteer-management-records-create/SKILL.md +121 -0
- package/skills/nonprofit-volunteer-management-records-create/references/field-guide.md +284 -0
- package/skills/nonprofit-volunteer-management-records-create/references/mcp-invocation.md +248 -0
- package/skills/nonprofit-volunteer-management-records-create/references/review-format.md +140 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/expand-series.py +632 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/render-review-table.py +419 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_expand_series.py +690 -0
- package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_render_review_table.py +421 -0
- package/skills/nonprofit-volunteer-management-structure-generate/SKILL.md +119 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/configuration-decisions.md +159 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/discovery-interview.md +137 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/edge-cases.md +48 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/mcp-invocation.md +75 -0
- package/skills/nonprofit-volunteer-management-structure-generate/references/plan-output.md +141 -0
- package/skills/platform-custom-field-generate/SKILL.md +1 -0
- package/skills/platform-custom-field-generate/references/advanced-picklists.md +5 -5
- package/skills/platform-custom-metadata-type-generate/SKILL.md +3 -0
- package/skills/platform-custom-object-generate/SKILL.md +4 -0
- package/skills/platform-custom-permissions-configure/SKILL.md +687 -0
- package/skills/platform-custom-setting-generate/SKILL.md +3 -0
- package/skills/platform-datamask-run/SKILL.md +1 -5
- package/skills/platform-label-workbench-import-create/SKILL.md +67 -0
- package/skills/platform-permission-set-generate/SKILL.md +3 -0
- package/skills/platform-privacy-agent-settings-configure/SKILL.md +752 -0
- package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +1 -3
- package/skills/platform-sandbox-configure/SKILL.md +1 -3
- package/skills/platform-value-set-generate/SKILL.md +3 -0
- package/skills/sales-call-scoring-configure/SKILL.md +1 -5
- package/skills/service-agentforce-channel-configure/SKILL.md +1 -3
- package/skills/service-agentforce-human-escalation-configure/SKILL.md +1 -3
- package/skills/service-catalog-template-coordinate/SKILL.md +1 -3
- package/skills/service-concierge-portal-generate/SKILL.md +1 -3
- package/skills/service-email-to-case-configure/SKILL.md +1 -5
- package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -5
- package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +1 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +1 -3
- package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +1 -9
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +1 -5
- package/skills/service-itsm-incident-priority-configure/SKILL.md +1 -3
- package/skills/service-itsm-slack-itservice-configure/SKILL.md +1 -3
- package/skills/service-itsm-swarming-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-debug/SKILL.md +1 -3
- package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-itdesk-configure/SKILL.md +1 -3
- package/skills/service-itsm-teams-itservice-configure/SKILL.md +1 -3
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +1 -3
- package/skills/service-omni-agent-users-create/SKILL.md +1 -3
- package/skills/service-omni-agent-work-sharing-configure/SKILL.md +1 -3
- package/skills/service-omni-attribute-routing-configure/SKILL.md +1 -3
- package/skills/service-omni-base-settings-configure/SKILL.md +1 -3
- package/skills/service-omni-channel-inventory-analyze/SKILL.md +1 -3
- package/skills/service-omni-channel-limits-analyze/SKILL.md +1 -3
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +1 -3
- package/skills/service-omni-command-center-analyze/SKILL.md +1 -3
- package/skills/service-omni-command-center-configure/SKILL.md +1 -3
- package/skills/service-omni-permission-set-assign/SKILL.md +1 -3
- package/skills/service-omni-presence-status-deploy/SKILL.md +1 -3
- package/skills/service-omni-presence-user-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-queue-deploy/SKILL.md +1 -3
- package/skills/service-omni-queue-members-assign/SKILL.md +1 -3
- package/skills/service-omni-queue-routing-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-routing-flow-deploy/SKILL.md +1 -3
- package/skills/service-omni-service-channel-configure/SKILL.md +1 -3
- package/skills/service-omni-sidebar-configure/SKILL.md +1 -3
- package/skills/service-omni-skills-based-routing-configure/SKILL.md +1 -3
- package/skills/service-omni-supervisor-config-deploy/SKILL.md +1 -3
- package/skills/service-omni-supervisor-permset-assign/SKILL.md +1 -3
- package/skills/service-omni-supervisor-surface-deploy/SKILL.md +1 -3
- package/skills/service-omni-supervisor-users-create/SKILL.md +1 -3
- package/skills/service-omni-work-skill-routing-configure/SKILL.md +1 -3
- package/skills/tableau-next-asset-create/README.md +0 -65
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: communications-multisite-configure
|
|
3
|
+
description: "\"Enable MultiSite\" / \"turn on Location Based Quoting and Ordering\" / \"enable MultiLocationFeatureOrgPref\" / \"set up multi-recipient / multi-site quoting\" / \"verify the CME multi-recipient org permission\" / \"edit the Quote and Order page display columns / Recipient Wrapper fields\" for Communications Cloud. The concrete enablement layer of the Comms Cloud MultiSite steel thread (workflow #2): flip the MultiLocationFeatureOrgPref org preference, verify the CMEMultiRecipient org permission (and, from the perms side, the derived CMESales user permission), then edit the Quote/Order page display columns. Runs after comms-cloud-initial-setup and is delegated to from comms-cloud-multisite-setup."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Communications Cloud — MultiSite Enablement (org preference + permission + display columns)
|
|
9
|
+
|
|
10
|
+
The **enablement layer** of the MultiSite steel thread (Comms Cloud workflow **#2**). Four concrete
|
|
11
|
+
pieces:
|
|
12
|
+
|
|
13
|
+
1. **Enable the `MultiLocationFeatureOrgPref` org preference** — the "Location Based Quoting and
|
|
14
|
+
Ordering" toggle on the *Revenue Cloud for Communications Settings* page. **Mechanism: Toggle
|
|
15
|
+
(OrgPreference) via the approved SOR `RevenueCloudforCommunicationsSettings`, over its friendly
|
|
16
|
+
`/headless/invoke/industries/industries-communications-sales/…` route — headless, no gap, proven
|
|
17
|
+
end-to-end.**
|
|
18
|
+
2. **Verify the `CMEMultiRecipient` org permission** and, from the permissions side, the derived
|
|
19
|
+
`CMESales` user permission. **Mechanism: read/verify (headless) + permission-set assignment
|
|
20
|
+
(headless); provisioning the org permission itself is out-of-band (licensing).**
|
|
21
|
+
3. **Edit the Quote and Order page display columns** (Locations tab / Recipient Wrapper fields).
|
|
22
|
+
**Mechanism: Manual-UI (Lightning App Builder + Flow Builder) — ⚠ GAP, no headless surface.**
|
|
23
|
+
4. **Stand up the Context Service extension that backs the multi-recipient attributes** — a custom
|
|
24
|
+
context-definition extension (`baseReference` on the standard `ConsumerSalesContext__stdctx`) that
|
|
25
|
+
adds the recipient / recipient-group attributes + mappings + hydration the Quote/Order pages surface
|
|
26
|
+
in Step 3 (e.g. `RecipientCity__c → ServiceCity`, the RecipientGroup counts). **Mechanism: Context
|
|
27
|
+
Connect API (native REST) via `dispatch` — headless, no gap, proven end-to-end.** *Sequencing: the
|
|
28
|
+
context attributes must exist before Step 3 can surface them, so run Step 4 before Step 3's page
|
|
29
|
+
edits.*
|
|
30
|
+
|
|
31
|
+
> **STATUS.** Steps 1–2 (org preference + permission verification) and **Step 4 (Context Service
|
|
32
|
+
> extension)** are grounded, headless, and **verified end-to-end on a dev org via `dispatch` (create +
|
|
33
|
+
> activate + read-back / structural compare, no `sf` CLI)** — see the boxes in Steps 1 and 4. Step 3
|
|
34
|
+
> (page display columns) is a **Manual-UI gap** — documented here so an admin can complete it, but there
|
|
35
|
+
> is no headless/dispatch path for it today.
|
|
36
|
+
|
|
37
|
+
## Grounding (source of truth)
|
|
38
|
+
|
|
39
|
+
All API names below come from the **`IndustriesCommunicationsSales` UDD setting group** (module
|
|
40
|
+
`industries-communications-sales-udd`, owner *Comms Cloud Grand Canyon*) — the authoritative
|
|
41
|
+
definition of these org permissions, user permissions, and org preferences. The org-preference
|
|
42
|
+
read/write **mechanism** is the approved SOR **`RevenueCloudforCommunicationsSettings`**: read
|
|
43
|
+
`get-comms-org-preferences`, write `set-multi-location-enabled` / `set-multi-subscriber-enabled`.
|
|
44
|
+
|
|
45
|
+
| UDD element | API name | Kind | minApiVersion | Gate |
|
|
46
|
+
|---|---|---|---|---|
|
|
47
|
+
| Org preference | `MultiLocationFeatureOrgPref` | orgPreference (boolean) | 262 (API v67.0) | `orgAccess = OrgPermissions.MultiRecipient \|\| OrgPermissions.CMEMultiRecipient`; `editAccess = UserPermissions.CustomizeApplication`; `sysAdminEditable=true` |
|
|
48
|
+
| Org permission | `CMEMultiRecipient` | orgPermission, `type="provisioned"` | 260 (API v66.0) | "Allows an org to use CME MultiSite/MultiRecipient features" |
|
|
49
|
+
| Org permission | `MultiRecipient` | orgPermission, `type="provisioned"` | 254 | "features related to MultiRecipient" — the *base* alternative gate for the org pref |
|
|
50
|
+
| User permission | `CMESales` | userPermission (`PermissionsCMESales`) | 260 | `orgAccess = OrgPermissions.CMEMultiRecipient` |
|
|
51
|
+
| User permission | `UseCommsCloudSalesFeatures` | userPermission (`PermissionsUseCommsCloudSalesFeatures`) | 258 | `orgAccess = OrgPermissions.CommsSales` |
|
|
52
|
+
|
|
53
|
+
Related org preferences unlocked by `CMEMultiRecipient` (out of scope here, listed for context):
|
|
54
|
+
`MultiSubscriberFeatureOrgPref`, `CMELinearRelationshipRulePref`.
|
|
55
|
+
|
|
56
|
+
## Scope & definition of done
|
|
57
|
+
|
|
58
|
+
**In scope:** enable `MultiLocationFeatureOrgPref`; verify `CMEMultiRecipient` and assign the derived
|
|
59
|
+
`CMESales` user permission; document the Quote/Order page display-column edits.
|
|
60
|
+
|
|
61
|
+
**Definition of done:** `get-comms-org-preferences` returns `multiLocationEnabled: true`; `CMESales`
|
|
62
|
+
assigned to the intended profile/permission set (only if the org permission gate is satisfied); the
|
|
63
|
+
Manual-UI page edits documented/handed to the admin.
|
|
64
|
+
|
|
65
|
+
## Preconditions
|
|
66
|
+
|
|
67
|
+
- **Communications Cloud initial setup complete** — see `comms-cloud-initial-setup` (the three sales
|
|
68
|
+
permission sets assigned; Revenue Cloud base + context service + pricing set up).
|
|
69
|
+
- **Licenses required for MultiSite** (per Comms Cloud #2): `CommsCloudRLMAddOn`,
|
|
70
|
+
`CSVImportLicenseAddOn`, `RevenueLifecycleManagementAddOn`, `CMERLMB2BAddon`. The CME add-on
|
|
71
|
+
(`CMERLMB2BAddon`) is what provisions the `CMEMultiRecipient` org permission (Step 2); the
|
|
72
|
+
MultiRecipient PermissionSetLicenses (`CMEMultiRecipientPsl`, `RevLifecycleMgmtMultiRecipientPsl`)
|
|
73
|
+
back the org-permission gate.
|
|
74
|
+
- **Running-user permissions** (per Comms Cloud #2): *View Setup and Configuration*; *Modify All Data*
|
|
75
|
+
**or** *Customize Application* (the org pref's `editAccess`); *Assign Permission Sets*; *Manage
|
|
76
|
+
Users*; *Manage Profiles and Permission Sets*; *Revenue Cloud for Communications Features*; *Manage
|
|
77
|
+
Flow*.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Step 1 — Enable `MultiLocationFeatureOrgPref` (Location Based Quoting and Ordering)
|
|
82
|
+
|
|
83
|
+
**Mechanism: Toggle (OrgPreference) via the approved SOR `RevenueCloudforCommunicationsSettings`, over
|
|
84
|
+
its friendly `/headless/invoke/industries/industries-communications-sales/…` route. Headless — no gap.
|
|
85
|
+
All calls go through `dispatch`; the `sf` CLI is never used.**
|
|
86
|
+
|
|
87
|
+
> **Surface correction (load-bearing).** This pref is **NOT** on the generic native-REST org-preference
|
|
88
|
+
> registry: `GET`/`PATCH /services/data/v67.0/setup/org/preferences/MultiLocationFeatureOrgPref`
|
|
89
|
+
> returns **`404 NOT_FOUND` for both verbs** (the unrelated `CorePricingPreference` 200s on that same
|
|
90
|
+
> surface, so the surface works — this Industries pref simply isn't registered on it). **Do not use
|
|
91
|
+
> `/setup/org/preferences/…` for this toggle.** The working surface is the approved SOR's own friendly
|
|
92
|
+
> `/headless/invoke/industries/industries-communications-sales/…` route.
|
|
93
|
+
|
|
94
|
+
**Call shape — friendly route via `dispatch`.** The approved SOR
|
|
95
|
+
`RevenueCloudforCommunicationsSettings` publishes these operations into the dispatch route table, so a
|
|
96
|
+
plain `dispatch` to the friendly path resolves the controller for you — no envelope, no internal class
|
|
97
|
+
path. Scalar write args ride in the request `body`.
|
|
98
|
+
|
|
99
|
+
- **Read** — `GET /headless/invoke/industries/industries-communications-sales/get-comms-org-preferences`
|
|
100
|
+
→ `{ multiLocationEnabled, multiSubscriberEnabled, productRelationshipRuleEnabled, qtyEditEnabled }`.
|
|
101
|
+
- **Write** — `PATCH /headless/invoke/industries/industries-communications-sales/set-multi-location-enabled`
|
|
102
|
+
with body `{ "value": true }` → returns `true` on success.
|
|
103
|
+
|
|
104
|
+
**1a. Read first (`get-comms-org-preferences`) — this doubles as the org-permission gate probe.**
|
|
105
|
+
- **`200` with a prefs map** → the `userCanUseMultiRecipientFeatureEnabled` gate passes (the org has
|
|
106
|
+
`MultiRecipient || CMEMultiRecipient`). Inspect `multiLocationEnabled`:
|
|
107
|
+
- `true` → already enabled; done.
|
|
108
|
+
- `false` → proceed to the write (1b).
|
|
109
|
+
- **`403` / access-guard error** → the org-permission gate is unmet (neither base `MultiRecipient` nor
|
|
110
|
+
`CMEMultiRecipient` is provisioned — see Step 2). Surface it as a licensing/provisioning gap and stop.
|
|
111
|
+
|
|
112
|
+
**1b. Write `set-multi-location-enabled` with `{value:true}`, then re-read `get-comms-org-preferences`**
|
|
113
|
+
and confirm `multiLocationEnabled:true`. A `true` return on the write alone is not proof — always read
|
|
114
|
+
back. Editing requires **Customize Application** (the pref's UDD `editAccess`).
|
|
115
|
+
|
|
116
|
+
> **Verified on a dev org (via `dispatch`, no `sf` CLI).** `get-comms-org-preferences` → `200
|
|
117
|
+
> {multiLocationEnabled:true, multiSubscriberEnabled:false, productRelationshipRuleEnabled:false,
|
|
118
|
+
> qtyEditEnabled:false}` — **the pref is already enabled and the gate passes**;
|
|
119
|
+
> `set-multi-location-enabled {value:true}` → `200 true`; read-back → `multiLocationEnabled:true`. The
|
|
120
|
+
> dev org holds both `CMEMultiRecipientPsl` and `RevLifecycleMgmtMultiRecipientPsl` PermissionSetLicenses
|
|
121
|
+
> (Active), so the base org-permission gate is satisfied there. **Correction:** an earlier claim that a
|
|
122
|
+
> `404` on `/setup/org/preferences/…` meant a licensing gap was wrong — that `404` was a *wrong-surface*
|
|
123
|
+
> artifact of the native-REST path, not a licensing gap. Dev/scratch success is still not proof of
|
|
124
|
+
> prod-safety.
|
|
125
|
+
|
|
126
|
+
**UI equivalent (for the admin):** Setup → *Revenue Cloud for Communications Settings* → turn on
|
|
127
|
+
**Location Based Quoting and Ordering**.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Step 2 — Verify the `CMEMultiRecipient` org permission (and the perms-side `CMESales` user perm)
|
|
132
|
+
|
|
133
|
+
**Mechanism: read/verify (headless) + permission-set assignment (headless). Provisioning the org
|
|
134
|
+
permission is out-of-band.**
|
|
135
|
+
|
|
136
|
+
**Key fact — you cannot flip `CMEMultiRecipient` from the permissions UI.** It is an **org permission
|
|
137
|
+
with `type="provisioned"`** — granted by *license/feature provisioning* (the `CMERLMB2BAddon` add-on),
|
|
138
|
+
not by an admin toggle or a permission-set field. There is no headless "enable org permission" step
|
|
139
|
+
because there is no such admin operation; the only way to obtain it is to provision the licence.
|
|
140
|
+
|
|
141
|
+
**2a. Verify presence — the cheapest signal is the Step-1 read.** If `get-comms-org-preferences`
|
|
142
|
+
(Step 1a) returned **`200` (not `403`)**, the `userCanUseMultiRecipientFeatureEnabled` gate —
|
|
143
|
+
`OrgPermissions.MultiRecipient || OrgPermissions.CMEMultiRecipient` — is already satisfied, so the base
|
|
144
|
+
org permission is present. To distinguish base-vs-CME and confirm the CME tier, corroborate via
|
|
145
|
+
licenses and the derived user permission (a provisioned org permission has no direct admin read
|
|
146
|
+
surface):
|
|
147
|
+
- **License check** — `SELECT DeveloperName, MasterLabel, Status FROM PermissionSetLicense`; look for
|
|
148
|
+
the MultiRecipient PSLs `CMEMultiRecipientPsl` (CME tier) and `RevLifecycleMgmtMultiRecipientPsl`
|
|
149
|
+
(base) Active, plus the add-ons in Preconditions. Absent `CMEMultiRecipientPsl` ⇒ the CME tier isn't
|
|
150
|
+
provisioned even if base `MultiRecipient` is.
|
|
151
|
+
- **PSL-assignment check (the reliable CME-tier signal)** — `SELECT AssigneeId, Assignee.Name,
|
|
152
|
+
PermissionSetLicense.DeveloperName FROM PermissionSetLicenseAssign WHERE
|
|
153
|
+
PermissionSetLicense.DeveloperName IN ('CMEMultiRecipientPsl','RevLifecycleMgmtMultiRecipientPsl')`. A
|
|
154
|
+
`CMEMultiRecipientPsl` row means the CME seat is assigned to a real user, so the CME tier is
|
|
155
|
+
provisioned and `CMESales` is assignable.
|
|
156
|
+
- **Named permission-set check** — query the CME set **specifically**: `SELECT Id, Name, Label FROM
|
|
157
|
+
PermissionSet WHERE Name = 'CMESalesStandardPermissionSet' OR Label = 'CME Sales Features'`. A row here
|
|
158
|
+
confirms the assignable CME Sales permission set exists; use its `Id` as the `PermissionSetId` in 2b.
|
|
159
|
+
Do **not** substitute `CommsCloudSalesFeatures` (Label 'Revenue Cloud for Communications Features') — it
|
|
160
|
+
is a **distinct base-tier** set carrying only `PermissionsUseCommsCloudSalesFeatures` (assigned during
|
|
161
|
+
`comms-cloud-initial-setup`), **not** the CME/MultiSite grant. If a broad query surfaces both, pick the
|
|
162
|
+
`CMESalesStandardPermissionSet` row; assigning the base set leaves the user without MultiSite.
|
|
163
|
+
|
|
164
|
+
> ⚠ **Do NOT detect CME via the `PermissionsCMESales` boolean column.** The `Permissions*` columns on
|
|
165
|
+
> `PermissionSet` (including `PermissionsCMESales` and the base `PermissionsUseCommsCloudSalesFeatures`)
|
|
166
|
+
> are frequently **not SOQL-queryable** even when the feature is fully provisioned and the permission set
|
|
167
|
+
> is assigned — `SELECT ... WHERE PermissionsCMESales = true` returns **0 rows** and a `FieldDefinition
|
|
168
|
+
> LIKE 'PermissionsCME%'` probe returns nothing / `No such column`. **That is a query-surface limitation,
|
|
169
|
+
> not evidence the tier is absent** (observed on a dev org that had `CMEMultiRecipientPsl` assigned and
|
|
170
|
+
> `CMESalesStandardPermissionSet` present). Detect via the **PSL-assignment** + **named permission-set**
|
|
171
|
+
> checks above instead.
|
|
172
|
+
|
|
173
|
+
**2b. If the CME tier is provisioned (a `CMEMultiRecipientPsl` seat is assigned AND the CME Sales
|
|
174
|
+
permission set exists) → enable from the perms side.** Assign the **`CMESalesStandardPermissionSet`**
|
|
175
|
+
found in 2a to the intended user (headless, standard permission-set assignment — the same mechanism
|
|
176
|
+
`comms-cloud-initial-setup` uses): `POST /sobjects/PermissionSetAssignment {AssigneeId, PermissionSetId}`,
|
|
177
|
+
where `PermissionSetId` is the `CMESalesStandardPermissionSet` Id.
|
|
178
|
+
The `CMESalesStandardPermissionSet` carries `PermissionsCMESales` (gated on `CMEMultiRecipient`) — this is
|
|
179
|
+
the MultiSite grant; `CommsCloudSalesFeatures` carries the base `PermissionsUseCommsCloudSalesFeatures`
|
|
180
|
+
(gated on `CommsSales`) and is **not** interchangeable — never assign it as the CME tier.
|
|
181
|
+
|
|
182
|
+
**2c. Only if the CME tier is genuinely absent (NO `CMEMultiRecipientPsl` seat AND NO CME Sales
|
|
183
|
+
permission set) → report a licensing gap, do not proceed to enable.** Note that
|
|
184
|
+
`MultiLocationFeatureOrgPref` (Step 1) may still be enableable via the **base `MultiRecipient`** org
|
|
185
|
+
permission (minApi 254) even without the CME add-on — but CME-specific MultiSite/MultiRecipient
|
|
186
|
+
features (and `MultiSubscriberFeatureOrgPref`, `CMELinearRelationshipRulePref`) will not be available.
|
|
187
|
+
|
|
188
|
+
> ⚠ **GAP — provisioned org permission.** `CMEMultiRecipient` cannot be enabled headlessly or from
|
|
189
|
+
> Setup; it is licence-provisioned. This step *verifies and reports*; it does not (and cannot) grant it.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Step 3 — Edit the Quote and Order page display columns ⚠ Manual-UI GAP
|
|
194
|
+
|
|
195
|
+
**Mechanism: Manual-UI (Lightning App Builder + Flow Builder). No headless/dispatch surface today.**
|
|
196
|
+
Enabling Step 1 adds the **Locations** capability; surfacing it on the pages is a manual App Builder
|
|
197
|
+
edit. Document these for the admin (fields below are the SMB Fiber recipient attributes defined in
|
|
198
|
+
**Comms Cloud #3 — SMB Fiber Products**).
|
|
199
|
+
|
|
200
|
+
**3a. Add the Locations tab + Recipient Wrapper (Edit Quote and Order Page):**
|
|
201
|
+
1. Click the **Tab** component → **Add Tab** in the Tabs component properties.
|
|
202
|
+
2. Set the tab label to **Custom** and enter **Locations**.
|
|
203
|
+
3. Drag the **Recipient Wrapper** component into the Location section.
|
|
204
|
+
4. **Save** → **Activate** the page → **Assign as Org Default**.
|
|
205
|
+
|
|
206
|
+
**3b. Quote Line Items section → Select from Display Columns** — move these from Available to Selected,
|
|
207
|
+
then **OK → Save → Activate**:
|
|
208
|
+
`Product` · `Quantity` · `Quote Recipient Group` · `Recipient Scaled Quantity` ·
|
|
209
|
+
`Selling Model Type` · `Discount (Percentage)` · `List Price` · `Total Price` ·
|
|
210
|
+
`Quote Line Item Recipient`.
|
|
211
|
+
|
|
212
|
+
**3c. Recipient Wrapper → Display Fields (Locations tab)** — under *Display Fields → Select…*, move to
|
|
213
|
+
Selected and arrange:
|
|
214
|
+
`Service Street` · `Max Download Speed` · `Max Upload Speed` · `Service Postal Code` ·
|
|
215
|
+
`Broadband Connection Type` · `Service City` · `Service Country` · `Service State` · `Name`.
|
|
216
|
+
|
|
217
|
+
**3d. Recipient Wrapper → Organise Fields (View By Predefined Type)** — under *Organise Fields →
|
|
218
|
+
Select…*, move to Selected:
|
|
219
|
+
`Service Street` · `Max Download Speed` · `Max Upload Speed` · `Service Postal Code`.
|
|
220
|
+
|
|
221
|
+
**3e. Onboarding Flow (optional, Manual-UI / Flow Builder).** In the *Customer Onboarding* flow, create
|
|
222
|
+
a Text collection variable (Allow multiple values, Available for input), add an Assignment after the
|
|
223
|
+
*Customer Quote Form* element that Adds `QuoteLineItemRecipient.<column_name>` entries, then on the
|
|
224
|
+
*ValidateAddress* element's **Recipient Wrapper** component select that collection variable under
|
|
225
|
+
**Display Fields** (and repeat with a second collection variable under **Organise Fields**). Save +
|
|
226
|
+
activate the flow.
|
|
227
|
+
|
|
228
|
+
> ⚠ **GAP — Manual-UI.** Steps 3a–3e have no headless surface. An agent cannot verify the page/flow
|
|
229
|
+
> state via `dispatch`; verification is visual/manual.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Step 4 — Stand up the Context Service extension for multi-recipient attributes (headless)
|
|
234
|
+
|
|
235
|
+
**Mechanism: Context Connect API (native REST) via `dispatch` — headless, no gap.** All calls are plain
|
|
236
|
+
authenticated `dispatch` to `/services/data/v67.0/connect/context-*` (native-REST pass-through, **not**
|
|
237
|
+
the `/headless/invoke` envelope, **not** the `sf` CLI). Every op carries the org-access-check
|
|
238
|
+
**`Context Definitions enabled`**. *Run this before Step 3 — the page can only surface attributes that
|
|
239
|
+
already exist on the context definition.*
|
|
240
|
+
|
|
241
|
+
**What this is.** The multi-recipient / MultiSite recipient fields the Quote/Order pages show (Step 3:
|
|
242
|
+
`Service City`, the Recipient Group counts, …) are backed by a **Context Service context definition**.
|
|
243
|
+
A fresh Comms Cloud org already ships the standard **`ConsumerSalesContext__stdctx`** definition. You do
|
|
244
|
+
**not** rebuild it and you do **not** diff it against anything at run time — you create a thin **custom
|
|
245
|
+
extension** of it (`definitionType: custom_nonexecutable`, `baseReference:
|
|
246
|
+
ConsumerSalesContext__stdctx`) that inherits every base node/attribute untouched and layers on **only**
|
|
247
|
+
the MultiSite deltas below. (The CME B2B reference definition `CME_264_B2B_Ctx` was used *once, offline*,
|
|
248
|
+
to derive exactly which deltas are needed — the concrete list is now baked into the tables below, so no
|
|
249
|
+
CMEB2B definition need exist in the target org.)
|
|
250
|
+
|
|
251
|
+
The delta is small and fully specified: **5 new attribute definitions** across 2 inherited nodes, and
|
|
252
|
+
**16 attribute-mappings** across all **4** entity groups (Cart / Quote / Order / **Asset**). Nothing is
|
|
253
|
+
removed; no new node is created.
|
|
254
|
+
|
|
255
|
+
**5a. Delta attribute definitions to add** (onto the two already-inherited nodes):
|
|
256
|
+
|
|
257
|
+
| Inherited node | Attribute (`key`/`title`) | dataType |
|
|
258
|
+
|---|---|---|
|
|
259
|
+
| `SalesTransactionItem` | `RecipientCity__c` | string |
|
|
260
|
+
| `SalesTransactionItem` | `RecipientGroupMemberCount__c` | number |
|
|
261
|
+
| `SalesTransactionItem` | `RecipientGroupExpectedCount__c` | number |
|
|
262
|
+
| `SalesTransactionItem` | `DerivedSellingModelType__c` | string |
|
|
263
|
+
| `SalesTransactionItemDetail` | `SalesTransactionItemDetailGroup__c` | string |
|
|
264
|
+
|
|
265
|
+
All five are `fieldType: inputoutput`. That's **5 attribute definitions** — but each maps into more than
|
|
266
|
+
one entity, giving 16 mappings below.
|
|
267
|
+
|
|
268
|
+
**5b. The 16 attribute-mappings — one row per (entity group → node → sObject → attribute).** `src` is the
|
|
269
|
+
`contextInputAttributeName` (the field/relationship the mapping reads); `hydration` is spelled out for
|
|
270
|
+
the 5 rows that need it, everything else is a plain direct field.
|
|
271
|
+
|
|
272
|
+
**Cart group** (`CartEntitiesMapping`) — all 5 direct, no hydration:
|
|
273
|
+
|
|
274
|
+
| Node | sObject | attribute | src | hydration |
|
|
275
|
+
|---|---|---|---|---|
|
|
276
|
+
| `SalesTransactionItem` | `CartItem` | `RecipientGroupMemberCount__c` | `RecipientGroupMemberCount__c` | — direct |
|
|
277
|
+
| `SalesTransactionItem` | `CartItem` | `RecipientGroupExpectedCount__c` | `RecipientGroupExpectedCount__c` | — direct |
|
|
278
|
+
| `SalesTransactionItem` | `CartItem` | `RecipientCity__c` | `RecipientCity__c` | — direct |
|
|
279
|
+
| `SalesTransactionItem` | `CartItem` | `DerivedSellingModelType__c` | `DerivedSellingModelType__c` | — direct |
|
|
280
|
+
| `SalesTransactionItemDetail` | `CartItemDetail` | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetailGroup__c` | — direct |
|
|
281
|
+
|
|
282
|
+
**Quote group** (`QuoteEntitiesMapping`) — 4 hydrated + 1 direct:
|
|
283
|
+
|
|
284
|
+
| Node | sObject | attribute | src | hydration |
|
|
285
|
+
|---|---|---|---|---|
|
|
286
|
+
| `SalesTransactionItem` | `QuoteLineItem` | `RecipientGroupMemberCount__c` | `RecipientGroupMemberCount__c` | 2-hop `QuoteLineItem → QuoteRecipientGroup` → leaf `ActualMemberCount` |
|
|
287
|
+
| `SalesTransactionItem` | `QuoteLineItem` | `RecipientCity__c` | `RecipientCity__c` | 2-hop `QuoteLineItem → QuoteLineItemRecipient` → leaf `ServiceCity` |
|
|
288
|
+
| `SalesTransactionItem` | `QuoteLineItem` | `RecipientGroupExpectedCount__c` | `RecipientGroupExpectedCount__c` | 2-hop `QuoteLineItem → QuoteRecipientGroup` → leaf `ExpectedMemberCount` |
|
|
289
|
+
| `SalesTransactionItem` | `QuoteLineItem` | `DerivedSellingModelType__c` | `DerivedSellingModelType__c` | 1-hop `QuoteLineItem → Derived_Selling_Model_Type__c` |
|
|
290
|
+
| `SalesTransactionItemDetail` | `QuoteLineDetail` | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetailGroup__c` | — direct |
|
|
291
|
+
|
|
292
|
+
**Order group** (`OrderEntitiesMapping`) — 1 hydrated + 4 direct:
|
|
293
|
+
|
|
294
|
+
| Node | sObject | attribute | src | hydration |
|
|
295
|
+
|---|---|---|---|---|
|
|
296
|
+
| `SalesTransactionItem` | `OrderItem` | `RecipientCity__c` | `RecipientCity__c` | 2-hop `OrderItem → OrderItemRecipient` → leaf `ServiceCity` |
|
|
297
|
+
| `SalesTransactionItem` | `OrderItem` | `RecipientGroupExpectedCount__c` | `RecipientGroupExpectedCount__c` | — direct |
|
|
298
|
+
| `SalesTransactionItem` | `OrderItem` | `RecipientGroupMemberCount__c` | `RecipientGroupMemberCount__c` | — direct |
|
|
299
|
+
| `SalesTransactionItem` | `OrderItem` | `DerivedSellingModelType__c` | `DerivedSellingModelType__c` | — direct |
|
|
300
|
+
| `SalesTransactionItemDetail` | `OrderItemDetail` | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetailGroup__c` | — direct |
|
|
301
|
+
|
|
302
|
+
**Asset group** (`AssetEntitiesMapping`) — 1 mapping (do **not** skip this group):
|
|
303
|
+
|
|
304
|
+
| Node | sObject | attribute | src | hydration |
|
|
305
|
+
|---|---|---|---|---|
|
|
306
|
+
| `SalesTransactionItemDetail` | `SalesTransactionItemDetail` | `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetailGroup__c` | — direct |
|
|
307
|
+
|
|
308
|
+
**Why hydration only in Quote/Order.** On `CartItem` and `OrderItem` the recipient/count/selling-model
|
|
309
|
+
values live as direct columns, so the mapping reads them straight. On `QuoteLineItem` those same values
|
|
310
|
+
live on related records (`QuoteRecipientGroup`, `QuoteLineItemRecipient`) — hence the 2-hop trees — and
|
|
311
|
+
`Derived_Selling_Model_Type__c` is reached via a single hop. `RecipientCity__c` on `OrderItem` is the one
|
|
312
|
+
Order-group value that also lives on a related record (`OrderItemRecipient`), so it too hydrates. **5
|
|
313
|
+
mappings hydrate (4 two-hop + 1 one-hop); the other 11 are direct.**
|
|
314
|
+
|
|
315
|
+
**Call sequence (all `dispatch`, base `/services/data/v67.0/connect/`):**
|
|
316
|
+
|
|
317
|
+
1. **Preflight the base, then create the extension.** First confirm the base definition exists —
|
|
318
|
+
`GET /context-definitions/ConsumerSalesContext__stdctx` must return `200`. A fresh Comms Cloud org
|
|
319
|
+
ships it; a `404` means Context Service / the standard Consumer Sales context isn't provisioned in this
|
|
320
|
+
org — **stop and resolve that first**, since the whole extension `baseReference`s it and the create will
|
|
321
|
+
otherwise fail. Then `POST /context-definitions` with body
|
|
322
|
+
`{"developerName":"customcommsconsumersalescd","name":"customcommsconsumersalescd","baseReference":"ConsumerSalesContext__stdctx"}`
|
|
323
|
+
(sensible default — rename freely, but mind two wire-proven limits: **`name` (the label) must be ≤30
|
|
324
|
+
chars, alphanumeric only, NO spaces** — a spaced/long label is rejected `INVALID_INPUT`/`RECORD_CREATION_FAILED`;
|
|
325
|
+
`developerName` allows underscores, starts with a letter, no trailing/double underscore). **The `POST` is
|
|
326
|
+
asynchronous: a `500 INTERNAL_ERROR` (or timeout) is a spurious sync-timeout, NOT a failure — the record
|
|
327
|
+
materializes a moment later. Do not branch on 200-vs-500; confirm by polling.** Poll
|
|
328
|
+
`GET /context-definitions/{developerName}` up to ~6× with a short wait, and read the *shape*, not `isSuccess`:
|
|
329
|
+
when `contextDefinitionId` is a real id (starts with `11O…`) and `contextDefinitionVersionList` is non-empty
|
|
330
|
+
the create is done — capture that `11O…` id and stop. While it is still in-flight (or genuinely absent) the GET
|
|
331
|
+
returns an identical empty shell (`isSuccess:false`, `contextDefinitionId` echoing the developerName, empty
|
|
332
|
+
version list) — that shape is NOT proof of absence, so keep polling until the window elapses. Re-`POST` only if
|
|
333
|
+
the whole window stays the echo-shell; and if a `POST` ever returns "already exists"/duplicate, that PROVES it
|
|
334
|
+
was created — **never `DELETE` and recreate** (delete-then-recreate on a just-created record is the infinite
|
|
335
|
+
loop). Returns the new `contextDefinitionId`. (Leave `isActive` off / false — activate last, step 7, after the context tags in step 6.) Then
|
|
336
|
+
`GET /context-definitions/{id}` (or `getContextDefinitionWithDynamicAttributes`) to read back the
|
|
337
|
+
inherited node/mapping ids — you need each node's `contextNodeId` (step 2) and each entity's
|
|
338
|
+
`nodeMappingId` (step 3), and they're inherited from the base, not authored by you.
|
|
339
|
+
2. **Add the 5 delta attribute definitions** (table 5a) — `POST /context-nodes/{contextNodeId}/context-attributes`
|
|
340
|
+
with `{"contextAttributes":[ {"name":"RecipientCity__c","dataType":"STRING","fieldType":"INPUTOUTPUT"}, … ]}`:
|
|
341
|
+
the 4 recipient attributes onto the `SalesTransactionItem` node, `SalesTransactionItemDetailGroup__c`
|
|
342
|
+
onto the `SalesTransactionItemDetail` node. **`dataType`/`fieldType` are UPPERCASE enums** (`STRING`,
|
|
343
|
+
`NUMBER`, …, `INPUTOUTPUT`) — the values are stored and returned uppercase; map the 5a table's
|
|
344
|
+
`string`/`number` to `STRING`/`NUMBER`. **Capture the returned `contextAttributeId` for each** — the
|
|
345
|
+
response `attributes[]` (and a follow-up GET) carry it, and step 3 references the attribute **by that
|
|
346
|
+
id**, not by name.
|
|
347
|
+
3. **Create the 16 attribute-mappings** (table 5b) — `POST /context-node-mappings/{nodeMappingId}/context-attribute-mappings`
|
|
348
|
+
with `{"contextAttributeMappings":[ {…} ], "deleteExistingHydrationDetails": false}`, once per entity
|
|
349
|
+
group's node-mapping — **all four: Cart, Quote, Order, and Asset.** Each mapping element is
|
|
350
|
+
`{"contextAttributeId":"<id from step 2>","contextInputAttributeName":"<src>"}` — the mapping links to
|
|
351
|
+
the attribute by its **`contextAttributeId`** (there is **no** `contextAttribute`/`contextAttributeName`
|
|
352
|
+
input field; posting a name is silently ignored → the mapping binds to nothing). The 11 direct rows stop
|
|
353
|
+
there; the 5 hydrated rows add a `hydrationDetails` block (step 4). The Asset group is a single mapping
|
|
354
|
+
(`SalesTransactionItemDetailGroup__c` on `SalesTransactionItemDetail`) — easy to forget; do not skip it.
|
|
355
|
+
4. **Attach hydration on the same POST** (the hydrated rows) via a `hydrationDetails` block. The wrapper is
|
|
356
|
+
**recursive at every level**: the top `hydrationDetails` value **and** each hop's `childDetails` value are
|
|
357
|
+
the object `{"contextAttrHydrationDetails":[ <hop>, … ]}` — **never a bare array**. Each hop is
|
|
358
|
+
`{"queryAttribute":"<rel-or-field>","sObjectDomain":"<parent sObject>","childDetails":{…}}`, and a **leaf
|
|
359
|
+
hop OMITS `childDetails` entirely** (a bare-array `childDetails:[…]`, an empty `childDetails:[]`, or a
|
|
360
|
+
`childDetails:{queryAttribute:…}` object without the `contextAttrHydrationDetails` wrapper are all
|
|
361
|
+
rejected with `JSON_PARSER_ERROR`). **2-hop** (e.g. Quote `RecipientCity__c` — `childDetails` re-wraps):
|
|
362
|
+
```json
|
|
363
|
+
{"hydrationDetails":{"contextAttrHydrationDetails":[
|
|
364
|
+
{"queryAttribute":"QuoteLineItemRecipient","sObjectDomain":"QuoteLineItem",
|
|
365
|
+
"childDetails":{"contextAttrHydrationDetails":[
|
|
366
|
+
{"queryAttribute":"ServiceCity","sObjectDomain":"QuoteLineItemRecipient"}
|
|
367
|
+
]}}
|
|
368
|
+
]}}
|
|
369
|
+
```
|
|
370
|
+
**1-hop** (Quote `DerivedSellingModelType__c` → a single leaf hop, `childDetails` omitted):
|
|
371
|
+
```json
|
|
372
|
+
{"hydrationDetails":{"contextAttrHydrationDetails":[
|
|
373
|
+
{"queryAttribute":"Derived_Selling_Model_Type__c","sObjectDomain":"QuoteLineItem"}
|
|
374
|
+
]}}
|
|
375
|
+
```
|
|
376
|
+
Two attributes may share the first hop and differ only by the leaf `queryAttribute` (the two
|
|
377
|
+
RecipientGroup counts both hop `QuoteLineItem → QuoteRecipientGroup`, differing only by leaf
|
|
378
|
+
`ActualMemberCount` vs `ExpectedMemberCount`) — that is **not** a collision. On **read-back**, the same
|
|
379
|
+
tree renders under `contextAttrHydrationDetailList` where `childDetails` IS a plain array — the array↔
|
|
380
|
+
object-wrapper asymmetry between read and POST-input is the single biggest time-sink here.
|
|
381
|
+
> ⚠ **The 1-hop leaf `QuoteLineItem.Derived_Selling_Model_Type__c` must exist on the target org.** This
|
|
382
|
+
> mapping is a **CMEB2B delta** — it exists because the `CME_264_B2B_Ctx` reference definition maps it on
|
|
383
|
+
> `QuoteLineItem` (Cart/Order carry the value as a direct column instead). If that custom field is **absent
|
|
384
|
+
> on the target org's `QuoteLineItem`**, the hop can't resolve and this one tree silently no-ops → you get
|
|
385
|
+
> **4/5** hydration trees, not 5. The field's provisioning source is org-dependent (present on one
|
|
386
|
+
> verification org, absent on another) — **verify the field exists before expecting all 5**; do not assume
|
|
387
|
+
> any particular steel thread creates it.
|
|
388
|
+
5. **Verify each write with a read-back** — `GET /context-node-mappings/{nodeMappingId}/context-attribute-mappings/{attrMappingId}`;
|
|
389
|
+
the persisted hydration renders under `contextAttrHydrationDetailList` with the nested leaf under
|
|
390
|
+
`childDetails`. Confirm all 16 mappings and all 5 hydration trees are present.
|
|
391
|
+
6. **Create a context tag for each delta attribute — COMPULSORY, do this BEFORE activation (step 7).** The 5 attribute
|
|
392
|
+
definitions from step 2 are *not enough on their own*: a Pricing Procedure (ExpressionSet,
|
|
393
|
+
`interfaceSourceType=PricingProcedure`) resolves an attribute's **data type by its context-tag
|
|
394
|
+
name, not by the attribute name**. Every base attribute inherits a tag automatically, but the
|
|
395
|
+
**skill-added deltas do not** — so without this step the extension is structurally complete yet a
|
|
396
|
+
Pricing Procedure that references it fails to compile with
|
|
397
|
+
**`Specify a valid data type for the formula-section-0-output variable`** (the tag lookup returns
|
|
398
|
+
nothing → unresolvable data type). Create one tag per delta, **tag `name` == the attribute's API
|
|
399
|
+
name** (this mirrors how `CME_264_B2B_Ctx` tags its custom `__c` deltas — the tag `<title>` equals
|
|
400
|
+
the attribute API name):
|
|
401
|
+
|
|
402
|
+
`POST /context-definitions/{contextDefinitionId}/context-tags` with
|
|
403
|
+
|
|
404
|
+
```json
|
|
405
|
+
{"contextTags":[
|
|
406
|
+
{"name":"RecipientCity__c", "contextAttributeId":"<RecipientCity__c id>"},
|
|
407
|
+
{"name":"RecipientGroupMemberCount__c", "contextAttributeId":"<RecipientGroupMemberCount__c id>"},
|
|
408
|
+
{"name":"RecipientGroupExpectedCount__c", "contextAttributeId":"<RecipientGroupExpectedCount__c id>"},
|
|
409
|
+
{"name":"DerivedSellingModelType__c", "contextAttributeId":"<DerivedSellingModelType__c id>"},
|
|
410
|
+
{"name":"SalesTransactionItemDetailGroup__c","contextAttributeId":"<SalesTransactionItemDetailGroup__c id>"}
|
|
411
|
+
]}
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
| Tag `name` (== attribute API name) | Links to attribute on node |
|
|
415
|
+
|---|---|
|
|
416
|
+
| `RecipientCity__c` | `SalesTransactionItem` |
|
|
417
|
+
| `RecipientGroupMemberCount__c` | `SalesTransactionItem` |
|
|
418
|
+
| `RecipientGroupExpectedCount__c` | `SalesTransactionItem` |
|
|
419
|
+
| `DerivedSellingModelType__c` | `SalesTransactionItem` |
|
|
420
|
+
| `SalesTransactionItemDetailGroup__c` | `SalesTransactionItemDetail` |
|
|
421
|
+
|
|
422
|
+
**Wire gotchas (both cost a round-trip if missed):**
|
|
423
|
+
- The tag-input schema accepts **only `name` + `contextAttributeId`**. Posting `dynamic` (or any
|
|
424
|
+
other field copied from the read-back shape) is rejected `400 JSON_PARSER_ERROR:
|
|
425
|
+
"Unrecognized field 'dynamic'"`. `dynamic` defaults to `false` and comes back on the response —
|
|
426
|
+
it is **output-only**, never input.
|
|
427
|
+
- A tag binds to its attribute **by `contextAttributeId`** (the id captured in step 2), same as the
|
|
428
|
+
mappings — there is no name-based binding.
|
|
429
|
+
|
|
430
|
+
Returns a `contextTagId` per tag. Verify with `GET /context-definitions/{id}/context-tags` (or the
|
|
431
|
+
`attributeTags[]` on a `getContextDefinitionWithDynamicAttributes` read-back) — the 5 deltas should
|
|
432
|
+
now each carry a tag whose `name` equals the attribute API name.
|
|
433
|
+
7. **Set a default mapping FIRST, then activate (LAST step).** Activation refuses a definition that has no default
|
|
434
|
+
entity-mapping (`400 DATA_MAPPING_NOT_FOUND: "Cannot activate a definition without default mapping"`) —
|
|
435
|
+
and the inherited mappings come across with `isDefault:false`, so you **must** flip one on yourself. Mirror
|
|
436
|
+
the **base** default: read `GET /context-definitions/ConsumerSalesContext__stdctx`, find the
|
|
437
|
+
`contextMappings[]` entry with `isDefault:true` (it is **`CartEntitiesMapping`**), then
|
|
438
|
+
`PATCH /context-definitions/{contextDefinitionId}/context-mappings` with
|
|
439
|
+
`{"contextMappings":[{"contextMappingId":"<your Cart mapping id>","name":"CartEntitiesMapping","isDefault":true}]}`.
|
|
440
|
+
Only then `PATCH /context-definitions/{contextDefinitionId}` with `{"isActive": true}` → returns
|
|
441
|
+
`isActive:true` + an `activeVersionId`. Confirm both. The context tags (step 6) **must already exist
|
|
442
|
+
before this activate** — activating first leaves the deltas untagged and a downstream Pricing
|
|
443
|
+
Procedure won't compile.
|
|
444
|
+
|
|
445
|
+
> **Load-bearing gotchas.**
|
|
446
|
+
> - **A mapping references its attribute by `contextAttributeId`, not by name.** The mapping-input schema
|
|
447
|
+
> (`ContextAttributeMappingsInputRepresentation`) has `contextAttributeId` + `contextInputAttributeName`
|
|
448
|
+
> only — there is **no** `contextAttribute`/`contextAttributeName` input field. So you must create the
|
|
449
|
+
> attribute first (step 2), keep its returned `contextAttributeId`, and feed that id into the mapping.
|
|
450
|
+
> Posting an attribute *name* is accepted but binds the mapping to nothing.
|
|
451
|
+
> - **`hydrationDetails` — object wrapper, not a bare array.** The OAS declares `hydrationDetails` as an
|
|
452
|
+
> *array of hops* on the mapping input, but the runtime wants the **object-wrapper** form
|
|
453
|
+
> `{"hydrationDetails":{"contextAttrHydrationDetails":[ <hop> ]}}` (schema
|
|
454
|
+
> `ContextAttrHydrationDetailListInputRepresentation`). Posting the bare-array shape the OAS implies
|
|
455
|
+
> fails — this, plus guessing the leaf shape, is what produced the two `INVALID_DEFINITION` errors when
|
|
456
|
+
> this was first built.
|
|
457
|
+
> - **Hydration persists only on the create-list `POST`.** `PATCH` on an attribute-mapping **silently
|
|
458
|
+
> drops** hydration (returns success, hydration gone). To *replace* wrong hydration, re-POST with
|
|
459
|
+
> **`deleteExistingHydrationDetails: true`** (or DELETE the mapping and re-POST) — never PATCH it.
|
|
460
|
+
> - **`childDetails` on POST-input IS a `{contextAttrHydrationDetails:[…]}` wrapper (recursive), not a bare
|
|
461
|
+
> array.** The wrapper repeats at every non-leaf level; leaf hops omit `childDetails`. (Read-back inverts
|
|
462
|
+
> this: there `childDetails` is a plain array — do not copy the read shape into a POST.)
|
|
463
|
+
> - **Activation needs a default mapping (step 7).** A brand-new extension inherits every mapping with
|
|
464
|
+
> `isDefault:false`; `PATCH {isActive:true}` on it fails `DATA_MAPPING_NOT_FOUND` until you flip one
|
|
465
|
+
> (`CartEntitiesMapping`, mirroring the base) to `isDefault:true`.
|
|
466
|
+
> - **Delta attributes need context tags or pricing can't resolve them (step 6, before activation).** Creating the
|
|
467
|
+
> attribute + mapping is not sufficient for a Pricing Procedure: the ExpressionSet resolves each
|
|
468
|
+
> output variable's data type via the attribute's **context-tag name**. Base attributes inherit
|
|
469
|
+
> their tags; the 5 skill-added deltas do **not** — you must POST a tag (`name` == attribute API
|
|
470
|
+
> name) for each, or the PP compile fails `Specify a valid data type for the formula-section-0-output
|
|
471
|
+
> variable`. This is invisible at the CD level (the definition activates fine) — it only surfaces
|
|
472
|
+
> when a pricing procedure references the definition.
|
|
473
|
+
> - A write returning `isSuccess:true` / `true` is a call-succeeded flag, **not** proof of persisted
|
|
474
|
+
> state — always read back (same verify-before-substitute discipline as Step 1).
|
|
475
|
+
|
|
476
|
+
> **Verified end-to-end on dev orgs (via `dispatch`, no `sf` CLI).** Built the extension as a
|
|
477
|
+
> `custom_nonexecutable` with `baseReference: ConsumerSalesContext__stdctx`; added the 5 delta attribute
|
|
478
|
+
> definitions; created all 16 mappings across Cart/Quote/Order/Asset; attached the hydration trees (two-hop
|
|
479
|
+
> + one-hop, each hop a recursive `childDetails:{contextAttrHydrationDetails:[…]}` wrapper); activated with
|
|
480
|
+
> `PATCH {isActive:true}`. Every mapped field, `sObjectDomain`, and hop tree matched the delta tables above.
|
|
481
|
+
> Activation required the default-mapping precondition (Step 6) — the base default is `CartEntitiesMapping`;
|
|
482
|
+
> without re-asserting `isDefault:true` on the Cart mapping the activate returns `DATA_MAPPING_NOT_FOUND`.
|
|
483
|
+
>
|
|
484
|
+
> **Hydration-tree count is org-dependent.** One verification org persisted **5/5** trees; another persisted
|
|
485
|
+
> **4/5** — on the latter the Quote 1-hop leaf `QuoteLineItem.Derived_Selling_Model_Type__c` was absent, so
|
|
486
|
+
> that single tree silently dropped (target-org field-presence, **not** a wire bug and **not** a steel-thread
|
|
487
|
+
> sequencing dependency — see Step 4 item 4). The other 15 mappings and 4 hydration trees are unaffected.
|
|
488
|
+
>
|
|
489
|
+
> Fully headless — every call is authenticated Connect REST, so it runs the same from a hosted agent
|
|
490
|
+
> (ChatGPT/Slackbot) as from Claude Code. Dev/scratch success is still not proof of prod-safety.
|
|
491
|
+
>
|
|
492
|
+
> **Tag step verified.** Created the 5 attribute-level context tags (`name` == attribute API name,
|
|
493
|
+
> bound by `contextAttributeId`) on the extension **before activating**, then activated — all via
|
|
494
|
+
> `dispatch`. Read-back (`GET /context-definitions/{id}/context-tags`) returns one tag per delta. The
|
|
495
|
+
> tags are what let a downstream Pricing Procedure resolve each delta's data type by its tag name;
|
|
496
|
+
> authoring/deploying that Pricing Procedure is the next steel thread's concern and is out of scope
|
|
497
|
+
> here.
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## Verification & handoff
|
|
502
|
+
|
|
503
|
+
- **Headless-verifiable:** `get-comms-org-preferences` (Step 1) → `multiLocationEnabled:true`
|
|
504
|
+
(Step 1b); `CMESales` present on the target profile/permission set (Step 2b, when applicable); the
|
|
505
|
+
Context Service extension (Step 4) active with the 5 delta attribute definitions, all 16 mappings
|
|
506
|
+
(Cart/Quote/Order/Asset), the 5 hydration trees (4 two-hop + 1 one-hop), and the 5 context tags
|
|
507
|
+
(one per delta, `name` == attribute API name — Step 4 item 6, created before activation) present — `GET
|
|
508
|
+
/context-definitions/{id}` → `isActive:true`, per-mapping read-backs match the delta tables in
|
|
509
|
+
Step 4, and `GET /context-definitions/{id}/context-tags` returns a tag per delta.
|
|
510
|
+
- **Manual-only (⚠ gap):** Quote/Order pages modified; onboarding flow configured — confirmed
|
|
511
|
+
visually, not via `dispatch`. Per Comms Cloud #2 there is no headless way to render a Go-style
|
|
512
|
+
"setup complete / what's next" view; assemble the summary from raw introspection.
|
|
513
|
+
- **Handoff:** the MultiSite thread hands off to **Comms Cloud #3 — SMB Fiber Products** (catalog CSV
|
|
514
|
+
import), which defines the products behind the display fields above.
|
|
515
|
+
|
|
516
|
+
## Notes
|
|
517
|
+
|
|
518
|
+
- This is the enablement layer of the second of three Comms Cloud steel threads:
|
|
519
|
+
**initial setup → multisite (enable → this) → SMB fiber product setup.**
|
|
520
|
+
- **Use the approved SOR `RevenueCloudforCommunicationsSettings` friendly-route surface, NOT the
|
|
521
|
+
native-REST `/setup/org/preferences/{name}` surface.** For this Industries Comms Sales pref the
|
|
522
|
+
native-REST surface `404`s (both verbs) — it isn't on that registry — while `CorePricingPreference`
|
|
523
|
+
200s on the same surface. The friendly `/headless/invoke/industries/industries-communications-sales/…`
|
|
524
|
+
route resolves through the approved SOR's published route entry and works regardless of the client's
|
|
525
|
+
knowledge of the backing controller. Apply **verify-before-substitute**: `get-comms-org-preferences`
|
|
526
|
+
read first (a `403` is a licensing/permission gap; a `200` map means the gate passes), then write,
|
|
527
|
+
then read back.
|
|
528
|
+
- **A `404` on `/setup/org/preferences/MultiLocationFeatureOrgPref` is NOT "disabled" and NOT a
|
|
529
|
+
licensing gap** — it means the pref isn't on that generic REST surface. Diagnose enablement/gating
|
|
530
|
+
via the SOR read (`403` = gate unmet) and the PermissionSetLicense query, never via that 404.
|
|
531
|
+
- Provisioned org permissions (`CMEMultiRecipient`, `MultiRecipient`) are **not** admin-toggleable —
|
|
532
|
+
never author a headless "enable" step for them; verify + report the licensing gap instead.
|
|
533
|
+
- **Context Service extension (Step 4) is native Connect REST, not `/headless/invoke`.** Build the
|
|
534
|
+
MultiSite recipient attributes as a `baseReference` extension of the org's standard
|
|
535
|
+
`ConsumerSalesContext__stdctx` (add the 5 delta attributes + 16 mappings from the Step-4 tables — do
|
|
536
|
+
not diff against a CMEB2B definition at run time; the deltas are already spelled out); activate via
|
|
537
|
+
`PATCH /context-definitions/{id} {isActive:true}`. Two hard-won rules: hydration persists **only** on
|
|
538
|
+
the create-list POST (`PATCH` silently drops it — use `deleteExistingHydrationDetails:true` to
|
|
539
|
+
replace), and the nested hydration leaf key is `childDetails`. Attributes must exist here before Step 3
|
|
540
|
+
can surface them on the page.
|
|
541
|
+
- **All calls in Steps 1–2 go through `dispatch` (no `sf` CLI).** A hosted agent (ChatGPT, Slackbot)
|
|
542
|
+
has no shell, so a CLI step would no-op there. Dev/scratch success is not proof of prod-safety.
|
|
543
|
+
|
|
544
|
+
<!-- skill-validate: ignore-start -->
|
|
545
|
+
<!-- codey:operations start -->
|
|
546
|
+
## Operations Reference
|
|
547
|
+
|
|
548
|
+
Operations this skill uses — routing and dependency reference.
|
|
549
|
+
|
|
550
|
+
| Operation | Purpose | Status | Call | Depends on |
|
|
551
|
+
|-----------|---------|--------|------|------------|
|
|
552
|
+
| `step1-get-comms-org-preferences` | read | — | `GET /headless/invoke/industries/industries-communications-sales/get-comms-org-preferences` | — |
|
|
553
|
+
| `step1-set-multi-location-enabled` | write | — | `PATCH /headless/invoke/industries/industries-communications-sales/set-multi-location-enabled` | `step1-get-comms-org-preferences` |
|
|
554
|
+
| `step1-verify-multi-location-enabled` | verify | — | `GET /headless/invoke/industries/industries-communications-sales/get-comms-org-preferences` | `step1-set-multi-location-enabled` |
|
|
555
|
+
| `step2-query-multirecipient-psl-status` | verify | — | `GET /services/data/v67.0/query` | — |
|
|
556
|
+
| `step2-query-cmemultirecipient-psl-assignment` | verify | — | `GET /services/data/v67.0/query` | — |
|
|
557
|
+
| `step2-find-cme-sales-permset` | read | — | `GET /services/data/v67.0/query` | `step2-query-cmemultirecipient-psl-assignment` |
|
|
558
|
+
| `step2-assign-cme-sales-permset` | write | — | `POST /services/data/v67.0/sobjects/PermissionSetAssignment` | `step2-find-cme-sales-permset` |
|
|
559
|
+
| `gap-cmemultirecipient-provisioning` | verify | — | — | — |
|
|
560
|
+
| `gap-quote-order-page-display-columns` | navigate | — | — | — |
|
|
561
|
+
| `step4-preflight-base-context-def` | precondition | — | `GET /services/data/v67.0/connect/context-definitions/ConsumerSalesContext__stdctx` | — |
|
|
562
|
+
| `step4-create-extension` | write | — | `POST /services/data/v67.0/connect/context-definitions` | `step4-preflight-base-context-def` |
|
|
563
|
+
| `step4-get-extension-with-dynamic-attrs` | read | — | `GET /services/data/v67.0/connect/context-definitions/{contextDefinitionId}` | `step4-create-extension` |
|
|
564
|
+
| `step4-add-delta-attributes` | write | — | `POST /services/data/v67.0/connect/context-nodes/{contextNodeId}/context-attributes` | `step4-get-extension-with-dynamic-attrs` |
|
|
565
|
+
| `step4-create-attribute-mappings` | write | — | `POST /services/data/v67.0/connect/context-node-mappings/{nodeMappingId}/context-attribute-mappings` | `step4-add-delta-attributes` |
|
|
566
|
+
| `step4-verify-attribute-mappings` | verify | — | `GET /services/data/v67.0/connect/context-node-mappings/{nodeMappingId}/context-attribute-mappings/{attrMappingId}` | `step4-create-attribute-mappings` |
|
|
567
|
+
| `step4-create-context-tags` | write | — | `POST /services/data/v67.0/connect/context-definitions/{contextDefinitionId}/context-tags` | `step4-verify-attribute-mappings` |
|
|
568
|
+
| `step4-set-default-cart-mapping` | write | — | `PATCH /services/data/v67.0/connect/context-definitions/{contextDefinitionId}/context-mappings` | `step4-create-context-tags` |
|
|
569
|
+
| `step4-activate-extension` | write | — | `PATCH /services/data/v67.0/connect/context-definitions/{contextDefinitionId}` | `step4-set-default-cart-mapping` |
|
|
570
|
+
<!-- codey:operations end -->
|
|
571
|
+
<!-- skill-validate: ignore-end -->
|