@salesforce/afv-skills 1.7.5 → 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/building-ui-bundle-frontend/SKILL.md +2 -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/deploying-ui-bundle/SKILL.md +2 -0
- package/skills/developing-agentforce/SKILL.md +1 -1
- 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/SKILL.md +4 -2
- package/skills/generating-apex-test/CREDITS.md +2 -27
- package/skills/generating-apex-test/SKILL.md +3 -1
- package/skills/generating-custom-application/SKILL.md +2 -0
- package/skills/generating-custom-field/SKILL.md +3 -1
- package/skills/generating-custom-lightning-type/SKILL.md +2 -0
- package/skills/generating-custom-object/SKILL.md +3 -1
- package/skills/generating-custom-tab/SKILL.md +3 -1
- package/skills/generating-flexipage/SKILL.md +2 -0
- package/skills/generating-flow/SKILL.md +2 -0
- package/skills/generating-lightning-app/SKILL.md +1 -1
- package/skills/generating-list-view/SKILL.md +2 -0
- 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-ui-bundle-features/SKILL.md +2 -0
- package/skills/generating-ui-bundle-metadata/SKILL.md +2 -0
- package/skills/generating-ui-bundle-site/SKILL.md +2 -0
- package/skills/generating-validation-rule/SKILL.md +2 -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/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +1 -1
- package/skills/implementing-ui-bundle-file-upload/SKILL.md +2 -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/observing-agentforce/SKILL.md +1 -1
- 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/switching-org/SKILL.md +1 -1
- package/skills/testing-agentforce/SKILL.md +1 -1
- package/skills/uplifting-components-to-slds2/SKILL.md +3 -1
- package/skills/using-ui-bundle-salesforce-data/SKILL.md +2 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<!-- Parent: handling-sf-data/SKILL.md -->
|
|
2
|
+
# Anonymous Apex Guide
|
|
3
|
+
|
|
4
|
+
Using anonymous Apex for complex data operations.
|
|
5
|
+
|
|
6
|
+
## When to Use Anonymous Apex
|
|
7
|
+
|
|
8
|
+
- Complex data setup requiring Apex logic
|
|
9
|
+
- Testing triggers with specific data patterns
|
|
10
|
+
- One-time data migrations
|
|
11
|
+
- Debugging and troubleshooting
|
|
12
|
+
|
|
13
|
+
## sf CLI Execution
|
|
14
|
+
|
|
15
|
+
### From File
|
|
16
|
+
```bash
|
|
17
|
+
sf apex run --file setup-data.apex --target-org myorg
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Interactive
|
|
21
|
+
```bash
|
|
22
|
+
sf apex run --target-org myorg
|
|
23
|
+
# Then type Apex code and press Ctrl+D
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Common Patterns
|
|
27
|
+
|
|
28
|
+
### Bulk Data Creation
|
|
29
|
+
```apex
|
|
30
|
+
List<Account> accounts = new List<Account>();
|
|
31
|
+
for (Integer i = 0; i < 500; i++) {
|
|
32
|
+
accounts.add(new Account(
|
|
33
|
+
Name = 'Test Account ' + i,
|
|
34
|
+
Industry = 'Technology'
|
|
35
|
+
));
|
|
36
|
+
}
|
|
37
|
+
insert accounts;
|
|
38
|
+
System.debug('Created ' + accounts.size() + ' accounts');
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Data Transformation
|
|
42
|
+
```apex
|
|
43
|
+
List<Account> accounts = [
|
|
44
|
+
SELECT Id, Name, Industry
|
|
45
|
+
FROM Account
|
|
46
|
+
WHERE Name LIKE 'Old%'
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
for (Account acc : accounts) {
|
|
50
|
+
acc.Name = acc.Name.replace('Old', 'New');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
update accounts;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Testing Trigger Logic
|
|
57
|
+
```apex
|
|
58
|
+
// Setup test data
|
|
59
|
+
Account acc = new Account(Name = 'Trigger Test');
|
|
60
|
+
insert acc;
|
|
61
|
+
|
|
62
|
+
// Force trigger to fire
|
|
63
|
+
acc.Industry = 'Technology';
|
|
64
|
+
update acc;
|
|
65
|
+
|
|
66
|
+
// Verify results
|
|
67
|
+
acc = [SELECT Id, Field__c FROM Account WHERE Id = :acc.Id];
|
|
68
|
+
System.debug('Result: ' + acc.Field__c);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Error Handling
|
|
72
|
+
|
|
73
|
+
```apex
|
|
74
|
+
try {
|
|
75
|
+
insert accounts;
|
|
76
|
+
} catch (DmlException e) {
|
|
77
|
+
System.debug('Error: ' + e.getMessage());
|
|
78
|
+
for (Integer i = 0; i < e.getNumDml(); i++) {
|
|
79
|
+
System.debug('Row ' + e.getDmlIndex(i) + ': ' + e.getDmlMessage(i));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Limits in Anonymous Apex
|
|
85
|
+
|
|
86
|
+
| Limit | Value |
|
|
87
|
+
|-------|-------|
|
|
88
|
+
| SOQL Queries | 100 |
|
|
89
|
+
| DML Rows | 10,000 |
|
|
90
|
+
| CPU Time | 10,000 ms |
|
|
91
|
+
| Heap Size | 6 MB |
|
|
92
|
+
|
|
93
|
+
## Best Practices
|
|
94
|
+
|
|
95
|
+
1. **Test in sandbox first** - Validate before production
|
|
96
|
+
2. **Add debug statements** - Track progress
|
|
97
|
+
3. **Handle errors gracefully** - Use try/catch
|
|
98
|
+
4. **Keep scripts idempotent** - Safe to re-run
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<!-- Parent: handling-sf-data/SKILL.md -->
|
|
2
|
+
# Bulk Operations Guide
|
|
3
|
+
|
|
4
|
+
When and how to use Salesforce Bulk API operations.
|
|
5
|
+
|
|
6
|
+
## Decision Matrix
|
|
7
|
+
|
|
8
|
+
| Record Count | Recommended API | Command |
|
|
9
|
+
|--------------|-----------------|---------|
|
|
10
|
+
| 1-10 | Single Record | `sf data create record` |
|
|
11
|
+
| 11-2000 | Standard API | `sf data query` + Apex |
|
|
12
|
+
| 2000-10M | Bulk API 2.0 | `sf data import bulk` |
|
|
13
|
+
| 10M+ | Data Loader | External tool |
|
|
14
|
+
|
|
15
|
+
## Bulk API 2.0 Commands
|
|
16
|
+
|
|
17
|
+
### Import (Insert)
|
|
18
|
+
```bash
|
|
19
|
+
sf data import bulk \
|
|
20
|
+
--file accounts.csv \
|
|
21
|
+
--sobject Account \
|
|
22
|
+
--target-org myorg \
|
|
23
|
+
--wait 30
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Update
|
|
27
|
+
```bash
|
|
28
|
+
sf data update bulk \
|
|
29
|
+
--file updates.csv \
|
|
30
|
+
--sobject Account \
|
|
31
|
+
--target-org myorg \
|
|
32
|
+
--wait 30
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Upsert (Insert or Update)
|
|
36
|
+
```bash
|
|
37
|
+
sf data upsert bulk \
|
|
38
|
+
--file upsert.csv \
|
|
39
|
+
--sobject Account \
|
|
40
|
+
--external-id External_Id__c \
|
|
41
|
+
--target-org myorg \
|
|
42
|
+
--wait 30
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Delete
|
|
46
|
+
```bash
|
|
47
|
+
sf data delete bulk \
|
|
48
|
+
--file delete.csv \
|
|
49
|
+
--sobject Account \
|
|
50
|
+
--target-org myorg \
|
|
51
|
+
--wait 30
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Export
|
|
55
|
+
```bash
|
|
56
|
+
sf data export bulk \
|
|
57
|
+
--query "SELECT Id, Name FROM Account" \
|
|
58
|
+
--output-file accounts.csv \
|
|
59
|
+
--target-org myorg \
|
|
60
|
+
--wait 30
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## CSV Format Requirements
|
|
64
|
+
|
|
65
|
+
- First row: Field API names
|
|
66
|
+
- UTF-8 encoding
|
|
67
|
+
- Comma delimiter (default)
|
|
68
|
+
- Max 100MB per file
|
|
69
|
+
|
|
70
|
+
## Bulk API Limits
|
|
71
|
+
|
|
72
|
+
| Limit | Value |
|
|
73
|
+
|-------|-------|
|
|
74
|
+
| Batches per 24 hours | 10,000 |
|
|
75
|
+
| Records per 24 hours | 10,000,000 |
|
|
76
|
+
| Max file size | 100 MB |
|
|
77
|
+
| Max concurrent jobs | 100 |
|
|
78
|
+
|
|
79
|
+
## Error Handling
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Check job status
|
|
83
|
+
sf data resume --job-id [job-id] --target-org myorg
|
|
84
|
+
|
|
85
|
+
# Get results
|
|
86
|
+
sf data bulk results --job-id [job-id] --target-org myorg
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Best Practices
|
|
90
|
+
|
|
91
|
+
1. **Chunk large files** - Split files >100MB
|
|
92
|
+
2. **Use --wait** - Monitor completion
|
|
93
|
+
3. **Handle partial failures** - Check result files
|
|
94
|
+
4. **Test in sandbox** - Validate before production
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
<!-- Parent: handling-sf-data/SKILL.md -->
|
|
2
|
+
# Bulk Testing Example
|
|
3
|
+
|
|
4
|
+
Testing Apex triggers and flows with bulk data operations.
|
|
5
|
+
|
|
6
|
+
## Scenario
|
|
7
|
+
|
|
8
|
+
Test an Account trigger that:
|
|
9
|
+
- Fires on insert with 200+ records
|
|
10
|
+
- Updates a custom field based on Industry
|
|
11
|
+
- Creates a related Task for high-value accounts
|
|
12
|
+
|
|
13
|
+
## Why 201 Records?
|
|
14
|
+
|
|
15
|
+
Salesforce processes triggers in batches of 200. Testing with 201+ records ensures:
|
|
16
|
+
- Trigger handles batch boundaries
|
|
17
|
+
- No governor limit violations in loops
|
|
18
|
+
- SOQL/DML operations are bulkified
|
|
19
|
+
|
|
20
|
+
## Method 1: Anonymous Apex Factory
|
|
21
|
+
|
|
22
|
+
### Create Test Data
|
|
23
|
+
```apex
|
|
24
|
+
// Create 251 Accounts to test trigger bulkification
|
|
25
|
+
List<Account> accounts = new List<Account>();
|
|
26
|
+
|
|
27
|
+
List<String> industries = new List<String>{
|
|
28
|
+
'Technology', 'Healthcare', 'Finance', 'Manufacturing', 'Retail'
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
for (Integer i = 0; i < 251; i++) {
|
|
32
|
+
accounts.add(new Account(
|
|
33
|
+
Name = 'BulkTest Account ' + i,
|
|
34
|
+
Industry = industries[Math.mod(i, industries.size())],
|
|
35
|
+
AnnualRevenue = Math.round(Math.random() * 10000000)
|
|
36
|
+
));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Single DML - triggers fire in batches of 200
|
|
40
|
+
insert accounts;
|
|
41
|
+
|
|
42
|
+
System.debug('Created ' + accounts.size() + ' accounts');
|
|
43
|
+
System.debug('SOQL Queries Used: ' + Limits.getQueries() + '/' + Limits.getLimitQueries());
|
|
44
|
+
System.debug('DML Statements: ' + Limits.getDmlStatements() + '/' + Limits.getLimitDmlStatements());
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Save as `bulk-test-accounts.apex` and run:
|
|
48
|
+
```bash
|
|
49
|
+
sf apex run --file bulk-test-accounts.apex --target-org dev
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Method 2: CSV Bulk Import
|
|
53
|
+
|
|
54
|
+
### Create CSV File
|
|
55
|
+
```csv
|
|
56
|
+
Name,Industry,AnnualRevenue
|
|
57
|
+
BulkTest Account 1,Technology,1000000
|
|
58
|
+
BulkTest Account 2,Healthcare,2000000
|
|
59
|
+
BulkTest Account 3,Finance,5000000
|
|
60
|
+
... (251 rows)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Import via sf CLI
|
|
64
|
+
```bash
|
|
65
|
+
sf data import bulk \
|
|
66
|
+
--file accounts-bulk.csv \
|
|
67
|
+
--sobject Account \
|
|
68
|
+
--target-org dev \
|
|
69
|
+
--wait 30
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Method 3: JSON Tree Import
|
|
73
|
+
|
|
74
|
+
For hierarchical test data with relationships:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"records": [
|
|
79
|
+
{
|
|
80
|
+
"attributes": {"type": "Account", "referenceId": "AccountRef1"},
|
|
81
|
+
"Name": "BulkTest Parent 1",
|
|
82
|
+
"Industry": "Technology",
|
|
83
|
+
"Contacts": {
|
|
84
|
+
"records": [
|
|
85
|
+
{
|
|
86
|
+
"attributes": {"type": "Contact"},
|
|
87
|
+
"FirstName": "Test",
|
|
88
|
+
"LastName": "Contact 1"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
sf data import tree \
|
|
99
|
+
--files bulk-hierarchy.json \
|
|
100
|
+
--target-org dev
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Verify Trigger Executed Correctly
|
|
104
|
+
|
|
105
|
+
### Check Trigger Results
|
|
106
|
+
```bash
|
|
107
|
+
sf data query \
|
|
108
|
+
--query "SELECT Id, Name, Industry, Custom_Field__c FROM Account WHERE Name LIKE 'BulkTest%' LIMIT 10" \
|
|
109
|
+
--target-org dev \
|
|
110
|
+
--json
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Check Related Tasks Created
|
|
114
|
+
```bash
|
|
115
|
+
sf data query \
|
|
116
|
+
--query "SELECT Id, Subject, WhatId, What.Name FROM Task WHERE What.Name LIKE 'BulkTest%'" \
|
|
117
|
+
--target-org dev
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Count Records
|
|
121
|
+
```bash
|
|
122
|
+
sf data query \
|
|
123
|
+
--query "SELECT COUNT(Id) total FROM Account WHERE Name LIKE 'BulkTest%'" \
|
|
124
|
+
--target-org dev
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Test Bulk Update
|
|
128
|
+
|
|
129
|
+
```apex
|
|
130
|
+
// Update all test records - triggers fire again
|
|
131
|
+
List<Account> accounts = [
|
|
132
|
+
SELECT Id, Name, Industry
|
|
133
|
+
FROM Account
|
|
134
|
+
WHERE Name LIKE 'BulkTest%'
|
|
135
|
+
];
|
|
136
|
+
|
|
137
|
+
for (Account acc : accounts) {
|
|
138
|
+
acc.Description = 'Bulk updated on ' + DateTime.now();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
update accounts;
|
|
142
|
+
|
|
143
|
+
System.debug('Updated ' + accounts.size() + ' accounts');
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Test Bulk Delete
|
|
147
|
+
|
|
148
|
+
```apex
|
|
149
|
+
// Delete in reverse order (children first)
|
|
150
|
+
List<Task> tasks = [SELECT Id FROM Task WHERE What.Name LIKE 'BulkTest%'];
|
|
151
|
+
delete tasks;
|
|
152
|
+
|
|
153
|
+
List<Contact> contacts = [SELECT Id FROM Contact WHERE Account.Name LIKE 'BulkTest%'];
|
|
154
|
+
delete contacts;
|
|
155
|
+
|
|
156
|
+
List<Account> accounts = [SELECT Id FROM Account WHERE Name LIKE 'BulkTest%'];
|
|
157
|
+
delete accounts;
|
|
158
|
+
|
|
159
|
+
System.debug('Cleanup complete');
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Governor Limits Monitoring
|
|
163
|
+
|
|
164
|
+
```apex
|
|
165
|
+
// Add to your test script to monitor limits
|
|
166
|
+
System.debug('=== GOVERNOR LIMITS ===');
|
|
167
|
+
System.debug('SOQL: ' + Limits.getQueries() + '/' + Limits.getLimitQueries());
|
|
168
|
+
System.debug('DML Statements: ' + Limits.getDmlStatements() + '/' + Limits.getLimitDmlStatements());
|
|
169
|
+
System.debug('DML Rows: ' + Limits.getDmlRows() + '/' + Limits.getLimitDmlRows());
|
|
170
|
+
System.debug('CPU Time: ' + Limits.getCpuTime() + 'ms/' + Limits.getLimitCpuTime() + 'ms');
|
|
171
|
+
System.debug('Heap: ' + Limits.getHeapSize() + '/' + Limits.getLimitHeapSize());
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Validation Score
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
Score: 128/130 ⭐⭐⭐⭐⭐ Excellent
|
|
178
|
+
├─ Query Efficiency: 25/25 (bulk queries)
|
|
179
|
+
├─ Bulk Safety: 25/25 (251 records, limits monitored)
|
|
180
|
+
├─ Data Integrity: 20/20 (valid field values)
|
|
181
|
+
├─ Security & FLS: 20/20 (no sensitive data)
|
|
182
|
+
├─ Test Patterns: 15/15 (201+ records, variations)
|
|
183
|
+
├─ Cleanup & Isolation: 13/15 (cleanup script provided)
|
|
184
|
+
└─ Documentation: 10/10 (fully documented)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Common Issues
|
|
188
|
+
|
|
189
|
+
| Issue | Cause | Solution |
|
|
190
|
+
|-------|-------|----------|
|
|
191
|
+
| `SOQL 101` | Query in loop | Use Map or Set for bulk queries |
|
|
192
|
+
| `DML 151` | DML in loop | Collect records, single DML |
|
|
193
|
+
| `CPU timeout` | Complex logic | Optimize loops, async processing |
|
|
194
|
+
| `Too many records` | >10,000 DML rows | Use Bulk API or Batch Apex |
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
<!-- Parent: handling-sf-data/SKILL.md -->
|
|
2
|
+
# Cleanup and Rollback Examples
|
|
3
|
+
|
|
4
|
+
Strategies for test data isolation and proper cleanup.
|
|
5
|
+
|
|
6
|
+
## Method 1: Savepoint/Rollback
|
|
7
|
+
|
|
8
|
+
Best for synchronous operations in a single transaction.
|
|
9
|
+
|
|
10
|
+
### Basic Pattern
|
|
11
|
+
```apex
|
|
12
|
+
// Create savepoint BEFORE any DML
|
|
13
|
+
Savepoint sp = Database.setSavepoint();
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
// Create test data
|
|
17
|
+
Account acc = new Account(Name = 'Test Account');
|
|
18
|
+
insert acc;
|
|
19
|
+
|
|
20
|
+
Contact con = new Contact(
|
|
21
|
+
FirstName = 'Test',
|
|
22
|
+
LastName = 'Contact',
|
|
23
|
+
AccountId = acc.Id
|
|
24
|
+
);
|
|
25
|
+
insert con;
|
|
26
|
+
|
|
27
|
+
// Perform operations
|
|
28
|
+
MyClass.processAccount(acc);
|
|
29
|
+
|
|
30
|
+
// Assert results
|
|
31
|
+
acc = [SELECT Custom_Field__c FROM Account WHERE Id = :acc.Id];
|
|
32
|
+
System.assert(acc.Custom_Field__c != null, 'Field should be populated');
|
|
33
|
+
|
|
34
|
+
} finally {
|
|
35
|
+
// ALWAYS rollback - even on success
|
|
36
|
+
Database.rollback(sp);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Data is now completely removed
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### In Unit Tests
|
|
43
|
+
```apex
|
|
44
|
+
@isTest
|
|
45
|
+
static void testWithRollback() {
|
|
46
|
+
Savepoint sp = Database.setSavepoint();
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
// Create 1000 test records
|
|
50
|
+
List<Account> accounts = new List<Account>();
|
|
51
|
+
for (Integer i = 0; i < 1000; i++) {
|
|
52
|
+
accounts.add(new Account(Name = 'Rollback Test ' + i));
|
|
53
|
+
}
|
|
54
|
+
insert accounts;
|
|
55
|
+
|
|
56
|
+
// Run business logic
|
|
57
|
+
Test.startTest();
|
|
58
|
+
BatchProcessor.process(accounts);
|
|
59
|
+
Test.stopTest();
|
|
60
|
+
|
|
61
|
+
// Assertions
|
|
62
|
+
Integer count = [SELECT COUNT() FROM Account WHERE Name LIKE 'Rollback Test%'];
|
|
63
|
+
System.assertEquals(1000, count);
|
|
64
|
+
|
|
65
|
+
} finally {
|
|
66
|
+
Database.rollback(sp);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Verify cleanup
|
|
70
|
+
Integer remaining = [SELECT COUNT() FROM Account WHERE Name LIKE 'Rollback Test%'];
|
|
71
|
+
System.assertEquals(0, remaining, 'All records should be rolled back');
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Limitations
|
|
76
|
+
- **Does NOT rollback async operations** (future, queueable, batch)
|
|
77
|
+
- Maximum 5 savepoints per transaction
|
|
78
|
+
- Cannot rollback across transaction boundaries
|
|
79
|
+
|
|
80
|
+
## Method 2: Cleanup by Name Pattern
|
|
81
|
+
|
|
82
|
+
Best when savepoint isn't possible (async tests, multi-transaction).
|
|
83
|
+
|
|
84
|
+
### Single Object Cleanup
|
|
85
|
+
```apex
|
|
86
|
+
// Delete all test accounts
|
|
87
|
+
List<Account> toDelete = [
|
|
88
|
+
SELECT Id FROM Account
|
|
89
|
+
WHERE Name LIKE 'Test%'
|
|
90
|
+
LIMIT 10000
|
|
91
|
+
];
|
|
92
|
+
delete toDelete;
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Multi-Object Cleanup (Correct Order)
|
|
96
|
+
```apex
|
|
97
|
+
// CRITICAL: Delete children before parents!
|
|
98
|
+
String testPattern = 'Test%';
|
|
99
|
+
|
|
100
|
+
// 1. Delete grandchildren first
|
|
101
|
+
delete [SELECT Id FROM Task WHERE What.Name LIKE :testPattern];
|
|
102
|
+
delete [SELECT Id FROM Event WHERE What.Name LIKE :testPattern];
|
|
103
|
+
|
|
104
|
+
// 2. Delete children
|
|
105
|
+
delete [SELECT Id FROM Opportunity WHERE Account.Name LIKE :testPattern];
|
|
106
|
+
delete [SELECT Id FROM Contact WHERE Account.Name LIKE :testPattern];
|
|
107
|
+
delete [SELECT Id FROM Case WHERE Account.Name LIKE :testPattern];
|
|
108
|
+
|
|
109
|
+
// 3. Delete parents last
|
|
110
|
+
delete [SELECT Id FROM Account WHERE Name LIKE :testPattern];
|
|
111
|
+
|
|
112
|
+
System.debug('Cleanup complete');
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### sf CLI Cleanup
|
|
116
|
+
```bash
|
|
117
|
+
# Query records to delete
|
|
118
|
+
sf data query \
|
|
119
|
+
--query "SELECT Id FROM Account WHERE Name LIKE 'Test%'" \
|
|
120
|
+
--target-org dev \
|
|
121
|
+
--result-format csv \
|
|
122
|
+
> delete-accounts.csv
|
|
123
|
+
|
|
124
|
+
# Bulk delete
|
|
125
|
+
sf data delete bulk \
|
|
126
|
+
--file delete-accounts.csv \
|
|
127
|
+
--sobject Account \
|
|
128
|
+
--target-org dev \
|
|
129
|
+
--wait 30
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Method 3: Cleanup by Time Window
|
|
133
|
+
|
|
134
|
+
Best for cleaning up after a specific test run.
|
|
135
|
+
|
|
136
|
+
### By CreatedDate
|
|
137
|
+
```apex
|
|
138
|
+
// Clean up records created in the last hour
|
|
139
|
+
DateTime startTime = DateTime.now().addHours(-1);
|
|
140
|
+
String testPattern = 'Test%';
|
|
141
|
+
|
|
142
|
+
delete [
|
|
143
|
+
SELECT Id FROM Account
|
|
144
|
+
WHERE CreatedDate >= :startTime
|
|
145
|
+
AND Name LIKE :testPattern
|
|
146
|
+
];
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### With Timestamp Tracking
|
|
150
|
+
```apex
|
|
151
|
+
// At start of test - capture timestamp
|
|
152
|
+
DateTime testStartTime = DateTime.now();
|
|
153
|
+
|
|
154
|
+
// ... run tests ...
|
|
155
|
+
|
|
156
|
+
// Cleanup - only records created during this test
|
|
157
|
+
delete [
|
|
158
|
+
SELECT Id FROM Account
|
|
159
|
+
WHERE CreatedDate >= :testStartTime
|
|
160
|
+
AND Name LIKE 'Test%'
|
|
161
|
+
];
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Method 4: ID-Based Cleanup
|
|
165
|
+
|
|
166
|
+
Most precise - track exactly what you created.
|
|
167
|
+
|
|
168
|
+
### Track IDs During Creation
|
|
169
|
+
```apex
|
|
170
|
+
// Collection to track all created record IDs
|
|
171
|
+
Set<Id> createdAccountIds = new Set<Id>();
|
|
172
|
+
Set<Id> createdContactIds = new Set<Id>();
|
|
173
|
+
Set<Id> createdOppIds = new Set<Id>();
|
|
174
|
+
|
|
175
|
+
// Create and track
|
|
176
|
+
List<Account> accounts = TestDataFactory_Account.create(100);
|
|
177
|
+
createdAccountIds.addAll(new Map<Id, Account>(accounts).keySet());
|
|
178
|
+
|
|
179
|
+
List<Contact> contacts = TestDataFactory_Contact.createForAccounts(createdAccountIds, 3);
|
|
180
|
+
createdContactIds.addAll(new Map<Id, Contact>(contacts).keySet());
|
|
181
|
+
|
|
182
|
+
// ... run tests ...
|
|
183
|
+
|
|
184
|
+
// Cleanup exactly what we created
|
|
185
|
+
delete [SELECT Id FROM Contact WHERE Id IN :createdContactIds];
|
|
186
|
+
delete [SELECT Id FROM Account WHERE Id IN :createdAccountIds];
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Wrapper Class for Tracking
|
|
190
|
+
```apex
|
|
191
|
+
public class TestDataTracker {
|
|
192
|
+
private Map<String, Set<Id>> trackedIds = new Map<String, Set<Id>>();
|
|
193
|
+
|
|
194
|
+
public void track(SObject record) {
|
|
195
|
+
String objType = record.getSObjectType().getDescribe().getName();
|
|
196
|
+
if (!trackedIds.containsKey(objType)) {
|
|
197
|
+
trackedIds.put(objType, new Set<Id>());
|
|
198
|
+
}
|
|
199
|
+
trackedIds.get(objType).add(record.Id);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
public void trackAll(List<SObject> records) {
|
|
203
|
+
for (SObject rec : records) {
|
|
204
|
+
track(rec);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
public void cleanup() {
|
|
209
|
+
// Delete in reverse dependency order
|
|
210
|
+
List<String> deleteOrder = new List<String>{
|
|
211
|
+
'Task', 'Event', 'Opportunity', 'Contact', 'Case', 'Account'
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
for (String objType : deleteOrder) {
|
|
215
|
+
if (trackedIds.containsKey(objType)) {
|
|
216
|
+
Set<Id> ids = trackedIds.get(objType);
|
|
217
|
+
String query = 'SELECT Id FROM ' + objType + ' WHERE Id IN :ids';
|
|
218
|
+
delete Database.query(query);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Usage
|
|
225
|
+
TestDataTracker tracker = new TestDataTracker();
|
|
226
|
+
|
|
227
|
+
List<Account> accounts = TestDataFactory_Account.create(100);
|
|
228
|
+
tracker.trackAll(accounts);
|
|
229
|
+
|
|
230
|
+
List<Contact> contacts = TestDataFactory_Contact.create(50);
|
|
231
|
+
tracker.trackAll(contacts);
|
|
232
|
+
|
|
233
|
+
// ... run tests ...
|
|
234
|
+
|
|
235
|
+
// Clean up everything tracked
|
|
236
|
+
tracker.cleanup();
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Method 5: @testSetup Isolation
|
|
240
|
+
|
|
241
|
+
Automatic rollback with @isTest annotation.
|
|
242
|
+
|
|
243
|
+
```apex
|
|
244
|
+
@isTest
|
|
245
|
+
public class MyTestClass {
|
|
246
|
+
|
|
247
|
+
@testSetup
|
|
248
|
+
static void setup() {
|
|
249
|
+
// This data is automatically rolled back after ALL tests complete
|
|
250
|
+
List<Account> accounts = TestDataFactory_Account.create(100);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
@isTest
|
|
254
|
+
static void testMethod1() {
|
|
255
|
+
// Access setup data
|
|
256
|
+
List<Account> accounts = [SELECT Id FROM Account];
|
|
257
|
+
// Modify data - changes rolled back after this test
|
|
258
|
+
delete accounts[0];
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
@isTest
|
|
262
|
+
static void testMethod2() {
|
|
263
|
+
// Fresh copy of @testSetup data - all 100 accounts available
|
|
264
|
+
List<Account> accounts = [SELECT Id FROM Account];
|
|
265
|
+
System.assertEquals(100, accounts.size());
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Cleanup via sf CLI
|
|
271
|
+
|
|
272
|
+
### Generate Cleanup CSV
|
|
273
|
+
```bash
|
|
274
|
+
# Export IDs of test records
|
|
275
|
+
sf data query \
|
|
276
|
+
--query "SELECT Id FROM Account WHERE Name LIKE 'Test%'" \
|
|
277
|
+
--target-org dev \
|
|
278
|
+
--result-format csv \
|
|
279
|
+
> cleanup-accounts.csv
|
|
280
|
+
|
|
281
|
+
sf data query \
|
|
282
|
+
--query "SELECT Id FROM Contact WHERE Account.Name LIKE 'Test%'" \
|
|
283
|
+
--target-org dev \
|
|
284
|
+
--result-format csv \
|
|
285
|
+
> cleanup-contacts.csv
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Execute Bulk Delete
|
|
289
|
+
```bash
|
|
290
|
+
# Delete children first
|
|
291
|
+
sf data delete bulk \
|
|
292
|
+
--file cleanup-contacts.csv \
|
|
293
|
+
--sobject Contact \
|
|
294
|
+
--target-org dev \
|
|
295
|
+
--wait 30
|
|
296
|
+
|
|
297
|
+
# Then delete parents
|
|
298
|
+
sf data delete bulk \
|
|
299
|
+
--file cleanup-accounts.csv \
|
|
300
|
+
--sobject Account \
|
|
301
|
+
--target-org dev \
|
|
302
|
+
--wait 30
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Best Practices Summary
|
|
306
|
+
|
|
307
|
+
| Method | Best For | Limitations |
|
|
308
|
+
|--------|----------|-------------|
|
|
309
|
+
| Savepoint/Rollback | Synchronous tests | No async, max 5 savepoints |
|
|
310
|
+
| Name Pattern | Ad-hoc cleanup | May delete unintended records |
|
|
311
|
+
| Time Window | Post-test cleanup | Needs accurate timestamp |
|
|
312
|
+
| ID Tracking | Precise cleanup | Requires tracking discipline |
|
|
313
|
+
| @testSetup | Unit tests | Only in @isTest classes |
|
|
314
|
+
| sf CLI Bulk | Large volumes | External tool required |
|
|
315
|
+
|
|
316
|
+
## Golden Rules
|
|
317
|
+
|
|
318
|
+
1. **Always delete children before parents** - Respect relationships
|
|
319
|
+
2. **Use specific patterns** - 'Test%', 'BulkTest%' to avoid accidents
|
|
320
|
+
3. **Verify before delete** - Query first to see what will be deleted
|
|
321
|
+
4. **Test cleanup in sandbox** - Never run unverified cleanup in prod
|
|
322
|
+
5. **Track created IDs** - Most reliable cleanup method
|