@salesforce/afv-skills 1.8.0 → 1.9.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/activating-datacloud/CREDITS.md +5 -0
- package/skills/activating-datacloud/README.md +39 -0
- package/skills/activating-datacloud/SKILL.md +118 -0
- package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
- package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
- package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
- package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
- package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
- package/skills/building-omnistudio-callable-apex/README.md +80 -0
- package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
- package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
- package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
- package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
- package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
- package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
- package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
- package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
- package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
- package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
- package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
- package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
- package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
- package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
- package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
- package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
- package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
- package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
- package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
- package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
- package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
- package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
- package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
- package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
- package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
- package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
- package/skills/building-sf-integrations/CREDITS.md +5 -0
- package/skills/building-sf-integrations/README.md +95 -0
- package/skills/building-sf-integrations/SKILL.md +192 -0
- package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
- package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
- package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
- package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
- package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
- package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
- package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
- package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
- package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
- package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
- package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
- package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
- package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
- package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
- package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
- package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
- package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
- package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
- package/skills/building-sf-integrations/references/cli-reference.md +94 -0
- package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
- package/skills/building-sf-integrations/references/event-patterns.md +838 -0
- package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
- package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
- package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
- package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
- package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
- package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
- package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
- package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
- package/skills/building-sf-integrations/scripts/README.md +100 -0
- package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
- package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
- package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
- package/skills/configuring-connected-apps/CREDITS.md +3 -0
- package/skills/configuring-connected-apps/README.md +99 -0
- package/skills/configuring-connected-apps/SKILL.md +224 -0
- package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
- package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
- package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
- package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
- package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
- package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
- package/skills/configuring-connected-apps/references/example-usage.md +256 -0
- package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
- package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
- package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
- package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
- package/skills/connecting-datacloud/CREDITS.md +5 -0
- package/skills/connecting-datacloud/README.md +59 -0
- package/skills/connecting-datacloud/SKILL.md +155 -0
- package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
- package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
- package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
- package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
- package/skills/debugging-apex-logs/CREDITS.md +22 -0
- package/skills/debugging-apex-logs/README.md +74 -0
- package/skills/debugging-apex-logs/SKILL.md +172 -0
- package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
- package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
- package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
- package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
- package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
- package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
- package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
- package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
- package/skills/debugging-apex-logs/references/common-issues.md +68 -0
- package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
- package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
- package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
- package/skills/deploying-metadata/CREDITS.md +25 -0
- package/skills/deploying-metadata/README.md +104 -0
- package/skills/deploying-metadata/SKILL.md +214 -0
- package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
- package/skills/deploying-metadata/assets/package.xml +121 -0
- package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
- package/skills/deploying-metadata/references/deploy.sh +73 -0
- package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
- package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
- package/skills/deploying-metadata/references/orchestration.md +183 -0
- package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
- package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
- package/skills/deploying-omnistudio-datapacks/README.md +88 -0
- package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
- package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
- package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
- package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
- package/skills/developing-agentforce/references/actions-reference.md +8 -8
- package/skills/fetching-salesforce-docs/README.md +66 -0
- package/skills/fetching-salesforce-docs/SKILL.md +209 -0
- package/skills/fetching-salesforce-docs/requirements.txt +2 -0
- package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
- package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
- package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
- package/skills/generating-apex/CREDITS.md +1 -26
- package/skills/generating-apex-test/CREDITS.md +2 -27
- package/skills/generating-lwc-components/CREDITS.md +5 -0
- package/skills/generating-lwc-components/README.md +126 -0
- package/skills/generating-lwc-components/SKILL.md +191 -0
- package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
- package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
- package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
- package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
- package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
- package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
- package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
- package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
- package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
- package/skills/generating-lwc-components/references/advanced-features.md +108 -0
- package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
- package/skills/generating-lwc-components/references/cli-commands.md +545 -0
- package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
- package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
- package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
- package/skills/generating-lwc-components/references/lms-guide.md +860 -0
- package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
- package/skills/generating-lwc-components/references/performance-guide.md +861 -0
- package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
- package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
- package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
- package/skills/generating-lwc-components/references/state-management.md +642 -0
- package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
- package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
- package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
- package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
- package/skills/generating-mermaid-diagrams/README.md +114 -0
- package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
- package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
- package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
- package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
- package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
- package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
- package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
- package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
- package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
- package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
- package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
- package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
- package/skills/generating-visual-diagrams/CREDITS.md +80 -0
- package/skills/generating-visual-diagrams/README.md +83 -0
- package/skills/generating-visual-diagrams/SKILL.md +208 -0
- package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
- package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
- package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
- package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
- package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
- package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
- package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
- package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
- package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
- package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
- package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
- package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
- package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
- package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
- package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
- package/skills/handling-sf-data/CREDITS.md +5 -0
- package/skills/handling-sf-data/README.md +112 -0
- package/skills/handling-sf-data/SKILL.md +235 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
- package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
- package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
- package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
- package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
- package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
- package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
- package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
- package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
- package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
- package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
- package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
- package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
- package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
- package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
- package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
- package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
- package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
- package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
- package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
- package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
- package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
- package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
- package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
- package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
- package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
- package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
- package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
- package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
- package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
- package/skills/handling-sf-data/references/orchestration.md +174 -0
- package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
- package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
- package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
- package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
- package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
- package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
- package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
- package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
- package/skills/harmonizing-datacloud/CREDITS.md +3 -0
- package/skills/harmonizing-datacloud/README.md +31 -0
- package/skills/harmonizing-datacloud/SKILL.md +117 -0
- package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
- package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
- package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
- package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
- package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
- package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
- package/skills/orchestrating-datacloud/CREDITS.md +15 -0
- package/skills/orchestrating-datacloud/README.md +129 -0
- package/skills/orchestrating-datacloud/SKILL.md +236 -0
- package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
- package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
- package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
- package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
- package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
- package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
- package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
- package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
- package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
- package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
- package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
- package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
- package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
- package/skills/preparing-datacloud/CREDITS.md +7 -0
- package/skills/preparing-datacloud/README.md +51 -0
- package/skills/preparing-datacloud/SKILL.md +191 -0
- package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
- package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
- package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
- package/skills/querying-soql/CREDITS.md +21 -0
- package/skills/querying-soql/README.md +41 -0
- package/skills/querying-soql/SKILL.md +143 -0
- package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
- package/skills/querying-soql/assets/basic-queries.soql +188 -0
- package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
- package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
- package/skills/querying-soql/assets/relationship-queries.soql +203 -0
- package/skills/querying-soql/assets/selector-class.cls +219 -0
- package/skills/querying-soql/references/anti-patterns.md +348 -0
- package/skills/querying-soql/references/cli-commands.md +358 -0
- package/skills/querying-soql/references/field-coverage-rules.md +514 -0
- package/skills/querying-soql/references/query-optimization.md +142 -0
- package/skills/querying-soql/references/selector-patterns.md +479 -0
- package/skills/querying-soql/references/soql-reference.md +227 -0
- package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
- package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
- package/skills/retrieving-datacloud/CREDITS.md +7 -0
- package/skills/retrieving-datacloud/README.md +44 -0
- package/skills/retrieving-datacloud/SKILL.md +120 -0
- package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
- package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
- package/skills/running-apex-tests/CREDITS.md +22 -0
- package/skills/running-apex-tests/README.md +94 -0
- package/skills/running-apex-tests/SKILL.md +158 -0
- package/skills/running-apex-tests/assets/basic-test.cls +169 -0
- package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
- package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
- package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
- package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
- package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
- package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
- package/skills/running-apex-tests/references/cli-commands.md +289 -0
- package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
- package/skills/running-apex-tests/references/performance-optimization.md +283 -0
- package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
- package/skills/running-apex-tests/references/test-patterns.md +154 -0
- package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
- package/skills/segmenting-datacloud/CREDITS.md +3 -0
- package/skills/segmenting-datacloud/README.md +36 -0
- package/skills/segmenting-datacloud/SKILL.md +115 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
<!-- Parent: building-sf-integrations/SKILL.md -->
|
|
2
|
+
# Named Credentials Automation Guide
|
|
3
|
+
|
|
4
|
+
This guide explains how to automate Named Credential configuration using the building-sf-integrations helper scripts.
|
|
5
|
+
|
|
6
|
+
> **Key Insight:** Enhanced Named Credentials (API 60+) can be configured programmatically using `ConnectApi.NamedCredentials` - no UI required!
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Enhanced Named Credentials = **External Credential** + **Named Credential** + **Endpoint Security**
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
External Credential (stores the API key securely)
|
|
16
|
+
↓
|
|
17
|
+
Named Credential (references the External Credential)
|
|
18
|
+
↓
|
|
19
|
+
Your HTTP Callout (uses callout:NamedCredentialName)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Why Enhanced Named Credentials?
|
|
23
|
+
|
|
24
|
+
| Benefit | Description |
|
|
25
|
+
|---------|-------------|
|
|
26
|
+
| **Security** | AES-256 encryption by Salesforce platform |
|
|
27
|
+
| **Flexibility** | Supports Custom, Basic, OAuth, JWT protocols |
|
|
28
|
+
| **Portability** | Easier to manage across multiple orgs |
|
|
29
|
+
| **Automation** | Configurable via ConnectApi (no UI required) |
|
|
30
|
+
| **Compliance** | Passes PCI-DSS, SOC 2 audits |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Deployment Order
|
|
35
|
+
|
|
36
|
+
**CRITICAL:** Deploy components in this exact order:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# 1. Deploy External Credential (defines the credential structure)
|
|
40
|
+
sf project deploy start \
|
|
41
|
+
--source-dir force-app/main/default/externalCredentials/YourAPI.externalCredential-meta.xml \
|
|
42
|
+
--target-org YourOrg
|
|
43
|
+
|
|
44
|
+
# 2. Deploy Named Credential (references the External Credential)
|
|
45
|
+
sf project deploy start \
|
|
46
|
+
--source-dir force-app/main/default/namedCredentials/YourAPI.namedCredential-meta.xml \
|
|
47
|
+
--target-org YourOrg
|
|
48
|
+
|
|
49
|
+
# 3. Deploy endpoint security (allows outbound HTTP calls)
|
|
50
|
+
sf project deploy start \
|
|
51
|
+
--source-dir force-app/main/default/cspTrustedSites/YourAPI.cspTrustedSite-meta.xml \
|
|
52
|
+
--target-org YourOrg
|
|
53
|
+
|
|
54
|
+
# 4. Set the API key using our automation script
|
|
55
|
+
./scripts/configure-named-credential.sh YourOrg
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Automation Scripts
|
|
61
|
+
|
|
62
|
+
### `configure-named-credential.sh`
|
|
63
|
+
|
|
64
|
+
**Purpose:** Sets API keys for Enhanced Named Credentials using ConnectApi
|
|
65
|
+
|
|
66
|
+
**Usage:**
|
|
67
|
+
```bash
|
|
68
|
+
./scripts/configure-named-credential.sh <org-alias>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**What it does:**
|
|
72
|
+
1. Validates org connection via `sf org display`
|
|
73
|
+
2. Checks External Credential exists via SOQL
|
|
74
|
+
3. Prompts for API key securely (input hidden)
|
|
75
|
+
4. Generates Apex using `ConnectApi.NamedCredentials.createCredential()`
|
|
76
|
+
5. Handles create vs. patch automatically
|
|
77
|
+
|
|
78
|
+
**Under the hood:**
|
|
79
|
+
```apex
|
|
80
|
+
ConnectApi.CredentialInput creds = new ConnectApi.CredentialInput();
|
|
81
|
+
creds.externalCredential = 'YourExternalCredential';
|
|
82
|
+
creds.principalName = 'yourPrincipalName';
|
|
83
|
+
creds.authenticationProtocol = ConnectApi.CredentialAuthenticationProtocol.Custom;
|
|
84
|
+
|
|
85
|
+
Map<String, ConnectApi.CredentialValueInput> params = new Map<String, ConnectApi.CredentialValueInput>();
|
|
86
|
+
ConnectApi.CredentialValueInput apiKey = new ConnectApi.CredentialValueInput();
|
|
87
|
+
apiKey.encrypted = true;
|
|
88
|
+
apiKey.value = 'YOUR_API_KEY';
|
|
89
|
+
params.put('apiKey', apiKey);
|
|
90
|
+
|
|
91
|
+
creds.credentials = params;
|
|
92
|
+
ConnectApi.NamedCredentials.createCredential(creds);
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### `set-api-credential.sh`
|
|
96
|
+
|
|
97
|
+
**Purpose:** Stores API keys in Custom Settings (legacy/dev approach)
|
|
98
|
+
|
|
99
|
+
**Usage:**
|
|
100
|
+
```bash
|
|
101
|
+
# Secure input (recommended)
|
|
102
|
+
./scripts/set-api-credential.sh <setting-name> - <org-alias>
|
|
103
|
+
|
|
104
|
+
# Direct input
|
|
105
|
+
./scripts/set-api-credential.sh <setting-name> <api-key> <org-alias>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**When to use:**
|
|
109
|
+
- Dev/test environments
|
|
110
|
+
- CI/CD pipelines (no Apex execution)
|
|
111
|
+
- Simple API key auth via query parameters
|
|
112
|
+
|
|
113
|
+
**Not recommended for production** - use Enhanced Named Credentials instead.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Complete Example: Weather API
|
|
118
|
+
|
|
119
|
+
### Step 1: Create Metadata
|
|
120
|
+
|
|
121
|
+
**External Credential:**
|
|
122
|
+
```xml
|
|
123
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
124
|
+
<ExternalCredential xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
125
|
+
<authenticationProtocol>Custom</authenticationProtocol>
|
|
126
|
+
<externalCredentialParameters>
|
|
127
|
+
<parameterGroup>weatherAPIKey</parameterGroup>
|
|
128
|
+
<parameterName>weatherAPIKey</parameterName>
|
|
129
|
+
<parameterType>NamedPrincipal</parameterType>
|
|
130
|
+
<sequenceNumber>1</sequenceNumber>
|
|
131
|
+
</externalCredentialParameters>
|
|
132
|
+
<label>Weather API</label>
|
|
133
|
+
</ExternalCredential>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Named Credential:**
|
|
137
|
+
```xml
|
|
138
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
139
|
+
<NamedCredential xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
140
|
+
<allowMergeFieldsInBody>false</allowMergeFieldsInBody>
|
|
141
|
+
<allowMergeFieldsInHeader>true</allowMergeFieldsInHeader>
|
|
142
|
+
<calloutStatus>Enabled</calloutStatus>
|
|
143
|
+
<label>Weather API</label>
|
|
144
|
+
<namedCredentialParameters>
|
|
145
|
+
<parameterName>Url</parameterName>
|
|
146
|
+
<parameterType>Url</parameterType>
|
|
147
|
+
<parameterValue>https://api.weather.com</parameterValue>
|
|
148
|
+
</namedCredentialParameters>
|
|
149
|
+
<namedCredentialParameters>
|
|
150
|
+
<externalCredential>WeatherAPI</externalCredential>
|
|
151
|
+
<parameterName>ExternalCredential</parameterName>
|
|
152
|
+
<parameterType>Authentication</parameterType>
|
|
153
|
+
</namedCredentialParameters>
|
|
154
|
+
<namedCredentialType>SecuredEndpoint</namedCredentialType>
|
|
155
|
+
</NamedCredential>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Step 2: Deploy and Configure
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Deploy all metadata
|
|
162
|
+
sf project deploy start --metadata ExternalCredential:WeatherAPI \
|
|
163
|
+
--metadata NamedCredential:WeatherAPI \
|
|
164
|
+
--metadata CspTrustedSite:WeatherAPI \
|
|
165
|
+
--target-org MyOrg
|
|
166
|
+
|
|
167
|
+
# Configure API key
|
|
168
|
+
./scripts/configure-named-credential.sh MyOrg
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Step 3: Use in Apex
|
|
172
|
+
|
|
173
|
+
```apex
|
|
174
|
+
HttpRequest req = new HttpRequest();
|
|
175
|
+
req.setEndpoint('callout:WeatherAPI/forecast?city=London');
|
|
176
|
+
req.setMethod('GET');
|
|
177
|
+
|
|
178
|
+
HttpResponse res = new Http().send(req);
|
|
179
|
+
System.debug(res.getBody());
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
The API key is automatically included - no manual credential handling!
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Troubleshooting
|
|
187
|
+
|
|
188
|
+
| Error | Cause | Fix |
|
|
189
|
+
|-------|-------|-----|
|
|
190
|
+
| "External Credential not found" | Not deployed or wrong name | Deploy first, check spelling |
|
|
191
|
+
| "Named Credential not found" | Not deployed | Deploy after External Credential |
|
|
192
|
+
| "No existing credentials to update" | Using patch instead of create | Script handles automatically |
|
|
193
|
+
| "Unable to connect" | Missing endpoint security | Deploy CSP Trusted Site |
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Related Documentation
|
|
198
|
+
|
|
199
|
+
- [named-credentials-guide.md](./named-credentials-guide.md) - Template reference
|
|
200
|
+
- [external-services-guide.md](./external-services-guide.md) - OpenAPI integration
|
|
201
|
+
- [security-best-practices.md](./security-best-practices.md) - Security patterns
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
<!-- Parent: building-sf-integrations/SKILL.md -->
|
|
2
|
+
# Named Credentials Guide
|
|
3
|
+
|
|
4
|
+
## Overview
|
|
5
|
+
|
|
6
|
+
Named Credentials provide secure storage of authentication credentials and endpoint URLs for external system integrations. They eliminate the need to hardcode credentials in Apex code.
|
|
7
|
+
|
|
8
|
+
## Architecture Evolution
|
|
9
|
+
|
|
10
|
+
### Legacy Named Credentials (Pre-API 61)
|
|
11
|
+
|
|
12
|
+
- Single principal per credential
|
|
13
|
+
- Authentication configured directly on Named Credential
|
|
14
|
+
- Simpler setup but less flexible
|
|
15
|
+
|
|
16
|
+
### External Credentials (API 61+)
|
|
17
|
+
|
|
18
|
+
- Separate External Credential and Named Credential
|
|
19
|
+
- Named Principal and Per-User Principal support
|
|
20
|
+
- Permission Set-based access control
|
|
21
|
+
- More secure and flexible
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
25
|
+
│ CREDENTIAL ARCHITECTURE (API 61+) │
|
|
26
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
27
|
+
│ │
|
|
28
|
+
│ External Credential │
|
|
29
|
+
│ ├── Authentication Protocol (OAuth, JWT, Custom) │
|
|
30
|
+
│ ├── OAuth/JWT Parameters │
|
|
31
|
+
│ └── Principals │
|
|
32
|
+
│ ├── Named Principal (shared service account) │
|
|
33
|
+
│ └── Per-User Principal (individual auth) │
|
|
34
|
+
│ │
|
|
35
|
+
│ Named Credential │
|
|
36
|
+
│ ├── Endpoint URL │
|
|
37
|
+
│ └── References External Credential │
|
|
38
|
+
│ │
|
|
39
|
+
│ Permission Set │
|
|
40
|
+
│ └── External Credential Principal Access │
|
|
41
|
+
│ │
|
|
42
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Authentication Types
|
|
46
|
+
|
|
47
|
+
### 1. OAuth 2.0 Client Credentials
|
|
48
|
+
|
|
49
|
+
**Use Case**: Server-to-server integration without user context
|
|
50
|
+
|
|
51
|
+
```apex
|
|
52
|
+
// Apex usage - Named Credential handles auth automatically
|
|
53
|
+
HttpRequest req = new HttpRequest();
|
|
54
|
+
req.setEndpoint('callout:MyOAuthCredential/api/resource');
|
|
55
|
+
req.setMethod('GET');
|
|
56
|
+
// Authorization header added automatically
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Setup**:
|
|
60
|
+
1. Create Auth Provider (optional, for complex OAuth)
|
|
61
|
+
2. Create Named Credential with OAuth protocol
|
|
62
|
+
3. Enter Client ID and Client Secret via UI
|
|
63
|
+
|
|
64
|
+
### 2. OAuth 2.0 JWT Bearer
|
|
65
|
+
|
|
66
|
+
**Use Case**: Certificate-based server-to-server auth
|
|
67
|
+
|
|
68
|
+
**Prerequisites**:
|
|
69
|
+
- Certificate in Setup → Certificate and Key Management
|
|
70
|
+
- Connected App configured for JWT Bearer
|
|
71
|
+
- External system configured to trust certificate
|
|
72
|
+
|
|
73
|
+
**Flow**:
|
|
74
|
+
1. Salesforce creates JWT with claims (iss, sub, aud, exp)
|
|
75
|
+
2. JWT signed with certificate private key
|
|
76
|
+
3. JWT exchanged for access token
|
|
77
|
+
4. Access token used for API calls
|
|
78
|
+
|
|
79
|
+
### 3. Certificate-Based (Mutual TLS)
|
|
80
|
+
|
|
81
|
+
**Use Case**: High-security integrations requiring client certificate
|
|
82
|
+
|
|
83
|
+
**Setup**:
|
|
84
|
+
1. Obtain client certificate from CA or external system
|
|
85
|
+
2. Import to Setup → Certificate and Key Management
|
|
86
|
+
3. Configure Named Credential with certificate
|
|
87
|
+
4. External system must trust Salesforce's certificate
|
|
88
|
+
|
|
89
|
+
### 4. Basic Auth / API Key
|
|
90
|
+
|
|
91
|
+
**Use Case**: Simple APIs, internal systems
|
|
92
|
+
|
|
93
|
+
**Pattern for API Key**:
|
|
94
|
+
```apex
|
|
95
|
+
HttpRequest req = new HttpRequest();
|
|
96
|
+
req.setEndpoint('callout:MyCredential/api/resource');
|
|
97
|
+
req.setHeader('X-API-Key', '{!$Credential.Password}');
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Best Practices
|
|
101
|
+
|
|
102
|
+
### DO
|
|
103
|
+
|
|
104
|
+
- **Use Named Credentials** for ALL external callouts
|
|
105
|
+
- **Rotate credentials** regularly using Named Credential update
|
|
106
|
+
- **Use External Credentials** (API 61+) for new development
|
|
107
|
+
- **Limit OAuth scopes** to minimum required
|
|
108
|
+
- **Use Per-User Principal** when user context matters
|
|
109
|
+
- **Test credentials** before deployment
|
|
110
|
+
|
|
111
|
+
### DON'T
|
|
112
|
+
|
|
113
|
+
- **Never hardcode** credentials in Apex
|
|
114
|
+
- **Never commit** credentials to source control
|
|
115
|
+
- **Don't share** service account credentials across environments
|
|
116
|
+
- **Don't use** overly broad OAuth scopes
|
|
117
|
+
|
|
118
|
+
## Common Patterns
|
|
119
|
+
|
|
120
|
+
### Pattern 1: Service Integration
|
|
121
|
+
|
|
122
|
+
```apex
|
|
123
|
+
public class ExternalServiceCallout {
|
|
124
|
+
public static HttpResponse callService(String endpoint, String body) {
|
|
125
|
+
HttpRequest req = new HttpRequest();
|
|
126
|
+
req.setEndpoint('callout:ServiceCredential' + endpoint);
|
|
127
|
+
req.setMethod('POST');
|
|
128
|
+
req.setHeader('Content-Type', 'application/json');
|
|
129
|
+
req.setBody(body);
|
|
130
|
+
return new Http().send(req);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Pattern 2: Multiple Environments
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
Named Credentials:
|
|
139
|
+
├── MyAPI_Dev → https://api-dev.example.com
|
|
140
|
+
├── MyAPI_UAT → https://api-uat.example.com
|
|
141
|
+
└── MyAPI_Prod → https://api.example.com
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Use Custom Metadata or Custom Settings to select credential by environment.
|
|
145
|
+
|
|
146
|
+
### Pattern 3: Per-User OAuth (API 61+)
|
|
147
|
+
|
|
148
|
+
For APIs requiring user-specific authentication:
|
|
149
|
+
|
|
150
|
+
1. Create External Credential with Per-User Principal
|
|
151
|
+
2. Create Named Credential referencing External Credential
|
|
152
|
+
3. Users authenticate individually via OAuth flow
|
|
153
|
+
4. Each user's callouts use their own token
|
|
154
|
+
|
|
155
|
+
## Troubleshooting
|
|
156
|
+
|
|
157
|
+
| Error | Cause | Solution |
|
|
158
|
+
|-------|-------|----------|
|
|
159
|
+
| `Named credential not found` | Credential doesn't exist or wrong name | Verify credential name in Setup |
|
|
160
|
+
| `Authentication failed` | Invalid credentials | Update credentials via Setup UI |
|
|
161
|
+
| `Insufficient privileges` | User lacks permission | Assign Permission Set with External Credential Principal Access |
|
|
162
|
+
| `Connection refused` | Network/firewall issue | Check Remote Site Settings, firewall rules |
|
|
163
|
+
| `Certificate error` | SSL/TLS issue | Verify certificate chain, expiration |
|
|
164
|
+
|
|
165
|
+
## Migration: Legacy to External Credentials
|
|
166
|
+
|
|
167
|
+
1. **Create External Credential** with same auth parameters
|
|
168
|
+
2. **Create new Named Credential** referencing External Credential
|
|
169
|
+
3. **Create Permission Set** with External Credential Principal Access
|
|
170
|
+
4. **Assign Permission Set** to integration users
|
|
171
|
+
5. **Update Apex code** to use new Named Credential
|
|
172
|
+
6. **Test thoroughly** before decommissioning legacy credential
|
|
173
|
+
7. **Delete legacy** Named Credential after validation
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
<!-- Parent: building-sf-integrations/SKILL.md -->
|
|
2
|
+
# Platform Events Guide
|
|
3
|
+
|
|
4
|
+
## Overview
|
|
5
|
+
|
|
6
|
+
Platform Events enable event-driven architecture in Salesforce. They provide a scalable, asynchronous messaging system for real-time integrations.
|
|
7
|
+
|
|
8
|
+
## Event Types
|
|
9
|
+
|
|
10
|
+
### Standard Volume
|
|
11
|
+
|
|
12
|
+
- Up to ~2,000 events per hour
|
|
13
|
+
- Included in all Salesforce editions
|
|
14
|
+
- Standard delivery guarantees
|
|
15
|
+
|
|
16
|
+
### High Volume
|
|
17
|
+
|
|
18
|
+
- Millions of events per day
|
|
19
|
+
- At-least-once delivery
|
|
20
|
+
- 24-hour retention for replay
|
|
21
|
+
- May require additional entitlement
|
|
22
|
+
|
|
23
|
+
## When to Use Platform Events
|
|
24
|
+
|
|
25
|
+
| Scenario | Platform Events | Other Options |
|
|
26
|
+
|----------|-----------------|---------------|
|
|
27
|
+
| Real-time notifications | ✅ Best choice | - |
|
|
28
|
+
| Decoupled integrations | ✅ Best choice | - |
|
|
29
|
+
| High-volume streaming | ✅ High Volume | Change Data Capture |
|
|
30
|
+
| Simple record sync | Consider | Change Data Capture |
|
|
31
|
+
| External system notifications | ✅ Best choice | - |
|
|
32
|
+
| Internal process triggers | ✅ Good choice | Process Builder, Flow |
|
|
33
|
+
|
|
34
|
+
## Creating Platform Events
|
|
35
|
+
|
|
36
|
+
### Via Metadata (Recommended)
|
|
37
|
+
|
|
38
|
+
```xml
|
|
39
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
40
|
+
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
41
|
+
<deploymentStatus>Deployed</deploymentStatus>
|
|
42
|
+
<eventType>HighVolume</eventType>
|
|
43
|
+
<label>Order Update Event</label>
|
|
44
|
+
<pluralLabel>Order Update Events</pluralLabel>
|
|
45
|
+
<publishBehavior>PublishAfterCommit</publishBehavior>
|
|
46
|
+
<fields>
|
|
47
|
+
<fullName>Order_Id__c</fullName>
|
|
48
|
+
<label>Order ID</label>
|
|
49
|
+
<type>Text</type>
|
|
50
|
+
<length>18</length>
|
|
51
|
+
</fields>
|
|
52
|
+
<fields>
|
|
53
|
+
<fullName>Status__c</fullName>
|
|
54
|
+
<label>Status</label>
|
|
55
|
+
<type>Text</type>
|
|
56
|
+
<length>50</length>
|
|
57
|
+
</fields>
|
|
58
|
+
</CustomObject>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### File Location
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
force-app/main/default/objects/Order_Update_Event__e/Order_Update_Event__e.object-meta.xml
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Publishing Events
|
|
68
|
+
|
|
69
|
+
### From Apex
|
|
70
|
+
|
|
71
|
+
```apex
|
|
72
|
+
// Single event
|
|
73
|
+
Order_Update_Event__e event = new Order_Update_Event__e();
|
|
74
|
+
event.Order_Id__c = orderId;
|
|
75
|
+
event.Status__c = 'Shipped';
|
|
76
|
+
|
|
77
|
+
Database.SaveResult result = EventBus.publish(event);
|
|
78
|
+
if (result.isSuccess()) {
|
|
79
|
+
System.debug('Event published: ' + result.getId());
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Multiple events
|
|
83
|
+
List<Order_Update_Event__e> events = new List<Order_Update_Event__e>();
|
|
84
|
+
// ... populate events
|
|
85
|
+
List<Database.SaveResult> results = EventBus.publish(events);
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### From Flow
|
|
89
|
+
|
|
90
|
+
1. Create Record element
|
|
91
|
+
2. Select Platform Event object
|
|
92
|
+
3. Map field values
|
|
93
|
+
|
|
94
|
+
### From Process Builder
|
|
95
|
+
|
|
96
|
+
1. Add Immediate Action
|
|
97
|
+
2. Select "Create a Record"
|
|
98
|
+
3. Choose Platform Event
|
|
99
|
+
|
|
100
|
+
## Subscribing to Events
|
|
101
|
+
|
|
102
|
+
### Apex Trigger
|
|
103
|
+
|
|
104
|
+
```apex
|
|
105
|
+
trigger OrderUpdateSubscriber on Order_Update_Event__e (after insert) {
|
|
106
|
+
for (Order_Update_Event__e event : Trigger.new) {
|
|
107
|
+
System.debug('Order ' + event.Order_Id__c + ' is now ' + event.Status__c);
|
|
108
|
+
// Process event
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Set checkpoint for durability
|
|
112
|
+
EventBus.TriggerContext.currentContext().setResumeCheckpoint(
|
|
113
|
+
Trigger.new[Trigger.new.size() - 1].ReplayId
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Flow (Record-Triggered)
|
|
119
|
+
|
|
120
|
+
1. Create Platform Event-Triggered Flow
|
|
121
|
+
2. Select Platform Event object
|
|
122
|
+
3. Build logic with event data
|
|
123
|
+
|
|
124
|
+
### External (CometD)
|
|
125
|
+
|
|
126
|
+
External systems can subscribe using CometD streaming:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
/event/Order_Update_Event__e
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Publish Behavior
|
|
133
|
+
|
|
134
|
+
### PublishAfterCommit (Default)
|
|
135
|
+
|
|
136
|
+
- Event published after transaction commits
|
|
137
|
+
- If transaction rolls back, event NOT published
|
|
138
|
+
- **Recommended for most cases**
|
|
139
|
+
|
|
140
|
+
### PublishImmediately
|
|
141
|
+
|
|
142
|
+
- Event published immediately
|
|
143
|
+
- Event still published even if transaction rolls back
|
|
144
|
+
- Use when external system must be notified regardless of outcome
|
|
145
|
+
|
|
146
|
+
## Durability & Replay
|
|
147
|
+
|
|
148
|
+
### Replay ID
|
|
149
|
+
|
|
150
|
+
Each event has a unique `ReplayId` for tracking and replay:
|
|
151
|
+
|
|
152
|
+
```apex
|
|
153
|
+
String replayId = event.ReplayId;
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Resume Checkpoint
|
|
157
|
+
|
|
158
|
+
Set checkpoint to ensure durability:
|
|
159
|
+
|
|
160
|
+
```apex
|
|
161
|
+
// In trigger
|
|
162
|
+
EventBus.TriggerContext.currentContext().setResumeCheckpoint(lastReplayId);
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
If trigger fails after checkpoint, processing resumes from that point.
|
|
166
|
+
|
|
167
|
+
### Retention
|
|
168
|
+
|
|
169
|
+
- High Volume events: 24 hours
|
|
170
|
+
- Standard Volume: 24 hours
|
|
171
|
+
|
|
172
|
+
## Best Practices
|
|
173
|
+
|
|
174
|
+
### Publishing
|
|
175
|
+
|
|
176
|
+
1. **Batch events** when publishing multiple
|
|
177
|
+
2. **Check SaveResults** for publish failures
|
|
178
|
+
3. **Use meaningful correlation IDs** for tracking
|
|
179
|
+
4. **Include timestamp** for ordering
|
|
180
|
+
5. **Keep payloads small** - use IDs, not full records
|
|
181
|
+
|
|
182
|
+
### Subscribing
|
|
183
|
+
|
|
184
|
+
1. **Always set resume checkpoint** in triggers
|
|
185
|
+
2. **Don't throw exceptions** - catch and log errors
|
|
186
|
+
3. **Process idempotently** - events may replay
|
|
187
|
+
4. **Keep processing lightweight** - queue heavy work
|
|
188
|
+
5. **Handle duplicates** using correlation ID
|
|
189
|
+
|
|
190
|
+
### Design
|
|
191
|
+
|
|
192
|
+
1. **Event granularity** - not too fine, not too coarse
|
|
193
|
+
2. **Include enough context** but not entire records
|
|
194
|
+
3. **Version your events** if schema evolves
|
|
195
|
+
4. **Document event contracts** for consumers
|
|
196
|
+
|
|
197
|
+
## Error Handling
|
|
198
|
+
|
|
199
|
+
### Publish Errors
|
|
200
|
+
|
|
201
|
+
```apex
|
|
202
|
+
List<Database.SaveResult> results = EventBus.publish(events);
|
|
203
|
+
for (Integer i = 0; i < results.size(); i++) {
|
|
204
|
+
if (!results[i].isSuccess()) {
|
|
205
|
+
for (Database.Error err : results[i].getErrors()) {
|
|
206
|
+
System.debug('Publish failed: ' + err.getMessage());
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Subscriber Errors
|
|
213
|
+
|
|
214
|
+
```apex
|
|
215
|
+
trigger MySubscriber on My_Event__e (after insert) {
|
|
216
|
+
for (My_Event__e event : Trigger.new) {
|
|
217
|
+
try {
|
|
218
|
+
processEvent(event);
|
|
219
|
+
} catch (Exception e) {
|
|
220
|
+
// Log error, don't throw
|
|
221
|
+
System.debug('Error processing ' + event.ReplayId + ': ' + e.getMessage());
|
|
222
|
+
// Create error log record
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Still set checkpoint even if some failed
|
|
227
|
+
EventBus.TriggerContext.currentContext().setResumeCheckpoint(lastReplayId);
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Monitoring
|
|
232
|
+
|
|
233
|
+
### Setup → Platform Events
|
|
234
|
+
|
|
235
|
+
- View event definitions
|
|
236
|
+
- Check usage metrics
|
|
237
|
+
- Monitor delivery status
|
|
238
|
+
|
|
239
|
+
### Event Delivery Failures
|
|
240
|
+
|
|
241
|
+
Check for:
|
|
242
|
+
- Unhandled exceptions in triggers
|
|
243
|
+
- Apex CPU timeout
|
|
244
|
+
- Governor limit errors
|
|
245
|
+
|
|
246
|
+
### Event Publishing
|
|
247
|
+
|
|
248
|
+
Query `EventBusSubscriber` for subscription health:
|
|
249
|
+
|
|
250
|
+
```apex
|
|
251
|
+
SELECT Id, Position, ExternalId, Name, Status, Tip
|
|
252
|
+
FROM EventBusSubscriber
|
|
253
|
+
WHERE Topic = 'Order_Update_Event__e'
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Limits
|
|
257
|
+
|
|
258
|
+
| Limit | Standard Volume | High Volume |
|
|
259
|
+
|-------|-----------------|-------------|
|
|
260
|
+
| Events per hour | ~2,000 | Millions |
|
|
261
|
+
| Retention | 24 hours | 24 hours |
|
|
262
|
+
| Max event size | 1 MB | 1 MB |
|
|
263
|
+
| Fields per event | 100 | 100 |
|
|
264
|
+
|
|
265
|
+
## External Integration
|
|
266
|
+
|
|
267
|
+
### Subscribe from External System
|
|
268
|
+
|
|
269
|
+
Use CometD client to connect to Streaming API:
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
Endpoint: /cometd/62.0
|
|
273
|
+
Channel: /event/Order_Update_Event__e
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Publish from External System
|
|
277
|
+
|
|
278
|
+
Use REST API:
|
|
279
|
+
|
|
280
|
+
```http
|
|
281
|
+
POST /services/data/v66.0/sobjects/Order_Update_Event__e
|
|
282
|
+
Content-Type: application/json
|
|
283
|
+
|
|
284
|
+
{
|
|
285
|
+
"Order_Id__c": "001xx000003NGSFAA4",
|
|
286
|
+
"Status__c": "Shipped"
|
|
287
|
+
}
|
|
288
|
+
```
|