@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
package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Platform Event Subscriber Trigger for {{EventName}}__e
|
|
3
|
+
*
|
|
4
|
+
* Use Case: React to published Platform Events
|
|
5
|
+
* - Process incoming events from other systems
|
|
6
|
+
* - Sync data based on events
|
|
7
|
+
* - Trigger downstream processes
|
|
8
|
+
*
|
|
9
|
+
* Key Concepts:
|
|
10
|
+
* - Platform Event triggers run in their own execution context
|
|
11
|
+
* - Events are processed in batches (up to 2000 for High Volume)
|
|
12
|
+
* - ReplayId enables resuming from failures
|
|
13
|
+
* - SetResumeCheckpoint ensures durability
|
|
14
|
+
*
|
|
15
|
+
* IMPORTANT:
|
|
16
|
+
* - Triggers on Platform Events only fire on AFTER INSERT
|
|
17
|
+
* - Events are immutable (cannot be updated or deleted)
|
|
18
|
+
* - Triggers run as Automated Process user
|
|
19
|
+
*
|
|
20
|
+
* @author {{Author}}
|
|
21
|
+
* @date {{Date}}
|
|
22
|
+
*/
|
|
23
|
+
trigger {{EventName}}Subscriber on {{EventName}}__e (after insert) {
|
|
24
|
+
|
|
25
|
+
// Track last processed replay ID for durability
|
|
26
|
+
String lastReplayId = '';
|
|
27
|
+
|
|
28
|
+
// Process each event
|
|
29
|
+
for ({{EventName}}__e event : Trigger.new) {
|
|
30
|
+
// Store replay ID for checkpoint
|
|
31
|
+
lastReplayId = event.ReplayId;
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
// Log event receipt
|
|
35
|
+
System.debug(LoggingLevel.DEBUG,
|
|
36
|
+
'Processing event: ' + event.Correlation_Id__c +
|
|
37
|
+
' Operation: ' + event.Operation__c +
|
|
38
|
+
' ReplayId: ' + event.ReplayId);
|
|
39
|
+
|
|
40
|
+
// Route to handler based on operation
|
|
41
|
+
switch on event.Operation__c {
|
|
42
|
+
when 'CREATE' {
|
|
43
|
+
{{EventName}}Handler.handleCreate(event);
|
|
44
|
+
}
|
|
45
|
+
when 'UPDATE' {
|
|
46
|
+
{{EventName}}Handler.handleUpdate(event);
|
|
47
|
+
}
|
|
48
|
+
when 'DELETE' {
|
|
49
|
+
{{EventName}}Handler.handleDelete(event);
|
|
50
|
+
}
|
|
51
|
+
when else {
|
|
52
|
+
// Unknown operation - log and continue
|
|
53
|
+
System.debug(LoggingLevel.WARN,
|
|
54
|
+
'Unknown operation: ' + event.Operation__c +
|
|
55
|
+
' for event: ' + event.Correlation_Id__c);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
} catch (Exception e) {
|
|
60
|
+
// Log error but continue processing other events
|
|
61
|
+
// Don't throw - that would cause retry of ALL events in batch
|
|
62
|
+
System.debug(LoggingLevel.ERROR,
|
|
63
|
+
'Error processing event ' + event.Correlation_Id__c + ': ' + e.getMessage());
|
|
64
|
+
System.debug(LoggingLevel.ERROR, 'Stack: ' + e.getStackTraceString());
|
|
65
|
+
|
|
66
|
+
// Consider: Create error log record for monitoring
|
|
67
|
+
// {{EventName}}ErrorLogger.logError(event, e);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Set resume checkpoint for durability
|
|
72
|
+
// If trigger fails after this point, processing resumes from this ReplayId
|
|
73
|
+
if (String.isNotBlank(lastReplayId)) {
|
|
74
|
+
EventBus.TriggerContext.currentContext().setResumeCheckpoint(lastReplayId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* ============================================================================
|
|
80
|
+
* PLATFORM EVENT TRIGGER BEST PRACTICES
|
|
81
|
+
* ============================================================================
|
|
82
|
+
*
|
|
83
|
+
* 1. ALWAYS set resume checkpoint
|
|
84
|
+
* - Call setResumeCheckpoint() with the last processed ReplayId
|
|
85
|
+
* - Ensures events aren't lost if trigger fails mid-batch
|
|
86
|
+
*
|
|
87
|
+
* 2. DON'T throw exceptions
|
|
88
|
+
* - Unhandled exceptions cause entire batch to retry
|
|
89
|
+
* - Catch errors per-event and log them
|
|
90
|
+
* - Continue processing remaining events
|
|
91
|
+
*
|
|
92
|
+
* 3. Keep processing lightweight
|
|
93
|
+
* - Avoid SOQL/DML in loops
|
|
94
|
+
* - Collect data, then do bulk DML outside loop
|
|
95
|
+
* - Consider queueing heavy work via Queueable
|
|
96
|
+
*
|
|
97
|
+
* 4. Handle duplicates
|
|
98
|
+
* - At-least-once delivery means duplicates possible
|
|
99
|
+
* - Use Correlation_Id__c to detect/dedupe
|
|
100
|
+
* - Design handlers to be idempotent
|
|
101
|
+
*
|
|
102
|
+
* 5. Monitor failures
|
|
103
|
+
* - Log errors to custom object for visibility
|
|
104
|
+
* - Set up alerts for processing failures
|
|
105
|
+
* - Review Event Delivery Failures in Setup
|
|
106
|
+
*
|
|
107
|
+
* ============================================================================
|
|
108
|
+
*/
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
Platform Event Definition Template
|
|
4
|
+
|
|
5
|
+
Use Case: Asynchronous, event-driven communication
|
|
6
|
+
- Real-time notifications
|
|
7
|
+
- Decoupled system integrations
|
|
8
|
+
- High-volume data streaming
|
|
9
|
+
- Trigger external processes
|
|
10
|
+
|
|
11
|
+
Event Types:
|
|
12
|
+
- StandardVolume: ~2,000 events/hour, standard delivery
|
|
13
|
+
- HighVolume: Millions/day, at-least-once delivery, 24-hour retention
|
|
14
|
+
|
|
15
|
+
Publish Behaviors:
|
|
16
|
+
- PublishAfterCommit: Event published after transaction commits (default)
|
|
17
|
+
- PublishImmediately: Event published immediately (use for rollback scenarios)
|
|
18
|
+
|
|
19
|
+
Setup Steps:
|
|
20
|
+
1. Replace all {{placeholder}} values
|
|
21
|
+
2. Add fields as needed
|
|
22
|
+
3. Deploy to org
|
|
23
|
+
4. Create publisher (Apex, Flow, Process Builder)
|
|
24
|
+
5. Create subscriber (Trigger, Flow, External via CometD)
|
|
25
|
+
|
|
26
|
+
File Location: force-app/main/default/objects/{{EventName}}__e/{{EventName}}__e.object-meta.xml
|
|
27
|
+
-->
|
|
28
|
+
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
29
|
+
<!-- Deployment status -->
|
|
30
|
+
<deploymentStatus>Deployed</deploymentStatus>
|
|
31
|
+
|
|
32
|
+
<!--
|
|
33
|
+
Event Type:
|
|
34
|
+
- StandardVolume: Up to 2,000 events per hour (included in licenses)
|
|
35
|
+
- HighVolume: Up to millions per day (may require additional entitlement)
|
|
36
|
+
|
|
37
|
+
Use HighVolume for:
|
|
38
|
+
- Large-scale integrations
|
|
39
|
+
- IoT data streaming
|
|
40
|
+
- High-throughput scenarios
|
|
41
|
+
-->
|
|
42
|
+
<eventType>HighVolume</eventType>
|
|
43
|
+
|
|
44
|
+
<!-- Display labels -->
|
|
45
|
+
<label>{{EventLabel}}</label>
|
|
46
|
+
<pluralLabel>{{EventPluralLabel}}</pluralLabel>
|
|
47
|
+
|
|
48
|
+
<!--
|
|
49
|
+
Publish Behavior:
|
|
50
|
+
- PublishAfterCommit: Publish when transaction commits (RECOMMENDED)
|
|
51
|
+
Ensures event only fires if data save succeeds
|
|
52
|
+
- PublishImmediately: Publish right away
|
|
53
|
+
Use when you need event even if transaction rolls back
|
|
54
|
+
-->
|
|
55
|
+
<publishBehavior>PublishAfterCommit</publishBehavior>
|
|
56
|
+
|
|
57
|
+
<!-- Event Fields -->
|
|
58
|
+
|
|
59
|
+
<!-- Record ID field - link to triggering record -->
|
|
60
|
+
<fields>
|
|
61
|
+
<fullName>Record_Id__c</fullName>
|
|
62
|
+
<label>Record ID</label>
|
|
63
|
+
<description>ID of the Salesforce record that triggered this event</description>
|
|
64
|
+
<type>Text</type>
|
|
65
|
+
<length>18</length>
|
|
66
|
+
<externalId>false</externalId>
|
|
67
|
+
</fields>
|
|
68
|
+
|
|
69
|
+
<!-- Operation type field -->
|
|
70
|
+
<fields>
|
|
71
|
+
<fullName>Operation__c</fullName>
|
|
72
|
+
<label>Operation</label>
|
|
73
|
+
<description>The operation that occurred: CREATE, UPDATE, DELETE</description>
|
|
74
|
+
<type>Text</type>
|
|
75
|
+
<length>20</length>
|
|
76
|
+
<externalId>false</externalId>
|
|
77
|
+
</fields>
|
|
78
|
+
|
|
79
|
+
<!-- Payload field - JSON data -->
|
|
80
|
+
<fields>
|
|
81
|
+
<fullName>Payload__c</fullName>
|
|
82
|
+
<label>Payload</label>
|
|
83
|
+
<description>JSON payload containing event data</description>
|
|
84
|
+
<type>LongTextArea</type>
|
|
85
|
+
<length>131072</length>
|
|
86
|
+
<visibleLines>5</visibleLines>
|
|
87
|
+
</fields>
|
|
88
|
+
|
|
89
|
+
<!-- Correlation ID for tracking -->
|
|
90
|
+
<fields>
|
|
91
|
+
<fullName>Correlation_Id__c</fullName>
|
|
92
|
+
<label>Correlation ID</label>
|
|
93
|
+
<description>Unique ID for tracking related events across systems</description>
|
|
94
|
+
<type>Text</type>
|
|
95
|
+
<length>50</length>
|
|
96
|
+
<externalId>true</externalId>
|
|
97
|
+
</fields>
|
|
98
|
+
|
|
99
|
+
<!-- Timestamp field -->
|
|
100
|
+
<fields>
|
|
101
|
+
<fullName>Event_Timestamp__c</fullName>
|
|
102
|
+
<label>Event Timestamp</label>
|
|
103
|
+
<description>When the event occurred</description>
|
|
104
|
+
<type>DateTime</type>
|
|
105
|
+
</fields>
|
|
106
|
+
|
|
107
|
+
<!--
|
|
108
|
+
Add more fields as needed for your use case.
|
|
109
|
+
|
|
110
|
+
Field Types Supported:
|
|
111
|
+
- Text (up to 255 chars)
|
|
112
|
+
- LongTextArea (up to 131,072 chars)
|
|
113
|
+
- Number
|
|
114
|
+
- Checkbox
|
|
115
|
+
- DateTime
|
|
116
|
+
- Date
|
|
117
|
+
|
|
118
|
+
NOT Supported:
|
|
119
|
+
- Lookup/Master-Detail (no relationships)
|
|
120
|
+
- Formula
|
|
121
|
+
- Roll-up Summary
|
|
122
|
+
- Picklist (use Text instead)
|
|
123
|
+
-->
|
|
124
|
+
</CustomObject>
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description SOAP Web Service Callout Service
|
|
3
|
+
*
|
|
4
|
+
* Use Case: Integrations with SOAP/XML-based web services
|
|
5
|
+
* - Legacy enterprise systems
|
|
6
|
+
* - Government APIs
|
|
7
|
+
* - Financial services (often SOAP-based)
|
|
8
|
+
*
|
|
9
|
+
* Prerequisites:
|
|
10
|
+
* 1. Generate Apex from WSDL (Setup → Apex Classes → Generate from WSDL)
|
|
11
|
+
* 2. Configure Named Credential or Remote Site Setting for endpoint
|
|
12
|
+
*
|
|
13
|
+
* This template wraps WSDL-generated stub classes with:
|
|
14
|
+
* - Error handling
|
|
15
|
+
* - Timeout configuration
|
|
16
|
+
* - Logging
|
|
17
|
+
*
|
|
18
|
+
* @author {{Author}}
|
|
19
|
+
* @date {{Date}}
|
|
20
|
+
*/
|
|
21
|
+
public with sharing class {{ServiceName}}SoapService {
|
|
22
|
+
|
|
23
|
+
// Named Credential for SOAP endpoint (recommended over Remote Site Setting)
|
|
24
|
+
private static final String NAMED_CREDENTIAL = 'callout:{{NamedCredentialName}}';
|
|
25
|
+
|
|
26
|
+
// Timeout in milliseconds (max 120000)
|
|
27
|
+
private static final Integer TIMEOUT_MS = 120000;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @description Call SOAP operation with request object
|
|
31
|
+
*
|
|
32
|
+
* Replace {{WsdlStubClass}} with your WSDL-generated class name
|
|
33
|
+
* Replace {{PortType}} with the port/binding type from WSDL
|
|
34
|
+
* Replace {{OperationName}} with the SOAP operation to call
|
|
35
|
+
*
|
|
36
|
+
* @param request Request object (WSDL-generated type)
|
|
37
|
+
* @return Response object (WSDL-generated type)
|
|
38
|
+
* @throws SoapCalloutException on errors
|
|
39
|
+
*/
|
|
40
|
+
public static {{ResponseType}} callService({{RequestType}} request) {
|
|
41
|
+
try {
|
|
42
|
+
// Instantiate the WSDL-generated stub
|
|
43
|
+
{{WsdlStubClass}}.{{PortType}} stub = new {{WsdlStubClass}}.{{PortType}}();
|
|
44
|
+
|
|
45
|
+
// Configure endpoint
|
|
46
|
+
// Option 1: Use Named Credential (recommended)
|
|
47
|
+
stub.endpoint_x = NAMED_CREDENTIAL;
|
|
48
|
+
|
|
49
|
+
// Option 2: Direct endpoint (requires Remote Site Setting)
|
|
50
|
+
// stub.endpoint_x = '{{SoapEndpoint}}';
|
|
51
|
+
|
|
52
|
+
// Set timeout
|
|
53
|
+
stub.timeout_x = TIMEOUT_MS;
|
|
54
|
+
|
|
55
|
+
// Set custom SOAP headers if needed
|
|
56
|
+
// stub.inputHttpHeaders_x = new Map<String, String>{
|
|
57
|
+
// 'X-Custom-Header' => 'value'
|
|
58
|
+
// };
|
|
59
|
+
|
|
60
|
+
// Make the SOAP call
|
|
61
|
+
{{ResponseType}} response = stub.{{OperationName}}(request);
|
|
62
|
+
|
|
63
|
+
// Log success
|
|
64
|
+
System.debug(LoggingLevel.DEBUG, 'SOAP call successful: {{OperationName}}');
|
|
65
|
+
|
|
66
|
+
return response;
|
|
67
|
+
|
|
68
|
+
} catch (CalloutException e) {
|
|
69
|
+
// Network/timeout error
|
|
70
|
+
System.debug(LoggingLevel.ERROR, 'SOAP CalloutException: ' + e.getMessage());
|
|
71
|
+
throw new SoapCalloutException('Connection error: ' + e.getMessage(), e);
|
|
72
|
+
|
|
73
|
+
} catch (Exception e) {
|
|
74
|
+
// SOAP fault or other error
|
|
75
|
+
System.debug(LoggingLevel.ERROR, 'SOAP Error: ' + e.getMessage());
|
|
76
|
+
System.debug(LoggingLevel.ERROR, 'Stack: ' + e.getStackTraceString());
|
|
77
|
+
throw new SoapCalloutException('SOAP service error: ' + e.getMessage(), e);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @description Async SOAP call via Queueable
|
|
83
|
+
* Use this when calling from DML context (triggers)
|
|
84
|
+
* @param request Request object
|
|
85
|
+
* @param callbackId Optional ID for tracking the async job
|
|
86
|
+
*/
|
|
87
|
+
public static void callServiceAsync({{RequestType}} request, Id callbackId) {
|
|
88
|
+
System.enqueueJob(new SoapCalloutQueueable(request, callbackId));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @description Queueable implementation for async SOAP calls
|
|
93
|
+
*/
|
|
94
|
+
public class SoapCalloutQueueable implements Queueable, Database.AllowsCallouts {
|
|
95
|
+
private {{RequestType}} request;
|
|
96
|
+
private Id callbackId;
|
|
97
|
+
|
|
98
|
+
public SoapCalloutQueueable({{RequestType}} request, Id callbackId) {
|
|
99
|
+
this.request = request;
|
|
100
|
+
this.callbackId = callbackId;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public void execute(QueueableContext context) {
|
|
104
|
+
try {
|
|
105
|
+
{{ResponseType}} response = callService(request);
|
|
106
|
+
|
|
107
|
+
// Process response and update Salesforce record if needed
|
|
108
|
+
if (callbackId != null) {
|
|
109
|
+
processCallback(response, callbackId);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
} catch (Exception e) {
|
|
113
|
+
System.debug(LoggingLevel.ERROR, 'Async SOAP call failed: ' + e.getMessage());
|
|
114
|
+
// Consider: create error log, send notification
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @description Process async callback result
|
|
121
|
+
* @param response SOAP response
|
|
122
|
+
* @param callbackId Record ID to update with result
|
|
123
|
+
*/
|
|
124
|
+
private static void processCallback({{ResponseType}} response, Id callbackId) {
|
|
125
|
+
// TODO: Implement callback processing
|
|
126
|
+
// Example: Update a record with the response data
|
|
127
|
+
/*
|
|
128
|
+
SObject record = callbackId.getSObjectType().newSObject(callbackId);
|
|
129
|
+
record.put('Integration_Status__c', 'Complete');
|
|
130
|
+
record.put('Integration_Response__c', JSON.serialize(response));
|
|
131
|
+
update record;
|
|
132
|
+
*/
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @description Custom exception for SOAP callout errors
|
|
137
|
+
*/
|
|
138
|
+
public class SoapCalloutException extends Exception {}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* ============================================================================
|
|
143
|
+
* WSDL2APEX GENERATION GUIDE
|
|
144
|
+
* ============================================================================
|
|
145
|
+
*
|
|
146
|
+
* Step 1: Obtain WSDL
|
|
147
|
+
* -------------------
|
|
148
|
+
* Get the WSDL file from the external system. It should be an XML file
|
|
149
|
+
* defining the service, operations, and data types.
|
|
150
|
+
*
|
|
151
|
+
* Step 2: Generate Apex Classes
|
|
152
|
+
* -----------------------------
|
|
153
|
+
* 1. Go to Setup → Apex Classes
|
|
154
|
+
* 2. Click "Generate from WSDL"
|
|
155
|
+
* 3. Upload the WSDL file
|
|
156
|
+
* 4. Choose a namespace (or accept default)
|
|
157
|
+
* 5. Click "Generate Apex code"
|
|
158
|
+
*
|
|
159
|
+
* Step 3: Review Generated Classes
|
|
160
|
+
* --------------------------------
|
|
161
|
+
* Salesforce generates:
|
|
162
|
+
* - Stub class ({{WsdlStubClass}}) with methods for each operation
|
|
163
|
+
* - Request/Response wrapper classes
|
|
164
|
+
* - Data type classes matching WSDL schema
|
|
165
|
+
*
|
|
166
|
+
* Step 4: Configure Access
|
|
167
|
+
* ------------------------
|
|
168
|
+
* Option A: Named Credential (Recommended)
|
|
169
|
+
* - Create Named Credential with SOAP endpoint
|
|
170
|
+
* - Set stub.endpoint_x = 'callout:NamedCredentialName'
|
|
171
|
+
*
|
|
172
|
+
* Option B: Remote Site Setting
|
|
173
|
+
* - Create Remote Site Setting with SOAP endpoint domain
|
|
174
|
+
* - Set stub.endpoint_x to full URL
|
|
175
|
+
*
|
|
176
|
+
* Step 5: Test the Integration
|
|
177
|
+
* ----------------------------
|
|
178
|
+
* Execute anonymous Apex:
|
|
179
|
+
*
|
|
180
|
+
* {{RequestType}} req = new {{RequestType}}();
|
|
181
|
+
* req.field1 = 'value';
|
|
182
|
+
* {{ResponseType}} resp = {{ServiceName}}SoapService.callService(req);
|
|
183
|
+
* System.debug(resp);
|
|
184
|
+
*
|
|
185
|
+
* ============================================================================
|
|
186
|
+
*/
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# WSDL to Apex Generation Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Salesforce can automatically generate Apex classes from WSDL (Web Services Description Language) files, enabling integration with SOAP-based web services.
|
|
6
|
+
|
|
7
|
+
## Step-by-Step Process
|
|
8
|
+
|
|
9
|
+
### 1. Obtain the WSDL File
|
|
10
|
+
|
|
11
|
+
Get the WSDL from your external system. Common sources:
|
|
12
|
+
- API documentation portal
|
|
13
|
+
- Endpoint URL with `?wsdl` suffix (e.g., `https://api.example.com/service?wsdl`)
|
|
14
|
+
- Direct download from vendor
|
|
15
|
+
|
|
16
|
+
### 2. Review WSDL for Compatibility
|
|
17
|
+
|
|
18
|
+
Salesforce WSDL2Apex has limitations. Check for:
|
|
19
|
+
|
|
20
|
+
**Supported:**
|
|
21
|
+
- Document/literal and RPC/encoded styles
|
|
22
|
+
- Simple types (string, integer, boolean, date, etc.)
|
|
23
|
+
- Complex types (objects with properties)
|
|
24
|
+
- Arrays and lists
|
|
25
|
+
- Basic SOAP headers
|
|
26
|
+
|
|
27
|
+
**Not Supported / Problematic:**
|
|
28
|
+
- Very large WSDLs (may hit Apex class size limits)
|
|
29
|
+
- Certain complex inheritance patterns
|
|
30
|
+
- Some advanced XSD features
|
|
31
|
+
- WS-Security (requires manual implementation)
|
|
32
|
+
|
|
33
|
+
### 3. Generate Apex Classes
|
|
34
|
+
|
|
35
|
+
1. Navigate to **Setup → Apex Classes**
|
|
36
|
+
2. Click **Generate from WSDL**
|
|
37
|
+
3. Click **Choose File** and upload the WSDL
|
|
38
|
+
4. Review the parse results
|
|
39
|
+
5. Modify class names if needed (keep them short to avoid limits)
|
|
40
|
+
6. Click **Generate Apex code**
|
|
41
|
+
|
|
42
|
+
### 4. Generated Class Structure
|
|
43
|
+
|
|
44
|
+
For a WSDL defining `CustomerService` with operation `getCustomer`:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
AsyncCustomerService.cls - Async version of service
|
|
48
|
+
CustomerService.cls - Main stub class with methods
|
|
49
|
+
GetCustomerRequest.cls - Request wrapper
|
|
50
|
+
GetCustomerResponse.cls - Response wrapper
|
|
51
|
+
Customer.cls - Data type from schema
|
|
52
|
+
Address.cls - Nested data type
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 5. Configure Endpoint Access
|
|
56
|
+
|
|
57
|
+
**Option A: Named Credential (Recommended)**
|
|
58
|
+
|
|
59
|
+
1. Create Named Credential in Setup
|
|
60
|
+
2. Set endpoint to SOAP service URL
|
|
61
|
+
3. Configure authentication (Basic, Certificate, OAuth)
|
|
62
|
+
4. In Apex: `stub.endpoint_x = 'callout:MyNamedCredential';`
|
|
63
|
+
|
|
64
|
+
**Option B: Remote Site Setting**
|
|
65
|
+
|
|
66
|
+
1. Create Remote Site Setting with domain
|
|
67
|
+
2. In Apex: `stub.endpoint_x = 'https://api.example.com/service';`
|
|
68
|
+
|
|
69
|
+
### 6. Basic Usage Example
|
|
70
|
+
|
|
71
|
+
```apex
|
|
72
|
+
public class CustomerServiceCaller {
|
|
73
|
+
|
|
74
|
+
public static Customer getCustomer(String customerId) {
|
|
75
|
+
// Instantiate the generated stub
|
|
76
|
+
CustomerService.CustomerServicePort stub = new CustomerService.CustomerServicePort();
|
|
77
|
+
|
|
78
|
+
// Configure endpoint (Named Credential)
|
|
79
|
+
stub.endpoint_x = 'callout:CustomerServiceNC';
|
|
80
|
+
|
|
81
|
+
// Set timeout (max 120 seconds)
|
|
82
|
+
stub.timeout_x = 120000;
|
|
83
|
+
|
|
84
|
+
// Create request
|
|
85
|
+
GetCustomerRequest request = new GetCustomerRequest();
|
|
86
|
+
request.customerId = customerId;
|
|
87
|
+
|
|
88
|
+
// Make the call
|
|
89
|
+
GetCustomerResponse response = stub.getCustomer(request);
|
|
90
|
+
|
|
91
|
+
return response.customer;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 7. Error Handling
|
|
97
|
+
|
|
98
|
+
```apex
|
|
99
|
+
try {
|
|
100
|
+
GetCustomerResponse response = stub.getCustomer(request);
|
|
101
|
+
// Process response
|
|
102
|
+
|
|
103
|
+
} catch (CalloutException e) {
|
|
104
|
+
// Network error, timeout, SSL issues
|
|
105
|
+
System.debug('Callout failed: ' + e.getMessage());
|
|
106
|
+
|
|
107
|
+
} catch (Exception e) {
|
|
108
|
+
// SOAP fault (error from service)
|
|
109
|
+
// The exception message contains SOAP fault details
|
|
110
|
+
System.debug('SOAP error: ' + e.getMessage());
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 8. Common Issues and Solutions
|
|
115
|
+
|
|
116
|
+
| Issue | Cause | Solution |
|
|
117
|
+
|-------|-------|----------|
|
|
118
|
+
| `Web service callout failed` | Network/SSL issue | Check Remote Site Setting, verify endpoint |
|
|
119
|
+
| `Read timed out` | Service slow to respond | Increase `timeout_x` (max 120000ms) |
|
|
120
|
+
| `Apex class size limit` | WSDL too large | Split WSDL, use fewer operations |
|
|
121
|
+
| `Unable to parse callout response` | Response doesn't match WSDL | Check service version, update WSDL |
|
|
122
|
+
| `Methods defined as Webservice` | Conflict with reserved keywords | Rename operations in WSDL or generated class |
|
|
123
|
+
|
|
124
|
+
### 9. Testing SOAP Callouts
|
|
125
|
+
|
|
126
|
+
Use `Test.setMock()` with `WebServiceMock`:
|
|
127
|
+
|
|
128
|
+
```apex
|
|
129
|
+
@isTest
|
|
130
|
+
public class CustomerServiceTest {
|
|
131
|
+
|
|
132
|
+
@isTest
|
|
133
|
+
static void testGetCustomer() {
|
|
134
|
+
// Set mock
|
|
135
|
+
Test.setMock(WebServiceMock.class, new CustomerServiceMock());
|
|
136
|
+
|
|
137
|
+
// Call service
|
|
138
|
+
Test.startTest();
|
|
139
|
+
Customer result = CustomerServiceCaller.getCustomer('CUST001');
|
|
140
|
+
Test.stopTest();
|
|
141
|
+
|
|
142
|
+
// Assert
|
|
143
|
+
System.assertEquals('Test Customer', result.name);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Mock implementation
|
|
147
|
+
public class CustomerServiceMock implements WebServiceMock {
|
|
148
|
+
public void doInvoke(
|
|
149
|
+
Object stub,
|
|
150
|
+
Object request,
|
|
151
|
+
Map<String, Object> response,
|
|
152
|
+
String endpoint,
|
|
153
|
+
String soapAction,
|
|
154
|
+
String requestName,
|
|
155
|
+
String responseNS,
|
|
156
|
+
String responseName,
|
|
157
|
+
String responseType
|
|
158
|
+
) {
|
|
159
|
+
// Create mock response
|
|
160
|
+
GetCustomerResponse mockResponse = new GetCustomerResponse();
|
|
161
|
+
mockResponse.customer = new Customer();
|
|
162
|
+
mockResponse.customer.name = 'Test Customer';
|
|
163
|
+
|
|
164
|
+
response.put('response_x', mockResponse);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 10. Async SOAP Calls
|
|
171
|
+
|
|
172
|
+
For calls from triggers or after DML:
|
|
173
|
+
|
|
174
|
+
```apex
|
|
175
|
+
public class CustomerSyncQueueable implements Queueable, Database.AllowsCallouts {
|
|
176
|
+
|
|
177
|
+
private String customerId;
|
|
178
|
+
|
|
179
|
+
public CustomerSyncQueueable(String customerId) {
|
|
180
|
+
this.customerId = customerId;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
public void execute(QueueableContext context) {
|
|
184
|
+
try {
|
|
185
|
+
Customer customer = CustomerServiceCaller.getCustomer(customerId);
|
|
186
|
+
// Process result
|
|
187
|
+
} catch (Exception e) {
|
|
188
|
+
// Log error
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Usage in trigger:
|
|
194
|
+
System.enqueueJob(new CustomerSyncQueueable(accountId));
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Best Practices
|
|
198
|
+
|
|
199
|
+
1. **Always use Named Credentials** for authentication instead of hardcoding credentials
|
|
200
|
+
2. **Set appropriate timeouts** - default may be too short
|
|
201
|
+
3. **Implement error handling** - SOAP services can fail in many ways
|
|
202
|
+
4. **Log requests and responses** for debugging
|
|
203
|
+
5. **Use async patterns** when calling from DML contexts
|
|
204
|
+
6. **Test with mocks** - don't call real services in tests
|
|
205
|
+
7. **Monitor governor limits** - especially for large responses
|
|
206
|
+
|
|
207
|
+
## Limitations
|
|
208
|
+
|
|
209
|
+
- Maximum 100 callouts per transaction
|
|
210
|
+
- Maximum 120 second timeout per callout
|
|
211
|
+
- Response body limit: 6MB
|
|
212
|
+
- Apex code size limits may prevent large WSDL imports
|
|
213
|
+
- Some WSDL features not supported (WS-Security, MTOM, etc.)
|