@salesforce/afv-skills 1.65.0 → 1.65.1
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/field-service-data-capture-form-deployer-configure/SKILL.md +2 -23
- package/skills/field-service-data-capture-form-designer-configure/SKILL.md +3 -13
- package/skills/field-service-mobile-branding-configure/SKILL.md +3 -17
- package/skills/field-service-objective-designer-configure/SKILL.md +379 -72
- package/skills/field-service-prework-brief-deployer-configure/SKILL.md +537 -10
- package/skills/field-service-scheduling-policy-designer-query/SKILL.md +1093 -65
- package/skills/field-service-sobject-create-configure/SKILL.md +213 -13
- package/skills/field-service-voice-to-form-configure/SKILL.md +11 -40
- package/skills/field-service-work-rule-designer-configure/SKILL.md +95 -121
- package/skills/agentforce-gpt-email-generation-configure/SKILL.md +0 -312
- package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +0 -64
- package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +0 -46
- package/skills/automation-company-profile-info-query/SKILL.md +0 -51
- package/skills/automation-digital-wallet-configure/SKILL.md +0 -689
- package/skills/automation-flow-coordinate/SKILL.md +0 -95
- package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +0 -1569
- package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +0 -96
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +0 -23
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +0 -31
- package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +0 -179
- package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +0 -13
- package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +0 -83
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +0 -69
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +0 -274
- package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +0 -192
- package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +0 -130
- package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +0 -92
- package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +0 -88
- package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/start/start.md +0 -539
- package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/wait/wait.md +0 -497
- package/skills/automation-flow-coordinate/references/recipes/author/author.md +0 -868
- package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +0 -300
- package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +0 -292
- package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +0 -323
- package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +0 -109
- package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +0 -219
- package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +0 -180
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +0 -175
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +0 -255
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +0 -212
- package/skills/automation-flow-coordinate/references/resources/variable/variable.md +0 -171
- package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +0 -786
- package/skills/automation-flow-coordinate/references/shared/end/end.md +0 -267
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +0 -69
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +0 -80
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +0 -116
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +0 -321
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +0 -320
- package/skills/automation-flow-coordinate/references/shared/server-functions.md +0 -597
- package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +0 -69
- package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +0 -78
- package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +0 -373
- package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +0 -273
- package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +0 -259
- package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +0 -369
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +0 -542
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +0 -349
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +0 -505
- package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +0 -380
- package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +0 -567
- package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +0 -360
- package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +0 -539
- package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +0 -358
- package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +0 -602
- package/skills/commerce-b2b-store-configure/SKILL.md +0 -251
- package/skills/commerce-credit-memo-create/SKILL.md +0 -139
- package/skills/commerce-delivery-business-hours-configure/SKILL.md +0 -277
- package/skills/commerce-delivery-estimation-apply/SKILL.md +0 -155
- package/skills/commerce-delivery-estimation-configure/SKILL.md +0 -377
- package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +0 -174
- package/skills/commerce-estimate-bopis-query/SKILL.md +0 -279
- package/skills/commerce-estimate-delivery-date-query/SKILL.md +0 -349
- package/skills/commerce-fees-apply/SKILL.md +0 -227
- package/skills/commerce-fulfillment-routing-analyze/SKILL.md +0 -200
- package/skills/commerce-guest-buyer-create/SKILL.md +0 -173
- package/skills/commerce-location-bopis-configure/SKILL.md +0 -378
- package/skills/commerce-location-business-hours-configure/SKILL.md +0 -235
- package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +0 -309
- package/skills/commerce-location-graph-integrate/SKILL.md +0 -131
- package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +0 -755
- package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +0 -331
- package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +0 -579
- package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +0 -626
- package/skills/commerce-merchant-catalog-configure/SKILL.md +0 -614
- package/skills/commerce-merchant-extension-provider-configure/SKILL.md +0 -368
- package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +0 -118
- package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +0 -65
- package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +0 -90
- package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +0 -72
- package/skills/commerce-merchant-insights-query/SKILL.md +0 -279
- package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +0 -656
- package/skills/commerce-order-summary-change-apply/SKILL.md +0 -375
- package/skills/commerce-product-details-get/SKILL.md +0 -363
- package/skills/commerce-product-search/SKILL.md +0 -563
- package/skills/commerce-react-storefront-create/SKILL.md +0 -350
- package/skills/commerce-return-order-summary-create/SKILL.md +0 -513
- package/skills/commerce-search-relevance-analyze/SKILL.md +0 -757
- package/skills/commerce-temporary-processing-time-override-create/SKILL.md +0 -274
- package/skills/communications-initial-setup-configure/SKILL.md +0 -630
- package/skills/communications-multisite-configure/SKILL.md +0 -571
- package/skills/communications-revenue-cloud-settings-configure/SKILL.md +0 -74
- package/skills/communications-smb-fiber-catalog-create/SKILL.md +0 -413
- package/skills/communications-tmf-integrate/SKILL.md +0 -1368
- package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +0 -448
- package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +0 -269
- package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +0 -271
- package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +0 -382
- package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +0 -373
- package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +0 -389
- package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +0 -338
- package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +0 -547
- package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +0 -346
- package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +0 -1110
- package/skills/crm-analytics-adoption-insights-configure/SKILL.md +0 -224
- package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +0 -418
- package/skills/crm-analytics-dashboards-configure/SKILL.md +0 -731
- package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +0 -233
- package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +0 -184
- package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +0 -167
- package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +0 -55
- package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +0 -1350
- package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +0 -1862
- package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +0 -83
- package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +0 -81
- package/skills/data360-activation-create/SKILL.md +0 -104
- package/skills/data360-activation-external-platform-get/SKILL.md +0 -49
- package/skills/data360-activation-target-create/SKILL.md +0 -93
- package/skills/data360-activation-v2-create/SKILL.md +0 -456
- package/skills/data360-audience-dmo-get/SKILL.md +0 -38
- package/skills/data360-calculated-affinity-create/SKILL.md +0 -82
- package/skills/data360-calculated-insight-create/SKILL.md +0 -148
- package/skills/data360-catalog-metadata-create/SKILL.md +0 -183
- package/skills/data360-code-extension-create/SKILL.md +0 -115
- package/skills/data360-communication-capping-create/SKILL.md +0 -227
- package/skills/data360-connection-create/SKILL.md +0 -491
- package/skills/data360-content-lens-create/SKILL.md +0 -181
- package/skills/data360-data-action-create/SKILL.md +0 -126
- package/skills/data360-data-action-target-create/SKILL.md +0 -181
- package/skills/data360-data-clean-room-create/SKILL.md +0 -238
- package/skills/data360-data-governance-create/SKILL.md +0 -746
- package/skills/data360-data-graph-create/SKILL.md +0 -82
- package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +0 -38
- package/skills/data360-data-lake-object-create/SKILL.md +0 -207
- package/skills/data360-data-model-object-catalog-get/SKILL.md +0 -49
- package/skills/data360-data-model-object-create/SKILL.md +0 -128
- package/skills/data360-data-model-object-mapping-create/SKILL.md +0 -106
- package/skills/data360-data-space-create/SKILL.md +0 -161
- package/skills/data360-data-streams-create/SKILL.md +0 -324
- package/skills/data360-engagement-signal-get/SKILL.md +0 -38
- package/skills/data360-experiment-create/SKILL.md +0 -82
- package/skills/data360-goal-based-campaign-create/SKILL.md +0 -192
- package/skills/data360-harmonization-process-history-get/SKILL.md +0 -38
- package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +0 -84
- package/skills/data360-identity-resolution-create/SKILL.md +0 -115
- package/skills/data360-intelligent-document-processing-create/SKILL.md +0 -148
- package/skills/data360-knowledge-graph-construction-create/SKILL.md +0 -93
- package/skills/data360-knowledge-graph-create/SKILL.md +0 -216
- package/skills/data360-knowledge-space-mcp-configure/SKILL.md +0 -475
- package/skills/data360-machine-learning-mcp-configure/SKILL.md +0 -697
- package/skills/data360-multi-org-mcp-configure/SKILL.md +0 -117
- package/skills/data360-secondary-index-mcp-configure/SKILL.md +0 -126
- package/skills/data360-segment-mcp-configure/SKILL.md +0 -159
- package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-engine-mcp-configure/SKILL.md +0 -62
- package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-metric-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-model-mcp-configure/SKILL.md +0 -115
- package/skills/data360-standard-mapping-mcp-configure/SKILL.md +0 -38
- package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +0 -73
- package/skills/experience-afv-query/SKILL.md +0 -234
- package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +0 -63
- package/skills/experience-apex-components-configure/SKILL.md +0 -69
- package/skills/experience-apex-pages-configure/SKILL.md +0 -107
- package/skills/experience-app-home-configure/SKILL.md +0 -76
- package/skills/experience-aura-lightning-out-access-configure/SKILL.md +0 -58
- package/skills/experience-briefcase-configure/SKILL.md +0 -287
- package/skills/experience-community-flexi-page-list-create/SKILL.md +0 -74
- package/skills/experience-community-template-definition-list-query/SKILL.md +0 -48
- package/skills/experience-community-theme-definition-list-query/SKILL.md +0 -38
- package/skills/experience-content-assets-configure/SKILL.md +0 -86
- package/skills/experience-custom-domain-create/SKILL.md +0 -727
- package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +0 -41
- package/skills/experience-field-service-app-builder-configure/SKILL.md +0 -187
- package/skills/experience-flow-category-configure/SKILL.md +0 -117
- package/skills/experience-formula-configure/SKILL.md +0 -358
- package/skills/experience-global-actions-configure/SKILL.md +0 -69
- package/skills/experience-global-publisher-layouts-configure/SKILL.md +0 -79
- package/skills/experience-instrumentation-configure/SKILL.md +0 -64
- package/skills/experience-lex-engagement-configure/SKILL.md +0 -50
- package/skills/experience-lightning-bolt-open/SKILL.md +0 -12
- package/skills/experience-lightning-out-configure/SKILL.md +0 -129
- package/skills/experience-lightning-preview-configure/SKILL.md +0 -67
- package/skills/experience-lightning-types-query/SKILL.md +0 -98
- package/skills/experience-malware-scan-configure/SKILL.md +0 -71
- package/skills/experience-my-salesforce-configure/SKILL.md +0 -126
- package/skills/experience-navigation-menus-configure/SKILL.md +0 -235
- package/skills/experience-notification-types-configure/SKILL.md +0 -206
- package/skills/experience-notifications-configure/SKILL.md +0 -75
- package/skills/experience-record-discovery-query/SKILL.md +0 -227
- package/skills/experience-regenerate-previews-open/SKILL.md +0 -94
- package/skills/experience-sales-cloud-mab-configure/SKILL.md +0 -254
- package/skills/experience-schema-builder-open/SKILL.md +0 -38
- package/skills/experience-simple-record-home-configure/SKILL.md +0 -110
- package/skills/experience-static-resources-configure/SKILL.md +0 -74
- package/skills/field-service-setup-coordinate/SKILL.md +0 -62
- package/skills/field-service-work-plan-configure/SKILL.md +0 -253
- package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +0 -180
- package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +0 -196
- package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +0 -106
- package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +0 -96
- package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +0 -111
- package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +0 -250
- package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +0 -122
- package/skills/fsc-digital-origination-coordinate/SKILL.md +0 -653
- package/skills/fsc-digital-origination-demo-run/SKILL.md +0 -225
- package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +0 -112
- package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +0 -396
- package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +0 -336
- package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +0 -208
- package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +0 -375
- package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +0 -83
- package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +0 -248
- package/skills/fsc-digital-origination-sample-data-create/SKILL.md +0 -206
- package/skills/fsc-document-checklist-settings-configure/SKILL.md +0 -57
- package/skills/fsc-flexible-hierarchy-configure/SKILL.md +0 -148
- package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +0 -1430
- package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +0 -471
- package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +0 -429
- package/skills/fsc-pricing-product-configurator-configure/SKILL.md +0 -150
- package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +0 -123
- package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +0 -82
- package/skills/fsc-product-act3-attributes-create/SKILL.md +0 -249
- package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +0 -196
- package/skills/fsc-product-act5-considerations-get/SKILL.md +0 -44
- package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +0 -384
- package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +0 -144
- package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +0 -107
- package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +0 -189
- package/skills/fsc-stage-management-definition-create/SKILL.md +0 -108
- package/skills/fsc-stage-management-permissions-assign/SKILL.md +0 -143
- package/skills/fsc-stage-management-transitions-configure/SKILL.md +0 -139
- package/skills/health-cloud-appt-booking-config-configure/SKILL.md +0 -135
- package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +0 -136
- package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-requests-create/SKILL.md +0 -178
- package/skills/health-cloud-initial-configure/SKILL.md +0 -511
- package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +0 -1374
- package/skills/health-cloud-provider-search-settings-configure/SKILL.md +0 -924
- package/skills/health-cloud-referral-management-coordinate/SKILL.md +0 -513
- package/skills/health-cloud-timeline-configure/SKILL.md +0 -622
- package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +0 -135
- package/skills/industries-account-score-settings-query/SKILL.md +0 -78
- package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +0 -177
- package/skills/industries-ad-product-availability-search/SKILL.md +0 -399
- package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +0 -628
- package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +0 -73
- package/skills/industries-atm-settings-starter-configure/SKILL.md +0 -76
- package/skills/industries-batch-document-ai-configure/SKILL.md +0 -196
- package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +0 -71
- package/skills/industries-branch-management-settings-configure/SKILL.md +0 -89
- package/skills/industries-bre-decision-table-access-configure/SKILL.md +0 -367
- package/skills/industries-brokerage-settings-configure/SKILL.md +0 -41
- package/skills/industries-calendar-sync-settings-configure/SKILL.md +0 -89
- package/skills/industries-care-request-settings-configure/SKILL.md +0 -218
- package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +0 -54
- package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +0 -380
- package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +0 -216
- package/skills/industries-catalog-process-intake-configure/SKILL.md +0 -219
- package/skills/industries-catalog-process-knowledge-configure/SKILL.md +0 -153
- package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +0 -168
- package/skills/industries-cds-general-settings-configure/SKILL.md +0 -69
- package/skills/industries-claim-financial-settings-configure/SKILL.md +0 -169
- package/skills/industries-clinical-data-model-settings-configure/SKILL.md +0 -136
- package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +0 -105
- package/skills/industries-collection-plan-settings-configure/SKILL.md +0 -132
- package/skills/industries-comms-service-console-settings-configure/SKILL.md +0 -159
- package/skills/industries-compliance-configure/SKILL.md +0 -102
- package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +0 -76
- package/skills/industries-contact-center-app-layout-configure/SKILL.md +0 -88
- package/skills/industries-contact-center-components-configure/SKILL.md +0 -96
- package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +0 -95
- package/skills/industries-contact-center-user-access-assign/SKILL.md +0 -96
- package/skills/industries-course-waitlist-config-configure/SKILL.md +0 -162
- package/skills/industries-crisis-center-settings-configure/SKILL.md +0 -84
- package/skills/industries-custom-object-settings-configure/SKILL.md +0 -94
- package/skills/industries-data-cloud-integration-configure/SKILL.md +0 -88
- package/skills/industries-data-space-feature-mappings-configure/SKILL.md +0 -245
- package/skills/industries-decision-matrix-builder-configure/SKILL.md +0 -78
- package/skills/industries-decision-table-hbase-configure/SKILL.md +0 -87
- package/skills/industries-decision-table-version-configure/SKILL.md +0 -74
- package/skills/industries-decision-tables-builder-configure/SKILL.md +0 -253
- package/skills/industries-decision-tables-configure/SKILL.md +0 -439
- package/skills/industries-energy-utilities-configure/SKILL.md +0 -251
- package/skills/industries-eu-cloud-multisite-configure/SKILL.md +0 -1008
- package/skills/industries-eu-new-connections-configure/SKILL.md +0 -30
- package/skills/industries-explainability-msg-template-configure/SKILL.md +0 -135
- package/skills/industries-expression-set-message-token-configure/SKILL.md +0 -135
- package/skills/industries-field-service-settings-configure/SKILL.md +0 -82
- package/skills/industries-form-framework-settings-configure/SKILL.md +0 -30
- package/skills/industries-fsc-ai-settings-configure/SKILL.md +0 -57
- package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +0 -172
- package/skills/industries-fsc-b2b-settings-configure/SKILL.md +0 -61
- package/skills/industries-fsc-insurance-settings-configure/SKILL.md +0 -58
- package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +0 -103
- package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +0 -117
- package/skills/industries-fsc-wealth-settings-configure/SKILL.md +0 -99
- package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +0 -120
- package/skills/industries-fundraising-rfm-configure/SKILL.md +0 -128
- package/skills/industries-fundraising-settings-configure/SKILL.md +0 -145
- package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +0 -299
- package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +0 -87
- package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +0 -58
- package/skills/industries-hc-score-category-settings-configure/SKILL.md +0 -167
- package/skills/industries-health-engagement-settings-configure/SKILL.md +0 -218
- package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +0 -131
- package/skills/industries-home-health-bundling-policy-create/SKILL.md +0 -50
- package/skills/industries-home-health-entity-labels-configure/SKILL.md +0 -29
- package/skills/industries-home-health-fsl-package-deploy/SKILL.md +0 -71
- package/skills/industries-home-health-fsl-settings-validate/SKILL.md +0 -27
- package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +0 -80
- package/skills/industries-home-health-guided-setup-configure/SKILL.md +0 -836
- package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +0 -55
- package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +0 -61
- package/skills/industries-home-health-licenses-assign/SKILL.md +0 -27
- package/skills/industries-home-health-operating-hours-create/SKILL.md +0 -40
- package/skills/industries-home-health-scheduling-policy-create/SKILL.md +0 -41
- package/skills/industries-home-health-service-objective-create/SKILL.md +0 -22
- package/skills/industries-home-health-skills-create/SKILL.md +0 -31
- package/skills/industries-home-health-users-create/SKILL.md +0 -29
- package/skills/industries-icm-act3-toggles-configure/SKILL.md +0 -198
- package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +0 -361
- package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +0 -550
- package/skills/industries-integrated-care-management-configure/SKILL.md +0 -168
- package/skills/industries-object-enablement-configure/SKILL.md +0 -86
- package/skills/industries-tpm-system-processing-service-configure/SKILL.md +0 -64
- package/skills/integration-apex-settings-configure/SKILL.md +0 -61
- package/skills/marketing-e360-email-archiving-configure/SKILL.md +0 -73
- package/skills/platform-custom-permissions-configure/SKILL.md +0 -687
- package/skills/platform-label-workbench-import-create/SKILL.md +0 -67
- package/skills/platform-privacy-agent-settings-configure/SKILL.md +0 -752
|
@@ -1,429 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: fsc-flexible-hierarchy-rule-based-graph-deploy
|
|
3
|
-
description: "Build and deploy a Rule-Based Flexible Hierarchy graph config as a `RelationshipGraphDefinition` MDAPI component — same nodeList/relationshipList capture as the bespoke sub-skill, captured up front, plus a `rules.graph.rootNode` recursive rule tree (role, filter criteria, OneToMany/ManyToMany child relationships) that drives automatic hierarchy expansion and reuses those pre-captured relationships wherever an edge needs a junction. First ask whether the admin has a config, then either take an admin-supplied config as-is (Path A) or build the node list, the node relationships, and the rule tree with them in that order (Path B), confirm right before the deploy, then create it via MDAPI deploy and read back. Invoked from the fsc-flexible-hierarchy-configure foundation skill's hierarchy-type step (Step 9) only when the admin has `enableRuleBasedHierarchyPref` on and chose Rule-Based Configuration over Bespoke Configuration."
|
|
4
|
-
metadata:
|
|
5
|
-
relatedSkills:
|
|
6
|
-
- fsc-flexible-hierarchy-configure
|
|
7
|
-
version: "1.0"
|
|
8
|
-
cliTools:
|
|
9
|
-
- tool:
|
|
10
|
-
- "sf"
|
|
11
|
-
semver: ">=2.0.0"
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Create a Rule-Based Hierarchy Config
|
|
15
|
-
|
|
16
|
-
The **Rule-Based** branch of the hierarchy-type step (**Step 9**) of the
|
|
17
|
-
[`fsc-flexible-hierarchy-configure`](../../../SKILL.md) foundation skill (see
|
|
18
|
-
[`../foundation-configure/SKILL.md`](../foundation-configure/SKILL.md)). Step 9 delegates here
|
|
19
|
-
**only when** `rule_based_pref_state` is `already-on` or `enabled` **and** the admin picked
|
|
20
|
-
**Rule Based Configuration** at the modality question — never unconditionally. The sibling
|
|
21
|
-
[`../graph-config-create/SKILL.md`](../graph-config-create/SKILL.md) remains the **only** path when
|
|
22
|
-
the admin picks Bespoke Configuration, or when the Rule-Based preference isn't on; it is unchanged
|
|
23
|
-
by this skill's existence.
|
|
24
|
-
|
|
25
|
-
## Sequencing — one question at a time, never batch
|
|
26
|
-
|
|
27
|
-
This skill is multi-turn: the Path A/B branch, the node list, the node relationships, the rule
|
|
28
|
-
tree, and the pre-deploy confirm are each their own turn. Ask **only the current question**, wait
|
|
29
|
-
for the answer, then move on — **never bundle a later question into the same message as an
|
|
30
|
-
earlier one, and never collect several answers up front.** This applies in full even if you're
|
|
31
|
-
serving this skill directly rather than being routed here from the foundation skill.
|
|
32
|
-
|
|
33
|
-
A hierarchy type is still a single **`RelationshipGraphDefinition`** metadata component — same
|
|
34
|
-
deployable MDAPI type (`metadataApiName="RelationshipGraphDefinition"`, `manageable`,
|
|
35
|
-
`keyPrefix="06J"`), same **create-only** rule (never an update), and the **same transport** as the
|
|
36
|
-
bespoke sub-skill: creation is not supported through the generic `/headless/metadata` facet (its PUT
|
|
37
|
-
is update-only for this type and 400s with `INVALID_CROSS_REFERENCE_KEY` against a `DeveloperName`
|
|
38
|
-
that doesn't exist yet). **Create it via the raw Metadata API (mdapi package + SOAP deploy)** —
|
|
39
|
-
route this through `/headless/metadata`, which wraps that raw-MDAPI create path — against a
|
|
40
|
-
`relationshipGraphDefinitions/<DeveloperName>.relationshipGraphDefinition-meta.xml` component — **not**
|
|
41
|
-
the Tooling API POST create, which is unreliable for `GraphType: "FlexibleHierarchy"` (confirmed
|
|
42
|
-
against a live org: 5+ identical retries failed with `INVALID_FIELD_FOR_INSERT_UPDATE` on `GraphType`,
|
|
43
|
-
while the Setup UI and an MDAPI deploy of the identical payload both succeeded). What's different from
|
|
44
|
-
the bespoke
|
|
45
|
-
sub-skill is **only the shape of the `graphDefinition` JSON inside `relationshipGraphDefVersions`** —
|
|
46
|
-
it carries an additional `rules` block beside `nodeList`/`relationshipList`/`summaryRollupList`. See
|
|
47
|
-
[`references/rule-based-hierarchy-payload.md`](references/rule-based-hierarchy-payload.md) for the
|
|
48
|
-
full schema, grounding, and a validated example.
|
|
49
|
-
|
|
50
|
-
## Grounding note — read before using this skill
|
|
51
|
-
|
|
52
|
-
This sub-skill's payload schema is grounded in **one admin-provided sample config** (a
|
|
53
|
-
`RelationshipGraphDefinition` for a "Distribution Network Hierarchy") **plus two independent live
|
|
54
|
-
build-from-scratch create + re-retrieve runs against a live org** — this skill's own three-level
|
|
55
|
-
Account→Account→Contact rule tree, and an admin's independently UI-built rule tree captured in the
|
|
56
|
-
same session. The **node/edge/filter shape** is now solidly grounded by two independent live builds,
|
|
57
|
-
not just the one sample. The **transport is not uniformly solid**:
|
|
58
|
-
`FullName`/`Metadata` shape and create-only are confirmed, but **Tooling API POST create fails
|
|
59
|
-
reliably for `GraphType: "FlexibleHierarchy"`** (5+ identical retries, `INVALID_FIELD_FOR_INSERT_UPDATE`
|
|
60
|
-
on `GraphType`) —
|
|
61
|
-
MDAPI deploy is the transport that actually works; see the intro above. Everything about
|
|
62
|
-
the **`rules` tree's contents** still being refined (any `operator` beyond `gt`/`lt`/`eq`/inferred
|
|
63
|
-
`ne`, any `whichEntity` value beyond `TARGET`) is inferred and **not yet confirmed against a live
|
|
64
|
-
deploy**. Treat the fields documented in the reference as grounded up to the point noted there, not as
|
|
65
|
-
an exhaustively validated schema — if a live deploy of a built-from-scratch config fails, that's new
|
|
66
|
-
grounding to fold back into the reference (per this skill family's "a deploy result can lie, always
|
|
67
|
-
re-read/re-verify" discipline), not a sign to silently guess around it.
|
|
68
|
-
|
|
69
|
-
## Prerequisites (established by the foundation skill before delegating here)
|
|
70
|
-
|
|
71
|
-
Same as [`../graph-config-create/SKILL.md`](../graph-config-create/SKILL.md)'s prerequisites — FSC +
|
|
72
|
-
ARC enabled, Flexible Hierarchies feature preference on — **plus** `enableRuleBasedHierarchyPref`
|
|
73
|
-
confirmed on (`rule_based_pref_state` is `already-on` or `enabled`). Step 9 verifies this gate before
|
|
74
|
-
ever offering the Rule Based Configuration option; this sub-skill doesn't re-check it.
|
|
75
|
-
|
|
76
|
-
## Free-text vs. multiple-choice inputs — same discipline as the bespoke sub-skill
|
|
77
|
-
|
|
78
|
-
Every free-text-vs-picker rule in
|
|
79
|
-
[`../graph-config-create/SKILL.md`](../graph-config-create/SKILL.md#free-text-inputs-must-use-a-real-text-prompt--never-a-fixed-option-picker)
|
|
80
|
-
applies here unchanged: name, root object, other node objects, and any "enter my own" escape are real
|
|
81
|
-
free-text prompts, never a fixed-option picker with a dead "type your own" option. The new rule-tree
|
|
82
|
-
inputs below extend this the same way — **filter value** is free-text; **operator** and
|
|
83
|
-
**whichEntity** are multiple-choice over a known, finite set. **Relationship kind
|
|
84
|
-
(OneToMany/ManyToMany)** is conditional, not always a two-option picker: it's multiple-choice only
|
|
85
|
-
when a `relationshipList` entry already exists for the current node pair (captured in Path B step
|
|
86
|
-
2, before the tree) — otherwise the question is skipped entirely and One-to-many is used, since
|
|
87
|
-
there's no captured junction to offer as the Many-to-many option (see "Child relationships" under
|
|
88
|
-
"Building the rule tree"). **Role** is conditional on the org's configured `FlexibleHierarchyNodeRole`
|
|
89
|
-
values — see "Checking configured roles" at the top of "Building the rule tree" below — free-text
|
|
90
|
-
only when the org has none configured.
|
|
91
|
-
|
|
92
|
-
## First ask: do you have a hierarchy config to deploy, or should I build one?
|
|
93
|
-
|
|
94
|
-
Ask the identical Yes/No fork the bespoke sub-skill asks, just naming the rule-based shape:
|
|
95
|
-
|
|
96
|
-
> Do you already have a Rule-Based hierarchy config ready to deploy?
|
|
97
|
-
> - **Yes** — paste your full config (the `graphDefinition` JSON or full `RelationshipGraphDefinition`
|
|
98
|
-
> XML, including the `rules` block) and I'll deploy it as-is (I'll validate the root object and
|
|
99
|
-
> every object named in the rule tree exists in the org, and read the label).
|
|
100
|
-
> - **No** — I'll build one with you: the node objects and display fields (same as a bespoke config),
|
|
101
|
-
> then the relationships connecting them, then the rule tree (role, qualifying filters, and child
|
|
102
|
-
> relationships) that drives automatic hierarchy expansion.
|
|
103
|
-
|
|
104
|
-
**Do not skip this and present a build summary (developer name, label, root object, node roles)
|
|
105
|
-
before asking it and getting an answer.** Confirmed live: a run jumped straight to a deploy summary
|
|
106
|
-
with invented values (e.g. assuming `Account` as root, inventing a developer name) without ever
|
|
107
|
-
asking this question. If you find yourself describing field values for this hierarchy type before
|
|
108
|
-
this question has been asked and answered, stop and ask it now.
|
|
109
|
-
|
|
110
|
-
### Path A — the admin brings a config
|
|
111
|
-
|
|
112
|
-
Take it as-is — don't silently rewrite their node/rule choices. Reconcile only the essentials:
|
|
113
|
-
|
|
114
|
-
- **Read the name from the config's own `masterLabel`** — don't ask for a name separately; echo it
|
|
115
|
-
back and let the admin correct it if wrong.
|
|
116
|
-
- **Confirm the root object** (`graph.rootNode.object.entity`) exists in the org — standard or
|
|
117
|
-
custom — via describe/`EntityDefinition`, same as the bespoke path.
|
|
118
|
-
- **Confirm every object named inside the `rules.graph.rootNode` tree** — every `object.entity` at
|
|
119
|
-
every depth, plus every `junctionObject.entity` on a `ManyToMany` edge — exists in the org. A rule
|
|
120
|
-
tree can reference deeper/more objects than the flat `nodeList`; validate the tree's objects
|
|
121
|
-
independently, don't assume they're a subset of `nodeList`.
|
|
122
|
-
- **Strip the duplicate `flexibleHierarchy` block if present** — see the Pitfall below. A real
|
|
123
|
-
admin-provided sample carried the *entire* `nodeList`/`rules`/`relationshipList`/`summaryRollupList`
|
|
124
|
-
content twice as two sibling `"flexibleHierarchy"` keys inside `globalUiConfig` (a paste artifact);
|
|
125
|
-
keep exactly one.
|
|
126
|
-
- **Don't drop or rebuild `relationshipList`.** A rule-based config still carries the flat
|
|
127
|
-
`relationshipList[]` the bespoke config uses — for every `ManyToMany` edge in the rule tree, the
|
|
128
|
-
matching junction pair should also appear once in `relationshipList` (see "Node relationships" in
|
|
129
|
-
Path B below for what a well-formed entry looks like). Take the admin's own `relationshipList` as
|
|
130
|
-
given on this path; don't regenerate it from the rule tree unless they ask you to fix a mismatch.
|
|
131
|
-
|
|
132
|
-
### Path B — build it from scratch
|
|
133
|
-
|
|
134
|
-
Building a rule-based config from scratch is **three layers**, done in order:
|
|
135
|
-
|
|
136
|
-
1. **The node list and display config** — identical to the bespoke sub-skill's Path B, steps for
|
|
137
|
-
name/`DeveloperName` uniqueness check, the reusable-template ask (`isTemplate` — optional,
|
|
138
|
-
defaults to `false` if skipped), root object, other node objects, and per-object
|
|
139
|
-
`graphViewFields`/`gridViewFields`/`nameField`/`showRelatedContacts` (the picker + free-text
|
|
140
|
-
follow-up, the graph-view 2-field cap, the self-object-prefix normalization, the field validation
|
|
141
|
-
against live describe). **This step delegates to the sibling sub-skill's own SOR — not a
|
|
142
|
-
repo-relative file link, which a served SOR consumer cannot resolve:**
|
|
143
|
-
**`delegates_to: fsc-darksaber/fsc-flexible-hierarchy-configure-graph-config-create`**. Call
|
|
144
|
-
`describe("fsc-darksaber/fsc-flexible-hierarchy-configure-graph-config-create")` and follow its
|
|
145
|
-
Path B node-list/display-field flow exactly (the wording lives there, not repeated here, so the
|
|
146
|
-
two copies can't drift). The result is the same `nodeList[]` a bespoke config has.
|
|
147
|
-
2. **Node relationships (`relationshipList`)** — capture this now, **before** the rule tree, not
|
|
148
|
-
derived from it afterward. Continue following the same delegated sub-skill's flow into its
|
|
149
|
-
node-relationship capture step — the standalone opt-in walk that asks, per pair the admin wants
|
|
150
|
-
connected: parent object, child object, junction object, the junction's lookup field to the
|
|
151
|
-
parent, the junction's lookup field to the child, and the junction's title/name field (the same
|
|
152
|
-
six-question capture the bespoke sub-skill uses). Every pair captured here becomes a
|
|
153
|
-
`relationshipList[]` entry, exactly as in a bespoke config. **This list is what gates which edge
|
|
154
|
-
types the rule tree (step 3) can offer for a given node pair** — see "Child relationships" below.
|
|
155
|
-
3. **The rule tree** — new to this sub-skill. This is the `rules.graph.rootNode` object described
|
|
156
|
-
below, which layers automatic-expansion rules (role labels, qualifying filters, and
|
|
157
|
-
parent→child traversal) on top of the node list, reusing the relationships captured in step 2
|
|
158
|
-
wherever a rule edge needs a junction.
|
|
159
|
-
|
|
160
|
-
**Node-relationship capture now happens up front (step 2 above) — this reverses this skill's
|
|
161
|
-
earlier documented behavior, which derived `relationshipList` from the `ManyToMany` edges captured
|
|
162
|
-
mid-tree-walk.** The rule tree (step 3) now **reads** `relationshipList` rather than **writing** it:
|
|
163
|
-
a parent→child pair can only offer **Many-to-many** in the rule tree if a `relationshipList` entry
|
|
164
|
-
for that exact pair already exists from step 2; every other pair only offers **One-to-many**. See
|
|
165
|
-
"Child relationships" below for exactly how that gate works.
|
|
166
|
-
|
|
167
|
-
## Gate — do not start the rule tree below until you have asked the relationship question
|
|
168
|
-
|
|
169
|
-
**Before reading any further in this section, confirm you already asked the Path B layer-2
|
|
170
|
-
question above: "Do you want to define node relationships? (Skip if not.)"** That question must be
|
|
171
|
-
asked on its own, in its own message, and answered (yes with pairs captured, or no/skip) *before*
|
|
172
|
-
you move on to the root node or any child relationship below. **Never jump straight from the node
|
|
173
|
-
list (layer 1) to the rule tree (layer 3) without asking it — silence or an assumption is not an
|
|
174
|
-
answer.** **Confirmed live: a run captured the node list (root + other objects, display fields),
|
|
175
|
-
then went straight to "Now building the rule tree" and the root-role question — the relationship
|
|
176
|
-
question was never asked at all.** If you notice you've reached this point without having asked it,
|
|
177
|
-
stop and ask it now, before the root role or any other rule-tree question. And once you *are* in the tree walk: **never populate `relationshipList` by inferring a
|
|
178
|
-
junction from a Many-to-many edge you're about to offer or that the admin just picked in the
|
|
179
|
-
tree** — that direction (rule tree writes `relationshipList`) is the deprecated, reversed behavior
|
|
180
|
-
called out above. The tree only ever *reads* `relationshipList`; if layer 2 was skipped or a pair
|
|
181
|
-
wasn't captured there, that pair gets One-to-many only, full stop — do not backfill
|
|
182
|
-
`relationshipList` from the tree to make Many-to-many available anyway.
|
|
183
|
-
|
|
184
|
-
## Building the rule tree (`rules.graph.rootNode`)
|
|
185
|
-
|
|
186
|
-
**Checking configured roles (do this once, before Step 1).** Read the org's
|
|
187
|
-
`FlexibleHierarchyNodeRole` `StandardValueSet` (same object Step 7 of the foundation skill populates)
|
|
188
|
-
before asking about role anywhere in the tree, and cache the result for the rest of this walk:
|
|
189
|
-
|
|
190
|
-
- **If it has no `<standardValue>` entries (confirmed the common case on an org where Step 7 was
|
|
191
|
-
skipped or hasn't run yet)** — **skip asking for role entirely**, at the root and at every target
|
|
192
|
-
node. There's nothing configured to choose from, and asking for a free-text label the admin might
|
|
193
|
-
later expect to line up with Step 7's values would be misleading. Omit the `role` key from that
|
|
194
|
-
node's JSON rather than emitting a blank/placeholder value.
|
|
195
|
-
- **If it has one or more `<standardValue>` entries** — ask for role as a multiple-choice picker over
|
|
196
|
-
those configured values (plus a free-text escape for a value not yet in the set, same
|
|
197
|
-
shortlist+escape pattern used for filter fields), and validate whichever is chosen/typed against that
|
|
198
|
-
same list before accepting it.
|
|
199
|
-
|
|
200
|
-
The rule tree is **recursive**: the root node and every node it expands to have the same shape —
|
|
201
|
-
`object` + `role` + (a `filter`, at the root only) + `childRelationships[]` — and each child
|
|
202
|
-
relationship's target node can itself have further `childRelationships[]`, to whatever depth the
|
|
203
|
-
admin needs (the grounding sample nests four levels: Account → Contact/Account → Contact → Case).
|
|
204
|
-
Walk it top-down, one node at a time, exactly like the bespoke sub-skill walks node relationships one
|
|
205
|
-
at a time — never ask the admin to describe the whole tree in one free-text blob.
|
|
206
|
-
|
|
207
|
-
**Step 1 — the root node.**
|
|
208
|
-
- **Root role** → `rules.graph.rootNode.role`. Follow "Checking configured roles" above: if the org
|
|
209
|
-
has configured `FlexibleHierarchyNodeRole` values, offer them as a picker (+ free-text escape,
|
|
210
|
-
validated) instead of the free-text prompt below; if the org has none configured, skip this question
|
|
211
|
-
and omit `role` from the root node. Free-text wording, when it applies: *"What role does the root
|
|
212
|
-
(`<root object>`) play in this hierarchy? (e.g. 'Manufacturer', 'Regional Distributor'.) This is a
|
|
213
|
-
label shown in the UI, not a picklist value — type anything descriptive."*
|
|
214
|
-
- **Root filter (optional)** → `rules.graph.rootNode.filter`. Ask directly: *"Do you want to add a
|
|
215
|
-
filter for the root (`<root object>`)? This restricts which `<root object>` records qualify as
|
|
216
|
-
roots — skip to include all of them."* If skipped, omit `filter` entirely (don't emit an empty
|
|
217
|
-
object). If yes, capture the filter (see "Capturing a filter" below).
|
|
218
|
-
- The root's `childRelationships` starts empty and is filled by Step 2.
|
|
219
|
-
|
|
220
|
-
**Step 2 — child relationships, one at a time, then recurse.** For the current node (root, to
|
|
221
|
-
start):
|
|
222
|
-
|
|
223
|
-
1. **Target object** → the child object for this relationship, multiple-choice over the objects
|
|
224
|
-
already in `nodeList` (same choice-list discipline as the bespoke sub-skill's relationship
|
|
225
|
-
capture — never a node outside the list), or **Done** if this node has no (more) children.
|
|
226
|
-
Ask this every time, even when a self-referential junction (e.g. `AccountAccountRelation`)
|
|
227
|
-
makes the target object look implied — a live run skipped the explicit confirmation on the
|
|
228
|
-
assumption it was obvious and only got the right answer by coincidence.
|
|
229
|
-
2. **Check `relationshipList` (captured in Path B step 2, before this tree) for an entry matching
|
|
230
|
-
this exact `(current node's object, target object)` pair.** This lookup decides which edge types
|
|
231
|
-
you're even allowed to offer next:
|
|
232
|
-
- **A matching entry exists** → offer both edge types:
|
|
233
|
-
> Reach `<target object>` from `<current node's role/object>` how? A relationship for this pair
|
|
234
|
-
> was already captured (junction `<junctionEntityApiName>`), so either works:
|
|
235
|
-
> - **One-to-many** — through a direct lookup field on `<target object>`.
|
|
236
|
-
> - **Many-to-many** — through the already-captured `<junctionEntityApiName>` junction.
|
|
237
|
-
- **No matching entry** → **skip the edge-type question — go straight to One-to-many.** Don't
|
|
238
|
-
offer Many-to-many for a pair with no captured relationship; this sub-skill no longer captures a
|
|
239
|
-
junction mid-tree-walk (see the flow-order note above the tree section), so there's nothing to
|
|
240
|
-
reuse. If the admin specifically wants a Many-to-many edge for this pair, tell them to add the
|
|
241
|
-
relationship in Path B step 2 first (name the parent/child pair so they know what to add), then
|
|
242
|
-
resume the tree walk from here — don't invent a junction question in the middle of the walk.
|
|
243
|
-
|
|
244
|
-
- **One-to-many (default, or the admin's choice when both are offered):**
|
|
245
|
-
- **Target role** → `childRelationships[].OneToMany.targetObjectNode.role`. Same conditional
|
|
246
|
-
behavior as the root role question above (picker+escape if the org has configured values, skip
|
|
247
|
-
and omit `role` entirely if not); when free-text applies, use the same wording pattern naming the
|
|
248
|
-
target object.
|
|
249
|
-
- **Filter (optional)** → `childRelationships[].OneToMany.filter`. Ask: *"Restrict which
|
|
250
|
-
`<target object>` records qualify? (Skip to include all children reached this way.)"* Same
|
|
251
|
-
capture mechanics as the root filter; omit `filter` entirely if skipped.
|
|
252
|
-
- **Relationship field** → `childRelationships[].OneToMany.relationshipField.field`. **Query the
|
|
253
|
-
target/child object's describe for every lookup/master-detail field whose reference is the
|
|
254
|
-
current/parent object — not just the first or most obviously-named one — and present the full
|
|
255
|
-
set as a multiple-choice picker** (same lookup-field discovery as the bespoke sub-skill's
|
|
256
|
-
junction-field questions, just direct rather than through a junction). Objects frequently expose
|
|
257
|
-
more than one lookup to the same parent (e.g. `Opportunity` has both `AccountId` and
|
|
258
|
-
`PrimaryPartnerAccountId` referencing `Account`) — **never default to the "standard-sounding"
|
|
259
|
-
field (like `AccountId`) without asking, even when there's only one candidate; always confirm
|
|
260
|
-
with the admin.** State the direction plainly: this is the field on the child that points *up* at
|
|
261
|
-
the parent; picking a field that points elsewhere breaks expansion silently.
|
|
262
|
-
- `relationshipUiConfig` is always emitted as `{}` — never ask about it.
|
|
263
|
-
- **Many-to-many (only offered when step 2 above found a matching `relationshipList` entry):**
|
|
264
|
-
- **Target role** → `childRelationships[].ManyToMany.targetObjectNode.role`. Same conditional
|
|
265
|
-
behavior as the root role question above.
|
|
266
|
-
- **Filter (optional)** → `childRelationships[].ManyToMany.filter`, same capture mechanics as
|
|
267
|
-
above.
|
|
268
|
-
- **Junction object, source field, target field — reuse from the matching `relationshipList`
|
|
269
|
-
entry, don't re-ask.** `childRelationships[].ManyToMany.junctionObject.entity` =
|
|
270
|
-
`junctionEntityApiName`, `.sourceField.field` = `parentFieldApiName`, `.targetField.field` =
|
|
271
|
-
`childFieldApiName` from that entry. Echo the reused values back to the admin (*"Using the
|
|
272
|
-
`<junctionEntityApiName>` junction already captured for `<parent>`→`<child>` (`<parentField>` /
|
|
273
|
-
`<childField>`)."*) so they can catch a mismatch, but don't ask them to re-pick the junction or its
|
|
274
|
-
fields — that was already decided in Path B step 2.
|
|
275
|
-
- `relationshipUiConfig` is always emitted as `{}` — never ask about it.
|
|
276
|
-
- **No new `relationshipList` entry needed.** Because Many-to-many is only offered for a pair with
|
|
277
|
-
an existing entry, this edge reuses that entry as-is — there's nothing to mirror or dedup here
|
|
278
|
-
(that used to be necessary when the rule tree was the thing writing `relationshipList`; now it's
|
|
279
|
-
only ever reading it). If the same `relationshipList` entry backs multiple rule edges (e.g. two
|
|
280
|
-
different roles both reachable through the same junction), that's fine — every such edge points
|
|
281
|
-
at the same one entry.
|
|
282
|
-
- **After capturing one child relationship, ask if there's another sibling under the *same* current
|
|
283
|
-
node** ("Add another child relationship under `<current node>`? Or say done."), looping until the
|
|
284
|
-
admin says done, **then recurse into any children just added** — ask the Step 2 question again,
|
|
285
|
-
now with that new target node as the "current node," before moving on to its siblings' own
|
|
286
|
-
children. Walk depth-first: finish one branch's full depth before starting the next sibling branch,
|
|
287
|
-
so you never lose track of which node you're currently adding children under. Echo back what you
|
|
288
|
-
just captured before asking the next question, the same way the bespoke sub-skill echoes each
|
|
289
|
-
relationship before offering another.
|
|
290
|
-
|
|
291
|
-
## Capturing a filter (`filter.filterCriteria[]` + `filter.booleanFilter`)
|
|
292
|
-
|
|
293
|
-
A filter is optional at the root and at every `OneToMany`/`ManyToMany` edge (see above). When the
|
|
294
|
-
admin opts in, capture **one criterion at a time**, looping:
|
|
295
|
-
|
|
296
|
-
- **Field** → `filterCriteria[].field.field`. **Present as a real single-select picker over 3
|
|
297
|
-
describe-derived shortlisted fields on the filtered object — the same shortlist mechanism used for
|
|
298
|
-
`graphViewFields`/`gridViewFields` in the bespoke node-list flow** — followed by a separate genuine
|
|
299
|
-
free-text follow-up ("Any other field? Enter its API name, or say none") for anything not
|
|
300
|
-
shortlisted. Never fold the "type your own" escape into the picker itself (same dead-option rule as
|
|
301
|
-
everywhere else in this skill family). Whichever way the field is named, **validate it against the
|
|
302
|
-
filtered object's live schema** (the root object for a root filter; the target/child object for an
|
|
303
|
-
edge filter) before accepting it — direct standard, custom `__c`, or dotted relationship path, same
|
|
304
|
-
discipline as every other field input in this skill family. **Fetch that field's describe metadata
|
|
305
|
-
now** (type, and `picklistValues` if it's a picklist) — the Operator and Value steps below both
|
|
306
|
-
depend on it.
|
|
307
|
-
- **`whichEntity`** → `filterCriteria[].field.whichEntity`. **Only `TARGET` is grounded** (every
|
|
308
|
-
criterion in the sample uses it, meaning "the object being filtered," i.e. the root object for a
|
|
309
|
-
root filter or the target/child object for an edge filter). Default to `TARGET` and don't ask this
|
|
310
|
-
as a separate question unless the admin's own Path-A config uses something else — this isn't a
|
|
311
|
-
confirmed enum with other legal values.
|
|
312
|
-
- **Operator** → `filterCriteria[].operator`, multiple-choice, **filtered by the field's type from the
|
|
313
|
-
describe fetched above — don't offer an operator that can't make sense for that type.** **Always
|
|
314
|
-
present each choice as the wire token followed by its plain-English meaning in brackets** — e.g.
|
|
315
|
-
*"eq (equals)"*, *"ne (not equal to)"*, *"gt (greater than)"*, *"lt (less than)"* — never show the
|
|
316
|
-
bare wire token alone; the admin picks by meaning, not by memorizing the enum:
|
|
317
|
-
- **`picklist`/`multipicklist`/`string`/`textarea` fields** — offer **`eq` (equals) and `ne` (not
|
|
318
|
-
equal to)**. The Setup UI's own filter builder offers "Equals" and "Not Equal to" for these types
|
|
319
|
-
(confirmed by direct observation on a live org) — equality-only was an earlier, now-corrected
|
|
320
|
-
assumption. Flag to the admin that `ne`'s exact wire token is inferred (SOQL convention), not yet
|
|
321
|
-
exercised in a live deploy payload — every grounded sample so far still used `eq` on
|
|
322
|
-
string/picklist fields.
|
|
323
|
-
- **`boolean`/`id`/`reference` fields** — no ordering or not-equal semantics are confirmed for these,
|
|
324
|
-
so offer **only `eq` (equals)**.
|
|
325
|
-
- **`int`/`double`/`currency`/`percent`/`date`/`datetime` fields** — ordering is meaningful, so offer
|
|
326
|
-
**`eq` (equals), `gt` (greater than), and `lt` (less than)** — all three confirmed live (root and
|
|
327
|
-
edge filters on this skill's own build-from-scratch rule tree and the admin's own UI-built rule
|
|
328
|
-
tree both used `gt` and `lt` on numeric fields).
|
|
329
|
-
- If the admin needs something beyond this set (e.g. `gte`/`lte`/`contains`) for any field type, tell
|
|
330
|
-
them it's unconfirmed for this metadata type and offer to include it as typed free-text with an
|
|
331
|
-
explicit heads-up that it hasn't been validated against a live deploy — don't silently invent an
|
|
332
|
-
operator enum. If offered, still show its plain-English meaning in brackets the same way (e.g.
|
|
333
|
-
*"gte (greater than or equal to)"*).
|
|
334
|
-
- **Value** → `filterCriteria[].value`, free-text, typed to match the field (numbers unquoted, strings
|
|
335
|
-
quoted in the JSON — e.g. `3000` for `NumberOfEmployees`, `"Electronics"` for `Industry`).
|
|
336
|
-
**Validate the typed value against the field's actual constraints before accepting it — this is
|
|
337
|
-
mandatory, not optional, for the same reason field/object validation is mandatory elsewhere in this
|
|
338
|
-
skill family: a value that looks plausible but doesn't match reality produces a filter that silently
|
|
339
|
-
never matches any record.**
|
|
340
|
-
- **`picklist`/`multipicklist`** — check the typed value against that field's live `picklistValues`
|
|
341
|
-
(exact match). If it doesn't match, **don't silently accept it** — tell the admin the value isn't
|
|
342
|
-
one of the field's configured picklist values, show a few real values as examples, and ask them to
|
|
343
|
-
re-enter (a close-looking value that isn't an exact match — e.g. typing `Manufacturer` when the
|
|
344
|
-
org's actual value is `Manufacturing` — is a real, confirmed-live failure mode, not a hypothetical
|
|
345
|
-
one: it deploys successfully but the filter never matches any account).
|
|
346
|
-
- **`int`/`double`/`currency`/`percent`** — check it parses as a number; reject and re-ask if not.
|
|
347
|
-
- **`date`/`datetime`** — check it parses as a valid date/datetime; reject and re-ask if not.
|
|
348
|
-
- **`boolean`** — check it's `true`/`false`; reject and re-ask if not.
|
|
349
|
-
- **`string`/`textarea`/other free-text types** — no fixed value set to check against; accept as
|
|
350
|
-
typed (there's nothing further to validate).
|
|
351
|
-
- **After each criterion, ask if there's another** ("Add another filter criterion? Or say done.").
|
|
352
|
-
Stop when the admin says done; a single-criterion filter is valid (skip `booleanFilter` questions
|
|
353
|
-
entirely — see below).
|
|
354
|
-
- **`booleanFilter`** — only needed when there are **2 or more** criteria. Once the admin is done
|
|
355
|
-
adding criteria, if there are 2+, ask how they combine: *"You added `<N>` criteria. How should they
|
|
356
|
-
combine? Enter a boolean expression using the criterion numbers, e.g. `1 AND 2 AND 3` or
|
|
357
|
-
`(1 AND 2) OR 3`."* Default suggestion is every criterion `AND`-ed together (matches every criterion
|
|
358
|
-
in the sample), but let the admin override with their own numbered expression, including nested
|
|
359
|
-
parentheses — confirmed live on an admin's own independently UI-built rule tree, e.g.
|
|
360
|
-
`"(1 AND 2) AND (3 AND 4) AND (5 OR 6)"`. Emit it as the literal string typed.
|
|
361
|
-
|
|
362
|
-
## ⚠️ Pitfall: the duplicate `flexibleHierarchy` block
|
|
363
|
-
|
|
364
|
-
Beyond the bespoke sub-skill's existing pitfall (never place `flexibleHierarchy` as a sibling of
|
|
365
|
-
`rootNode` at the `graph` root), a rule-based config has a **second** duplication trap: an
|
|
366
|
-
admin-provided sample carried the entire `flexibleHierarchy` object — `nodeList`, `rules`,
|
|
367
|
-
`relationshipList`, and `summaryRollupList` together — **twice**, as two literal sibling
|
|
368
|
-
`"flexibleHierarchy"` keys inside `graph.globalUiConfig` with identical content. This was initially
|
|
369
|
-
assumed to be a paste artifact in that sample — **that assumption was wrong.** A live build-from-scratch
|
|
370
|
-
create against a live org sent a payload with exactly **one** `flexibleHierarchy` key, and the
|
|
371
|
-
immediate MDAPI re-retrieve of the created component came back with **two**, byte-for-byte identical.
|
|
372
|
-
**The org itself duplicates `flexibleHierarchy` on create/retrieve for a Rule-Based
|
|
373
|
-
`RelationshipGraphDefinition`** — this is server-side round-trip behavior, not something the admin or
|
|
374
|
-
this skill introduced by pasting. **Still send only one `flexibleHierarchy` key when building/deploying
|
|
375
|
-
a payload** (the create call only needs — and only accepts cleanly — the single copy); the duplication
|
|
376
|
-
happens on the org's side afterward and is cosmetic on read-back, not something to replicate when
|
|
377
|
-
authoring. When reconciling an admin-supplied Path A config that already carries two identical copies
|
|
378
|
-
(whether from an export of this same round-trip behavior or an actual paste), strip down to one before
|
|
379
|
-
re-deploying.
|
|
380
|
-
|
|
381
|
-
## Deploy + verify
|
|
382
|
-
|
|
383
|
-
Identical confirm-then-deploy-then-read-back flow as the bespoke sub-skill: show the admin the
|
|
384
|
-
hierarchy-type name (`masterLabel`) and root object (name + root object only — never the internal
|
|
385
|
-
`relationshipList`/`summaryRollupList`/rule-tree wire plumbing) and ask for a go-ahead immediately
|
|
386
|
-
before the write:
|
|
387
|
-
|
|
388
|
-
> Ready to deploy the `<name>` hierarchy type (root object `<object>`, Rule-Based). Deploy it now?
|
|
389
|
-
> (yes / no)
|
|
390
|
-
|
|
391
|
-
On *yes*, create via **the raw Metadata API (mdapi package + SOAP deploy)**, wrapped by
|
|
392
|
-
`/headless/metadata`, against a
|
|
393
|
-
`relationshipGraphDefinitions/<DeveloperName>.relationshipGraphDefinition-meta.xml` component — **not**
|
|
394
|
-
the Tooling API POST, which fails unreliably for `GraphType: "FlexibleHierarchy"` (see the intro
|
|
395
|
-
above). Same `relationshipGraphDefVersions` field shape as the bespoke sub-skill, just with the
|
|
396
|
-
`rules` key present inside `globalUiConfig.flexibleHierarchy`. Then read back with the **same
|
|
397
|
-
queryable-columns limitation** as the bespoke sub-skill: `SELECT Id, DeveloperName, MasterLabel FROM
|
|
398
|
-
RelationshipGraphDefinition WHERE DeveloperName='<Name>'` — `GraphType`/`RootObject`/`IsActive` (and
|
|
399
|
-
the entire `rules` tree) are not queryable columns; they live inside
|
|
400
|
-
`relationshipGraphDefVersions`/`graphDefinition` and can't be verified by SOQL. If you need to verify
|
|
401
|
-
the rule tree itself took effect as authored, that requires re-retrieving the metadata component (not
|
|
402
|
-
a SOQL query) — note this limitation to the admin rather than implying the SOQL read-back proves the
|
|
403
|
-
rule tree deployed correctly.
|
|
404
|
-
|
|
405
|
-
## End state
|
|
406
|
-
|
|
407
|
-
A `RelationshipGraphDefinition` component carrying both the flat `nodeList`/`relationshipList` and
|
|
408
|
-
the `rules.graph.rootNode` rule tree — from the admin's own config (Path A) or one built with them
|
|
409
|
-
node-by-node and rule-by-rule (Path B) — created via MDAPI deploy and confirmed present by
|
|
410
|
-
read-back (existence only; the rule tree's correctness is confirmed by re-retrieve, not SOQL — see
|
|
411
|
-
above).
|
|
412
|
-
|
|
413
|
-
<!-- skill-validate: ignore-start -->
|
|
414
|
-
<!-- codey:operations start -->
|
|
415
|
-
## Operations Reference
|
|
416
|
-
|
|
417
|
-
Operations this skill uses — routing and dependency reference.
|
|
418
|
-
|
|
419
|
-
| Operation | Purpose | Status | Call | Depends on |
|
|
420
|
-
|-----------|---------|--------|------|------------|
|
|
421
|
-
| `step-1-delegate-node-list-and-relationships` | delegate | — | → `fsc-darksaber/fsc-flexible-hierarchy-configure-graph-config-create` | — |
|
|
422
|
-
| `step-2-check-configured-node-roles` | discovery | — | `GET /sobjects/FlexibleHierarchyNode/describe` | `step-1-delegate-node-list-and-relationships` |
|
|
423
|
-
| `step-3-validate-rule-tree-referenced-objects` | discovery | — | `GET /services/data/v66.0/sobjects/EntityDefinition/describe` | `step-1-delegate-node-list-and-relationships` |
|
|
424
|
-
| `step-3b-discover-onetomany-relationship-field` | discovery | — | `GET /services/data/v66.0/sobjects/{object}/describe` | `step-3-validate-rule-tree-referenced-objects` |
|
|
425
|
-
| `step-3c-discover-and-validate-filter-fields` | discovery | — | `GET /services/data/v66.0/sobjects/{object}/describe` | `step-3-validate-rule-tree-referenced-objects` |
|
|
426
|
-
| `step-4-deploy-relationship-graph-definition` | write | — | `/headless/metadata` | `step-2-check-configured-node-roles`, `step-3-validate-rule-tree-referenced-objects`, `step-3b-discover-onetomany-relationship-field`, `step-3c-discover-and-validate-filter-fields` |
|
|
427
|
-
| `step-5-verify-relationship-graph-definition` | verify | — | `GET /services/data/v66.0/query` | `step-4-deploy-relationship-graph-definition` |
|
|
428
|
-
<!-- codey:operations end -->
|
|
429
|
-
<!-- skill-validate: ignore-end -->
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: fsc-pricing-product-configurator-configure
|
|
3
|
-
parent: "digital-origination-pricing-setup"
|
|
4
|
-
purpose: "Configure Product Configurator attributes for the default lending pricing engine."
|
|
5
|
-
description: "Configure the Product Configurator prerequisites for Digital Lending pricing by resolving Loan Term, Credit Score, and Loan Amount attributes on the target lending product classification, creating the Credit Score and Loan Amount base attribute definitions headlessly when they are missing (they are net-new to this sibling — the product-setup sibling creates the other five), assigning them to the classification, setting the required Is Price Impacting and Is Hidden flags, and verifying the resulting product-attribute state. Uses Enterprise Product Catalog reads and verified sObject writes (AttributeDefinition + ProductClassificationAttr); the Connect API exposes isPriceImpacting/isHidden as read-only outputs, so the flags are written by sObject PATCH after a describe-verify, with a Product Catalog Management UI checkpoint only as a last resort."
|
|
6
|
-
metadata:
|
|
7
|
-
version: "1.0"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Digital Origination Product Configurator pricing prerequisites
|
|
11
|
-
|
|
12
|
-
Configure the three price-driving attributes required by the default Digital Lending Product
|
|
13
|
-
Configurator path. This sibling does not create decision tables or pricing procedures.
|
|
14
|
-
|
|
15
|
-
## Inputs and prerequisites
|
|
16
|
-
|
|
17
|
-
- Target-org alias
|
|
18
|
-
- Exact product-classification ID and lending product IDs
|
|
19
|
-
- Product Catalog Management already complete
|
|
20
|
-
- Product Catalog Management Designer access verified
|
|
21
|
-
|
|
22
|
-
Resolve attributes by record ID and API name. Do not change a similarly labeled attribute on another
|
|
23
|
-
classification.
|
|
24
|
-
|
|
25
|
-
## Required final state
|
|
26
|
-
|
|
27
|
-
| Attribute | Data type | Is Price Impacting | Is Hidden |
|
|
28
|
-
|---|---|---|---|
|
|
29
|
-
| Loan Term | Existing supported type, normally picklist/text-backed | true | preserve current value |
|
|
30
|
-
| Credit Score | Number | true | true |
|
|
31
|
-
| Loan Amount | Currency | true | preserve current value |
|
|
32
|
-
|
|
33
|
-
Supported documentation examples include Number for Credit Score, text-backed Picklist for Loan Term,
|
|
34
|
-
and Currency for loan/down-payment values. Validate the actual procedure and target release.
|
|
35
|
-
|
|
36
|
-
## Reusable EPC reads
|
|
37
|
-
|
|
38
|
-
Use approved SOR
|
|
39
|
-
`connect-api/cme-core-shasta/industries-epc-connect-api__sfdc.industries.epc.connect.api_oas_67.0`:
|
|
40
|
-
|
|
41
|
-
- `get-product-attributes` (`getProductAttributes`) - `GET /connect/pcm/product/{productId}/attributes`
|
|
42
|
-
- `post-product-classification-list` - resolve classifications
|
|
43
|
-
- `post-product-classification-details` - read classification details
|
|
44
|
-
- `get-categories` / `get-category-details` - verify catalog/category relationships
|
|
45
|
-
- `post-product-attribute-definition` (`postProductAttributeDefinition`) - creates a
|
|
46
|
-
product-attribute-definition assignment from an
|
|
47
|
-
existing `attributeDefinitionId`; it does not create the base Attribute Definition.
|
|
48
|
-
|
|
49
|
-
The Connect input representation for `postProductAttributeDefinition` does not contain
|
|
50
|
-
`isPriceImpacting` or `isHidden`. Across the current corpus those fields are outputs/read filters, not
|
|
51
|
-
typed writes.
|
|
52
|
-
|
|
53
|
-
## Step 1 - Resolve existing definitions and assignments
|
|
54
|
-
|
|
55
|
-
1. Read the target classification and products.
|
|
56
|
-
2. Read product attributes; capture AttributeDefinition, ProductClassificationAttribute, and
|
|
57
|
-
ProductAttributeDefinition IDs/API names plus data type and current flags.
|
|
58
|
-
3. Reuse exact Loan Term, Credit Score, and Loan Amount attributes.
|
|
59
|
-
4. If **Loan Term** is missing, it belongs to the product-setup sibling (Act 3) — report it as an
|
|
60
|
-
upstream gap and continue. If **Credit Score** or **Loan Amount** is missing, this sibling OWNS
|
|
61
|
-
creating them (they are net-new here, NOT part of Act 3's five) — go straight to Step 2 and create
|
|
62
|
-
them headlessly. **Do NOT stop to ask** — creation is the expected path on a fresh org, and a run
|
|
63
|
-
that leaves them uncreated is incomplete, not "done pending approval."
|
|
64
|
-
|
|
65
|
-
## Step 2 - Create the missing base attribute (headless, deterministic)
|
|
66
|
-
|
|
67
|
-
Base definitions this sibling creates when absent (net-new to this sibling — the product-setup Act 3
|
|
68
|
-
sibling creates the other five with the identical contract):
|
|
69
|
-
|
|
70
|
-
| Attribute | Label | API name (`Code`) | `DataType` |
|
|
71
|
-
|---|---|---|---|
|
|
72
|
-
| Credit Score | Credit Score | `CreditScore` | Number |
|
|
73
|
-
| Loan Amount | Loan Amount | `LoanAmount` | Currency |
|
|
74
|
-
|
|
75
|
-
The help article contains a typo `CreaditScore` in one Name field; do not reproduce it — the API name is
|
|
76
|
-
`CreditScore`.
|
|
77
|
-
|
|
78
|
-
There is no typed Connect operation to create the base AttributeDefinition, but the **direct sObject REST
|
|
79
|
-
path is proven** (identical to the product-setup Act 3 contract). Create each missing attribute, then
|
|
80
|
-
activate and assign it:
|
|
81
|
-
|
|
82
|
-
1. **Create the base `AttributeDefinition`** — `POST /services/data/vXX.0/sobjects/AttributeDefinition`
|
|
83
|
-
with the four required fields **`Name`, `Code`, `DataType`, `Label`** (org-verified): Credit Score →
|
|
84
|
-
`{Name:"CreditScore", Code:"CreditScore", Label:"Credit Score", DataType:"Number"}`; Loan Amount →
|
|
85
|
-
`{Name:"LoanAmount", Code:"LoanAmount", Label:"Loan Amount", DataType:"Currency"}`. **Do NOT send a
|
|
86
|
-
`Status` field** — `AttributeDefinition` has no `Status` column (`400 INVALID_FIELD`). It is created
|
|
87
|
-
`IsActive=false`.
|
|
88
|
-
2. **Activate it** — `PATCH /sobjects/AttributeDefinition/<id> {"IsActive": true}` (the activation field
|
|
89
|
-
is `IsActive`, NOT `Status`). This MUST precede the classification assignment: `ProductClassificationAttr`
|
|
90
|
-
rejects an inactive attribute with `INVALID_INPUT: You can associate only active attributes with a
|
|
91
|
-
product classification.`
|
|
92
|
-
3. **Assign it to the target classification** — POST a **`ProductClassificationAttr`** junction with the
|
|
93
|
-
required `Name`, `ProductClassificationId` (the lending classification), and `AttributeDefinitionId`
|
|
94
|
-
(the active attribute). This is the same junction the product-setup Act 4 `assign-attr-to-classification`
|
|
95
|
-
step writes, and it is the record that carries the Step 3 pricing flags (`IsPriceImpacting` /
|
|
96
|
-
`IsHidden`).
|
|
97
|
-
4. When the per-product assignment input IDs are known, `postProductAttributeDefinition`
|
|
98
|
-
(`POST /connect/pcm/product-attribute-definitions`) records the product-level assignment.
|
|
99
|
-
|
|
100
|
-
Verify each create/activate/assign with a fresh read before moving on. Fall back to a guided PCM
|
|
101
|
-
checkpoint only if the target org actually rejects these sObject writes.
|
|
102
|
-
|
|
103
|
-
## Step 3 - Set pricing flags
|
|
104
|
-
|
|
105
|
-
The `isPriceImpacting` / `isHidden` flags surface on the **`ProductClassificationAttr`** junction
|
|
106
|
-
(fields `IsPriceImpacting` / `IsHidden`). The Connect API exposes them as READ-ONLY outputs
|
|
107
|
-
(`getProductAttributes`; the `postProductAttributeDefinition` input carries no such fields), so the write
|
|
108
|
-
is a **standard sObject PATCH on `ProductClassificationAttr`** — attempt this headless path FIRST, with
|
|
109
|
-
the PCM UI only as a last-resort fallback.
|
|
110
|
-
|
|
111
|
-
Write order:
|
|
112
|
-
|
|
113
|
-
1. Resolve the exact `ProductClassificationAttr` record for each attribute on the target classification,
|
|
114
|
-
and **describe it to confirm `IsPriceImpacting` / `IsHidden` are `updateable`** (guards against a
|
|
115
|
-
release where they are calculated/read-only).
|
|
116
|
-
2. If updateable, PATCH each junction record, preserving unrelated fields:
|
|
117
|
-
- Loan Term: `IsPriceImpacting = true`.
|
|
118
|
-
- Credit Score: `IsPriceImpacting = true`, `IsHidden = true`.
|
|
119
|
-
- Loan Amount: `IsPriceImpacting = true`.
|
|
120
|
-
3. Only if the describe shows the fields are NOT updateable on this org/release, use the PCM UI
|
|
121
|
-
checkpoint as a fallback: Product Catalog Management -> Product Classification -> target classification
|
|
122
|
-
-> Attributes -> edit attribute -> set the same flags -> Save.
|
|
123
|
-
4. Re-read all three with `get-product-attributes` and confirm the flags match the required final state.
|
|
124
|
-
|
|
125
|
-
Credit Score is hidden because the applicant must not enter it; the Digital Lending configurator
|
|
126
|
-
retrieves it from the party credit profile.
|
|
127
|
-
|
|
128
|
-
## Idempotency and safety
|
|
129
|
-
|
|
130
|
-
- Skip writes when the flags already match.
|
|
131
|
-
- Never clear an existing Hidden flag on Loan Term or Loan Amount without an explicit request.
|
|
132
|
-
- Do not create duplicate attribute definitions or suffixed API names automatically.
|
|
133
|
-
- Do not assign the attribute to unrelated products or classifications.
|
|
134
|
-
- If record-level writes are not in an approved SOR, label them as standard sObject fallback and
|
|
135
|
-
verify updateability before execution.
|
|
136
|
-
|
|
137
|
-
## Output contract
|
|
138
|
-
|
|
139
|
-
Return classification ID, product IDs, attribute-definition and assignment IDs, actual API names,
|
|
140
|
-
data types, previous flags, action path (API or UI), and verified final flags. Pass this result to
|
|
141
|
-
nested `pricing-procedure` for the Product Configurator branch.
|
|
142
|
-
|
|
143
|
-
## Definition of done
|
|
144
|
-
|
|
145
|
-
The target classification exposes Loan Term, Credit Score, and Loan Amount as **active** attributes with
|
|
146
|
-
the required Is Price Impacting / Is Hidden flags, all confirmed through fresh reads. On a fresh org that
|
|
147
|
-
means Credit Score and Loan Amount were CREATED (base `AttributeDefinition` + activation + classification
|
|
148
|
-
assignment) and every flag was set — a run that stops without creating a missing Credit Score / Loan
|
|
149
|
-
Amount attribute is INCOMPLETE, not "partial by design." A UI fallback is acceptable only if the target
|
|
150
|
-
org's describe proved the flag fields non-updateable.
|