@salesforce/afv-skills 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/activating-datacloud/CREDITS.md +5 -0
- package/skills/activating-datacloud/README.md +39 -0
- package/skills/activating-datacloud/SKILL.md +118 -0
- package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
- package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
- package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
- package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
- package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
- package/skills/building-omnistudio-callable-apex/README.md +80 -0
- package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
- package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
- package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
- package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
- package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
- package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
- package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
- package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
- package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
- package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
- package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
- package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
- package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
- package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
- package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
- package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
- package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
- package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
- package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
- package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
- package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
- package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
- package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
- package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
- package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
- package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
- package/skills/building-sf-integrations/CREDITS.md +5 -0
- package/skills/building-sf-integrations/README.md +95 -0
- package/skills/building-sf-integrations/SKILL.md +192 -0
- package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
- package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
- package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
- package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
- package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
- package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
- package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
- package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
- package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
- package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
- package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
- package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
- package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
- package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
- package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
- package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
- package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
- package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
- package/skills/building-sf-integrations/references/cli-reference.md +94 -0
- package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
- package/skills/building-sf-integrations/references/event-patterns.md +838 -0
- package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
- package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
- package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
- package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
- package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
- package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
- package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
- package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
- package/skills/building-sf-integrations/scripts/README.md +100 -0
- package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
- package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
- package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
- package/skills/configuring-connected-apps/CREDITS.md +3 -0
- package/skills/configuring-connected-apps/README.md +99 -0
- package/skills/configuring-connected-apps/SKILL.md +224 -0
- package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
- package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
- package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
- package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
- package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
- package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
- package/skills/configuring-connected-apps/references/example-usage.md +256 -0
- package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
- package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
- package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
- package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
- package/skills/connecting-datacloud/CREDITS.md +5 -0
- package/skills/connecting-datacloud/README.md +59 -0
- package/skills/connecting-datacloud/SKILL.md +155 -0
- package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
- package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
- package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
- package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
- package/skills/debugging-apex-logs/CREDITS.md +22 -0
- package/skills/debugging-apex-logs/README.md +74 -0
- package/skills/debugging-apex-logs/SKILL.md +172 -0
- package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
- package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
- package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
- package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
- package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
- package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
- package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
- package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
- package/skills/debugging-apex-logs/references/common-issues.md +68 -0
- package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
- package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
- package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
- package/skills/deploying-metadata/CREDITS.md +25 -0
- package/skills/deploying-metadata/README.md +104 -0
- package/skills/deploying-metadata/SKILL.md +214 -0
- package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
- package/skills/deploying-metadata/assets/package.xml +121 -0
- package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
- package/skills/deploying-metadata/references/deploy.sh +73 -0
- package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
- package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
- package/skills/deploying-metadata/references/orchestration.md +183 -0
- package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
- package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
- package/skills/deploying-omnistudio-datapacks/README.md +88 -0
- package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
- package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
- package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
- package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
- package/skills/developing-agentforce/references/actions-reference.md +8 -8
- package/skills/fetching-salesforce-docs/README.md +66 -0
- package/skills/fetching-salesforce-docs/SKILL.md +209 -0
- package/skills/fetching-salesforce-docs/requirements.txt +2 -0
- package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
- package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
- package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
- package/skills/generating-apex/CREDITS.md +1 -26
- package/skills/generating-apex-test/CREDITS.md +2 -27
- package/skills/generating-lwc-components/CREDITS.md +5 -0
- package/skills/generating-lwc-components/README.md +126 -0
- package/skills/generating-lwc-components/SKILL.md +191 -0
- package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
- package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
- package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
- package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
- package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
- package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
- package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
- package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
- package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
- package/skills/generating-lwc-components/references/advanced-features.md +108 -0
- package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
- package/skills/generating-lwc-components/references/cli-commands.md +545 -0
- package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
- package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
- package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
- package/skills/generating-lwc-components/references/lms-guide.md +860 -0
- package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
- package/skills/generating-lwc-components/references/performance-guide.md +861 -0
- package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
- package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
- package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
- package/skills/generating-lwc-components/references/state-management.md +642 -0
- package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
- package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
- package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
- package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
- package/skills/generating-mermaid-diagrams/README.md +114 -0
- package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
- package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
- package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
- package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
- package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
- package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
- package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
- package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
- package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
- package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
- package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
- package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
- package/skills/generating-visual-diagrams/CREDITS.md +80 -0
- package/skills/generating-visual-diagrams/README.md +83 -0
- package/skills/generating-visual-diagrams/SKILL.md +208 -0
- package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
- package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
- package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
- package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
- package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
- package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
- package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
- package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
- package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
- package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
- package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
- package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
- package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
- package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
- package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
- package/skills/handling-sf-data/CREDITS.md +5 -0
- package/skills/handling-sf-data/README.md +112 -0
- package/skills/handling-sf-data/SKILL.md +235 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
- package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
- package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
- package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
- package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
- package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
- package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
- package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
- package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
- package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
- package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
- package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
- package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
- package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
- package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
- package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
- package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
- package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
- package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
- package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
- package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
- package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
- package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
- package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
- package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
- package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
- package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
- package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
- package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
- package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
- package/skills/handling-sf-data/references/orchestration.md +174 -0
- package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
- package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
- package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
- package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
- package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
- package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
- package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
- package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
- package/skills/harmonizing-datacloud/CREDITS.md +3 -0
- package/skills/harmonizing-datacloud/README.md +31 -0
- package/skills/harmonizing-datacloud/SKILL.md +117 -0
- package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
- package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
- package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
- package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
- package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
- package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
- package/skills/orchestrating-datacloud/CREDITS.md +15 -0
- package/skills/orchestrating-datacloud/README.md +129 -0
- package/skills/orchestrating-datacloud/SKILL.md +236 -0
- package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
- package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
- package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
- package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
- package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
- package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
- package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
- package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
- package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
- package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
- package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
- package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
- package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
- package/skills/preparing-datacloud/CREDITS.md +7 -0
- package/skills/preparing-datacloud/README.md +51 -0
- package/skills/preparing-datacloud/SKILL.md +191 -0
- package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
- package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
- package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
- package/skills/querying-soql/CREDITS.md +21 -0
- package/skills/querying-soql/README.md +41 -0
- package/skills/querying-soql/SKILL.md +143 -0
- package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
- package/skills/querying-soql/assets/basic-queries.soql +188 -0
- package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
- package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
- package/skills/querying-soql/assets/relationship-queries.soql +203 -0
- package/skills/querying-soql/assets/selector-class.cls +219 -0
- package/skills/querying-soql/references/anti-patterns.md +348 -0
- package/skills/querying-soql/references/cli-commands.md +358 -0
- package/skills/querying-soql/references/field-coverage-rules.md +514 -0
- package/skills/querying-soql/references/query-optimization.md +142 -0
- package/skills/querying-soql/references/selector-patterns.md +479 -0
- package/skills/querying-soql/references/soql-reference.md +227 -0
- package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
- package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
- package/skills/retrieving-datacloud/CREDITS.md +7 -0
- package/skills/retrieving-datacloud/README.md +44 -0
- package/skills/retrieving-datacloud/SKILL.md +120 -0
- package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
- package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
- package/skills/running-apex-tests/CREDITS.md +22 -0
- package/skills/running-apex-tests/README.md +94 -0
- package/skills/running-apex-tests/SKILL.md +158 -0
- package/skills/running-apex-tests/assets/basic-test.cls +169 -0
- package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
- package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
- package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
- package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
- package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
- package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
- package/skills/running-apex-tests/references/cli-commands.md +289 -0
- package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
- package/skills/running-apex-tests/references/performance-optimization.md +283 -0
- package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
- package/skills/running-apex-tests/references/test-patterns.md +154 -0
- package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
- package/skills/segmenting-datacloud/CREDITS.md +3 -0
- package/skills/segmenting-datacloud/README.md +36 -0
- package/skills/segmenting-datacloud/SKILL.md +115 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
3
|
+
* TRANSACTION ROLLBACK PATTERN
|
|
4
|
+
* Using Database.Savepoint for test isolation
|
|
5
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
+
*
|
|
7
|
+
* PURPOSE:
|
|
8
|
+
* Create test data, run tests, then roll back all changes.
|
|
9
|
+
* This ensures complete test isolation without leaving orphan data.
|
|
10
|
+
*
|
|
11
|
+
* HOW IT WORKS:
|
|
12
|
+
* 1. Create a savepoint BEFORE creating any test data
|
|
13
|
+
* 2. Create your test data
|
|
14
|
+
* 3. Run your test/validation logic
|
|
15
|
+
* 4. Roll back to the savepoint (deletes all created records)
|
|
16
|
+
*
|
|
17
|
+
* USE CASES:
|
|
18
|
+
* • Unit testing with data setup
|
|
19
|
+
* • Integration testing without pollution
|
|
20
|
+
* • Manual testing with automatic cleanup
|
|
21
|
+
* • Validation runs that shouldn't persist
|
|
22
|
+
*
|
|
23
|
+
* LIMITATIONS:
|
|
24
|
+
* • Cannot roll back asynchronous operations
|
|
25
|
+
* • Savepoints don't persist across transactions
|
|
26
|
+
* • Maximum 5 savepoints per transaction
|
|
27
|
+
*
|
|
28
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
32
|
+
// BASIC SAVEPOINT/ROLLBACK PATTERN
|
|
33
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
34
|
+
|
|
35
|
+
System.debug('═══════════════════════════════════════════════════════════════');
|
|
36
|
+
System.debug('TRANSACTION ROLLBACK DEMONSTRATION');
|
|
37
|
+
System.debug('═══════════════════════════════════════════════════════════════');
|
|
38
|
+
|
|
39
|
+
// Step 1: Create savepoint BEFORE any DML
|
|
40
|
+
Savepoint sp = Database.setSavepoint();
|
|
41
|
+
System.debug('✓ Savepoint created');
|
|
42
|
+
|
|
43
|
+
// Track what we create for verification
|
|
44
|
+
Set<Id> createdAccountIds = new Set<Id>();
|
|
45
|
+
Set<Id> createdContactIds = new Set<Id>();
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
49
|
+
// Step 2: Create test data
|
|
50
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
51
|
+
|
|
52
|
+
System.debug('');
|
|
53
|
+
System.debug('Creating test data...');
|
|
54
|
+
|
|
55
|
+
// Create Accounts
|
|
56
|
+
List<Account> testAccounts = new List<Account>();
|
|
57
|
+
for (Integer i = 0; i < 10; i++) {
|
|
58
|
+
testAccounts.add(new Account(
|
|
59
|
+
Name = 'Rollback Test Account ' + i,
|
|
60
|
+
Industry = 'Technology',
|
|
61
|
+
Description = 'This record will be rolled back'
|
|
62
|
+
));
|
|
63
|
+
}
|
|
64
|
+
insert testAccounts;
|
|
65
|
+
for (Account acc : testAccounts) {
|
|
66
|
+
createdAccountIds.add(acc.Id);
|
|
67
|
+
}
|
|
68
|
+
System.debug(' Created ' + testAccounts.size() + ' Accounts');
|
|
69
|
+
|
|
70
|
+
// Create Contacts
|
|
71
|
+
List<Contact> testContacts = new List<Contact>();
|
|
72
|
+
for (Account acc : testAccounts) {
|
|
73
|
+
testContacts.add(new Contact(
|
|
74
|
+
FirstName = 'Test',
|
|
75
|
+
LastName = 'Contact',
|
|
76
|
+
AccountId = acc.Id,
|
|
77
|
+
Email = 'test@rollback.example.com'
|
|
78
|
+
));
|
|
79
|
+
}
|
|
80
|
+
insert testContacts;
|
|
81
|
+
for (Contact con : testContacts) {
|
|
82
|
+
createdContactIds.add(con.Id);
|
|
83
|
+
}
|
|
84
|
+
System.debug(' Created ' + testContacts.size() + ' Contacts');
|
|
85
|
+
|
|
86
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
87
|
+
// Step 3: Verify data exists
|
|
88
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
89
|
+
|
|
90
|
+
System.debug('');
|
|
91
|
+
System.debug('Verifying data exists...');
|
|
92
|
+
|
|
93
|
+
Integer accountCount = [SELECT COUNT() FROM Account WHERE Id IN :createdAccountIds];
|
|
94
|
+
Integer contactCount = [SELECT COUNT() FROM Contact WHERE Id IN :createdContactIds];
|
|
95
|
+
|
|
96
|
+
System.debug(' Accounts in database: ' + accountCount);
|
|
97
|
+
System.debug(' Contacts in database: ' + contactCount);
|
|
98
|
+
|
|
99
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
100
|
+
// Step 4: Run your test logic here
|
|
101
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
102
|
+
|
|
103
|
+
System.debug('');
|
|
104
|
+
System.debug('Running test logic...');
|
|
105
|
+
|
|
106
|
+
// Example: Verify trigger fired correctly
|
|
107
|
+
// Example: Check field calculations
|
|
108
|
+
// Example: Validate workflow results
|
|
109
|
+
|
|
110
|
+
System.debug(' Test logic completed');
|
|
111
|
+
|
|
112
|
+
} finally {
|
|
113
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
114
|
+
// Step 5: Roll back ALL changes
|
|
115
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
116
|
+
|
|
117
|
+
System.debug('');
|
|
118
|
+
System.debug('Rolling back transaction...');
|
|
119
|
+
|
|
120
|
+
Database.rollback(sp);
|
|
121
|
+
|
|
122
|
+
System.debug('✓ Rollback complete');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
126
|
+
// Step 6: Verify rollback worked
|
|
127
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
128
|
+
|
|
129
|
+
System.debug('');
|
|
130
|
+
System.debug('Verifying rollback...');
|
|
131
|
+
|
|
132
|
+
Integer accountCountAfter = [SELECT COUNT() FROM Account WHERE Id IN :createdAccountIds];
|
|
133
|
+
Integer contactCountAfter = [SELECT COUNT() FROM Contact WHERE Id IN :createdContactIds];
|
|
134
|
+
|
|
135
|
+
System.debug(' Accounts remaining: ' + accountCountAfter + ' (expected: 0)');
|
|
136
|
+
System.debug(' Contacts remaining: ' + contactCountAfter + ' (expected: 0)');
|
|
137
|
+
|
|
138
|
+
if (accountCountAfter == 0 && contactCountAfter == 0) {
|
|
139
|
+
System.debug('');
|
|
140
|
+
System.debug('═══════════════════════════════════════════════════════════════');
|
|
141
|
+
System.debug('✅ ROLLBACK SUCCESSFUL - All test data removed');
|
|
142
|
+
System.debug('═══════════════════════════════════════════════════════════════');
|
|
143
|
+
} else {
|
|
144
|
+
System.debug('');
|
|
145
|
+
System.debug('⚠️ WARNING: Some records were not rolled back');
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
149
|
+
// PATTERN: TEST METHOD WITH SAVEPOINT
|
|
150
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
@isTest
|
|
154
|
+
public class MyTestClass {
|
|
155
|
+
|
|
156
|
+
@isTest
|
|
157
|
+
static void testWithRollback() {
|
|
158
|
+
// In test methods, DML is automatically rolled back
|
|
159
|
+
// This example shows explicit savepoint usage
|
|
160
|
+
|
|
161
|
+
Savepoint sp = Database.setSavepoint();
|
|
162
|
+
|
|
163
|
+
try {
|
|
164
|
+
// Create test data
|
|
165
|
+
Account testAccount = new Account(Name = 'Test');
|
|
166
|
+
insert testAccount;
|
|
167
|
+
|
|
168
|
+
// Run the test
|
|
169
|
+
Test.startTest();
|
|
170
|
+
MyClass.processAccount(testAccount.Id);
|
|
171
|
+
Test.stopTest();
|
|
172
|
+
|
|
173
|
+
// Assert results
|
|
174
|
+
Account result = [SELECT Field__c FROM Account WHERE Id = :testAccount.Id];
|
|
175
|
+
System.assertEquals('Expected', result.Field__c);
|
|
176
|
+
|
|
177
|
+
} finally {
|
|
178
|
+
// Optional explicit rollback (tests auto-rollback anyway)
|
|
179
|
+
Database.rollback(sp);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
186
|
+
// PATTERN: NESTED SAVEPOINTS
|
|
187
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
188
|
+
|
|
189
|
+
/*
|
|
190
|
+
// You can have up to 5 savepoints
|
|
191
|
+
|
|
192
|
+
Savepoint sp1 = Database.setSavepoint();
|
|
193
|
+
|
|
194
|
+
// Create data set 1
|
|
195
|
+
insert accounts;
|
|
196
|
+
|
|
197
|
+
Savepoint sp2 = Database.setSavepoint();
|
|
198
|
+
|
|
199
|
+
// Create data set 2
|
|
200
|
+
insert contacts;
|
|
201
|
+
|
|
202
|
+
// Rollback to sp2 (removes contacts, keeps accounts)
|
|
203
|
+
Database.rollback(sp2);
|
|
204
|
+
|
|
205
|
+
// Rollback to sp1 (removes everything)
|
|
206
|
+
Database.rollback(sp1);
|
|
207
|
+
*/
|
|
208
|
+
|
|
209
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
210
|
+
// PATTERN: CONDITIONAL ROLLBACK
|
|
211
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
212
|
+
|
|
213
|
+
/*
|
|
214
|
+
Savepoint sp = Database.setSavepoint();
|
|
215
|
+
Boolean shouldCommit = true;
|
|
216
|
+
|
|
217
|
+
try {
|
|
218
|
+
// Create data
|
|
219
|
+
insert records;
|
|
220
|
+
|
|
221
|
+
// Validate
|
|
222
|
+
if (!isValid(records)) {
|
|
223
|
+
shouldCommit = false;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
} finally {
|
|
227
|
+
if (!shouldCommit) {
|
|
228
|
+
Database.rollback(sp);
|
|
229
|
+
System.debug('Changes rolled back due to validation failure');
|
|
230
|
+
} else {
|
|
231
|
+
System.debug('Changes committed');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
*/
|
|
235
|
+
|
|
236
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
237
|
+
// IMPORTANT NOTES
|
|
238
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
239
|
+
|
|
240
|
+
/*
|
|
241
|
+
1. SAVEPOINT LIMITATIONS:
|
|
242
|
+
• Max 5 savepoints per transaction
|
|
243
|
+
• Cannot cross transaction boundaries
|
|
244
|
+
• Does not roll back @future, Queueable, or Batch operations
|
|
245
|
+
• Does not roll back platform events
|
|
246
|
+
• Does not roll back email sends
|
|
247
|
+
|
|
248
|
+
2. WHAT GETS ROLLED BACK:
|
|
249
|
+
✓ All DML operations (insert, update, delete, undelete)
|
|
250
|
+
✓ Workflow field updates triggered by DML
|
|
251
|
+
✓ Process Builder / Flow changes triggered by DML
|
|
252
|
+
|
|
253
|
+
3. WHAT DOES NOT GET ROLLED BACK:
|
|
254
|
+
✗ Asynchronous operations (@future, Queueable, Batch, Scheduled)
|
|
255
|
+
✗ Platform events
|
|
256
|
+
✗ Outbound messages
|
|
257
|
+
✗ Email sends
|
|
258
|
+
✗ Callouts (HTTP requests)
|
|
259
|
+
✗ Debug logs
|
|
260
|
+
|
|
261
|
+
4. BEST PRACTICES:
|
|
262
|
+
• Create savepoint as early as possible
|
|
263
|
+
• Always use try-finally to ensure rollback
|
|
264
|
+
• Verify rollback worked by querying records
|
|
265
|
+
• Don't rely on savepoints for async operations
|
|
266
|
+
*/
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Name,Industry,Type,AnnualRevenue,NumberOfEmployees,BillingStreet,BillingCity,BillingState,BillingPostalCode,BillingCountry,Phone,Website,Description
|
|
2
|
+
Test Import Account 001,Technology,Prospect,1000000,100,100 Main Street,San Francisco,CA,94102,USA,(555) 100-0001,https://testaccount001.example.com,Test account for import validation
|
|
3
|
+
Test Import Account 002,Healthcare,Customer,2500000,250,200 Oak Avenue,New York,NY,10001,USA,(555) 100-0002,https://testaccount002.example.com,Healthcare customer account
|
|
4
|
+
Test Import Account 003,Finance,Partner,5000000,500,300 Wall Street,Chicago,IL,60601,USA,(555) 100-0003,https://testaccount003.example.com,Financial services partner
|
|
5
|
+
Test Import Account 004,Manufacturing,Prospect,750000,75,400 Industrial Way,Detroit,MI,48201,USA,(555) 100-0004,https://testaccount004.example.com,Manufacturing prospect
|
|
6
|
+
Test Import Account 005,Retail,Customer,3000000,350,500 Shopping Lane,Los Angeles,CA,90001,USA,(555) 100-0005,https://testaccount005.example.com,Retail chain customer
|
|
7
|
+
Test Import Account 006,Education,Other,500000,50,600 Campus Drive,Boston,MA,02101,USA,(555) 100-0006,https://testaccount006.example.com,Educational institution
|
|
8
|
+
Test Import Account 007,Energy,Prospect,10000000,1000,700 Pipeline Road,Houston,TX,77001,USA,(555) 100-0007,https://testaccount007.example.com,Energy sector prospect
|
|
9
|
+
Test Import Account 008,Media,Customer,1500000,150,800 Broadcast Blvd,Atlanta,GA,30301,USA,(555) 100-0008,https://testaccount008.example.com,Media company
|
|
10
|
+
Test Import Account 009,Technology,Customer,8000000,800,900 Tech Park,Seattle,WA,98101,USA,(555) 100-0009,https://testaccount009.example.com,Enterprise tech customer
|
|
11
|
+
Test Import Account 010,Healthcare,Prospect,2000000,200,1000 Medical Center,Denver,CO,80201,USA,(555) 100-0010,https://testaccount010.example.com,Healthcare prospect
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
FirstName,LastName,Email,Phone,MobilePhone,Title,Department,MailingStreet,MailingCity,MailingState,MailingPostalCode,MailingCountry,Account.Name,Description
|
|
2
|
+
John,Smith,john.smith@testimport.example.com,(555) 200-0001,(555) 300-0001,CEO,Executive,100 Main Street,San Francisco,CA,94102,USA,Test Import Account 001,Primary contact for account
|
|
3
|
+
Jane,Doe,jane.doe@testimport.example.com,(555) 200-0002,(555) 300-0002,CFO,Finance,100 Main Street,San Francisco,CA,94102,USA,Test Import Account 001,Finance lead
|
|
4
|
+
Robert,Johnson,robert.johnson@testimport.example.com,(555) 200-0003,(555) 300-0003,CTO,Technology,200 Oak Avenue,New York,NY,10001,USA,Test Import Account 002,Technical decision maker
|
|
5
|
+
Emily,Williams,emily.williams@testimport.example.com,(555) 200-0004,(555) 300-0004,VP Sales,Sales,200 Oak Avenue,New York,NY,10001,USA,Test Import Account 002,Sales executive
|
|
6
|
+
Michael,Brown,michael.brown@testimport.example.com,(555) 200-0005,(555) 300-0005,Director,Operations,300 Wall Street,Chicago,IL,60601,USA,Test Import Account 003,Operations director
|
|
7
|
+
Sarah,Davis,sarah.davis@testimport.example.com,(555) 200-0006,(555) 300-0006,Manager,Marketing,400 Industrial Way,Detroit,MI,48201,USA,Test Import Account 004,Marketing manager
|
|
8
|
+
David,Miller,david.miller@testimport.example.com,(555) 200-0007,(555) 300-0007,Senior Developer,Engineering,500 Shopping Lane,Los Angeles,CA,90001,USA,Test Import Account 005,Technical lead
|
|
9
|
+
Jennifer,Wilson,jennifer.wilson@testimport.example.com,(555) 200-0008,(555) 300-0008,Analyst,Analytics,600 Campus Drive,Boston,MA,02101,USA,Test Import Account 006,Data analyst
|
|
10
|
+
Christopher,Moore,christopher.moore@testimport.example.com,(555) 200-0009,(555) 300-0009,Consultant,Consulting,700 Pipeline Road,Houston,TX,77001,USA,Test Import Account 007,External consultant
|
|
11
|
+
Amanda,Taylor,amanda.taylor@testimport.example.com,(555) 200-0010,(555) 300-0010,Project Manager,PMO,800 Broadcast Blvd,Atlanta,GA,30301,USA,Test Import Account 008,Project lead
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Name,Status__c,Type__c,Amount__c,Date__c,Description__c,Account__r.Name
|
|
2
|
+
Test Custom Record 001,Draft,Standard,1000.00,2025-03-01,Test custom object record 1,Test Import Account 001
|
|
3
|
+
Test Custom Record 002,Active,Premium,2500.00,2025-03-02,Test custom object record 2,Test Import Account 001
|
|
4
|
+
Test Custom Record 003,Pending,Standard,1500.00,2025-03-03,Test custom object record 3,Test Import Account 002
|
|
5
|
+
Test Custom Record 004,Active,Enterprise,5000.00,2025-03-04,Test custom object record 4,Test Import Account 002
|
|
6
|
+
Test Custom Record 005,Complete,Standard,750.00,2025-03-05,Test custom object record 5,Test Import Account 003
|
|
7
|
+
Test Custom Record 006,Draft,Premium,3000.00,2025-03-06,Test custom object record 6,Test Import Account 003
|
|
8
|
+
Test Custom Record 007,Active,Standard,1250.00,2025-03-07,Test custom object record 7,Test Import Account 004
|
|
9
|
+
Test Custom Record 008,Pending,Enterprise,7500.00,2025-03-08,Test custom object record 8,Test Import Account 005
|
|
10
|
+
Test Custom Record 009,Complete,Premium,4000.00,2025-03-09,Test custom object record 9,Test Import Account 006
|
|
11
|
+
Test Custom Record 010,Active,Standard,2000.00,2025-03-10,Test custom object record 10,Test Import Account 007
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Name,StageName,CloseDate,Amount,Probability,Type,LeadSource,NextStep,Description,Account.Name
|
|
2
|
+
Test Opportunity 001,Prospecting,2025-03-15,50000,10,New Customer,Web,Initial discovery call,New opportunity from website lead,Test Import Account 001
|
|
3
|
+
Test Opportunity 002,Qualification,2025-03-20,75000,20,New Customer,Phone Inquiry,Schedule demo,Qualified lead from phone inquiry,Test Import Account 001
|
|
4
|
+
Test Opportunity 003,Needs Analysis,2025-03-25,100000,40,Existing Customer - Upgrade,Partner Referral,Present solution options,Upgrade opportunity from partner,Test Import Account 002
|
|
5
|
+
Test Opportunity 004,Value Proposition,2025-04-01,150000,50,New Customer,Trade Show,Send proposal,Trade show lead in negotiation,Test Import Account 002
|
|
6
|
+
Test Opportunity 005,Proposal/Price Quote,2025-04-10,200000,65,New Customer,Web,Follow up on proposal,Proposal sent awaiting response,Test Import Account 003
|
|
7
|
+
Test Opportunity 006,Negotiation/Review,2025-04-15,250000,80,Existing Customer - Replacement,Employee Referral,Finalize contract terms,Replacement deal in final stages,Test Import Account 003
|
|
8
|
+
Test Opportunity 007,Prospecting,2025-04-20,30000,10,New Customer,Other,Initial outreach,Cold outreach opportunity,Test Import Account 004
|
|
9
|
+
Test Opportunity 008,Qualification,2025-04-25,45000,20,New Customer,Web,Qualify budget,Inbound lead qualification,Test Import Account 005
|
|
10
|
+
Test Opportunity 009,Needs Analysis,2025-05-01,125000,40,New Customer,Partner Referral,Technical assessment,Partner referral in analysis,Test Import Account 006
|
|
11
|
+
Test Opportunity 010,Closed Won,2025-02-28,175000,100,New Customer,Trade Show,Contract signed,Successfully closed deal,Test Import Account 007
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Data Factory for Account records
|
|
3
|
+
* Supports bulk creation with configurable field values
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* List<Account> accounts = TestDataFactory_Account.create(200);
|
|
7
|
+
* List<Account> accountsNoInsert = TestDataFactory_Account.create(200, false);
|
|
8
|
+
* List<Account> customAccounts = TestDataFactory_Account.createWithIndustry(50, 'Healthcare');
|
|
9
|
+
*/
|
|
10
|
+
public class TestDataFactory_Account {
|
|
11
|
+
|
|
12
|
+
private static final String DEFAULT_NAME_PREFIX = 'Test Account ';
|
|
13
|
+
private static final String DEFAULT_INDUSTRY = 'Technology';
|
|
14
|
+
private static final String DEFAULT_TYPE = 'Prospect';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Create and insert Account records with default values
|
|
18
|
+
* @param count Number of records to create
|
|
19
|
+
* @return List of inserted Account records with IDs
|
|
20
|
+
*/
|
|
21
|
+
public static List<Account> create(Integer count) {
|
|
22
|
+
return create(count, true);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Create Account records with insert option
|
|
27
|
+
* @param count Number of records to create
|
|
28
|
+
* @param doInsert Whether to insert records (true) or return without inserting (false)
|
|
29
|
+
* @return List of Account records
|
|
30
|
+
*/
|
|
31
|
+
public static List<Account> create(Integer count, Boolean doInsert) {
|
|
32
|
+
List<Account> records = new List<Account>();
|
|
33
|
+
for (Integer i = 0; i < count; i++) {
|
|
34
|
+
records.add(buildRecord(i));
|
|
35
|
+
}
|
|
36
|
+
if (doInsert && !records.isEmpty()) {
|
|
37
|
+
insert records;
|
|
38
|
+
}
|
|
39
|
+
return records;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Create Account records with specific Industry
|
|
44
|
+
* @param count Number of records to create
|
|
45
|
+
* @param industry Industry picklist value
|
|
46
|
+
* @return List of inserted Account records
|
|
47
|
+
*/
|
|
48
|
+
public static List<Account> createWithIndustry(Integer count, String industry) {
|
|
49
|
+
List<Account> records = new List<Account>();
|
|
50
|
+
for (Integer i = 0; i < count; i++) {
|
|
51
|
+
Account acc = buildRecord(i);
|
|
52
|
+
acc.Industry = industry;
|
|
53
|
+
records.add(acc);
|
|
54
|
+
}
|
|
55
|
+
if (!records.isEmpty()) {
|
|
56
|
+
insert records;
|
|
57
|
+
}
|
|
58
|
+
return records;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Create Account records with varying Industries for comprehensive testing
|
|
63
|
+
* Distributes records across multiple Industry values
|
|
64
|
+
* @param count Number of records to create
|
|
65
|
+
* @return List of inserted Account records with varied Industries
|
|
66
|
+
*/
|
|
67
|
+
public static List<Account> createWithVariedIndustries(Integer count) {
|
|
68
|
+
List<String> industries = new List<String>{
|
|
69
|
+
'Technology', 'Healthcare', 'Finance', 'Manufacturing',
|
|
70
|
+
'Retail', 'Education', 'Energy', 'Media'
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
List<Account> records = new List<Account>();
|
|
74
|
+
for (Integer i = 0; i < count; i++) {
|
|
75
|
+
Account acc = buildRecord(i);
|
|
76
|
+
acc.Industry = industries[Math.mod(i, industries.size())];
|
|
77
|
+
records.add(acc);
|
|
78
|
+
}
|
|
79
|
+
if (!records.isEmpty()) {
|
|
80
|
+
insert records;
|
|
81
|
+
}
|
|
82
|
+
return records;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Create Account hierarchy (parent-child accounts)
|
|
87
|
+
* @param parentCount Number of parent accounts
|
|
88
|
+
* @param childrenPerParent Number of child accounts per parent
|
|
89
|
+
* @return Map with 'parents' and 'children' lists
|
|
90
|
+
*/
|
|
91
|
+
public static Map<String, List<Account>> createHierarchy(Integer parentCount, Integer childrenPerParent) {
|
|
92
|
+
// Create parent accounts
|
|
93
|
+
List<Account> parents = create(parentCount);
|
|
94
|
+
|
|
95
|
+
// Create child accounts
|
|
96
|
+
List<Account> children = new List<Account>();
|
|
97
|
+
for (Account parent : parents) {
|
|
98
|
+
for (Integer i = 0; i < childrenPerParent; i++) {
|
|
99
|
+
Account child = new Account(
|
|
100
|
+
Name = parent.Name + ' - Child ' + i,
|
|
101
|
+
ParentId = parent.Id,
|
|
102
|
+
Industry = parent.Industry,
|
|
103
|
+
Type = 'Customer'
|
|
104
|
+
);
|
|
105
|
+
children.add(child);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (!children.isEmpty()) {
|
|
109
|
+
insert children;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return new Map<String, List<Account>>{
|
|
113
|
+
'parents' => parents,
|
|
114
|
+
'children' => children
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Build a single Account record with default values
|
|
120
|
+
* @param index Record index for unique naming
|
|
121
|
+
* @return Account record (not inserted)
|
|
122
|
+
*/
|
|
123
|
+
private static Account buildRecord(Integer index) {
|
|
124
|
+
return new Account(
|
|
125
|
+
Name = DEFAULT_NAME_PREFIX + String.valueOf(index).leftPad(5, '0'),
|
|
126
|
+
Industry = DEFAULT_INDUSTRY,
|
|
127
|
+
Type = DEFAULT_TYPE,
|
|
128
|
+
BillingStreet = '123 Test Street',
|
|
129
|
+
BillingCity = 'San Francisco',
|
|
130
|
+
BillingState = 'CA',
|
|
131
|
+
BillingPostalCode = '94102',
|
|
132
|
+
BillingCountry = 'USA',
|
|
133
|
+
Phone = '(555) 123-' + String.valueOf(1000 + index),
|
|
134
|
+
Website = 'https://testaccount' + index + '.example.com',
|
|
135
|
+
NumberOfEmployees = 100 + (index * 10),
|
|
136
|
+
AnnualRevenue = 1000000 + (index * 50000),
|
|
137
|
+
Description = 'Test account created by TestDataFactory for automated testing'
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Get IDs of created records for cleanup
|
|
143
|
+
* @param records List of Account records
|
|
144
|
+
* @return Set of Account IDs
|
|
145
|
+
*/
|
|
146
|
+
public static Set<Id> getIds(List<Account> records) {
|
|
147
|
+
Set<Id> ids = new Set<Id>();
|
|
148
|
+
for (Account acc : records) {
|
|
149
|
+
if (acc.Id != null) {
|
|
150
|
+
ids.add(acc.Id);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return ids;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Delete records by IDs (cleanup utility)
|
|
158
|
+
* @param recordIds Set of Account IDs to delete
|
|
159
|
+
*/
|
|
160
|
+
public static void cleanup(Set<Id> recordIds) {
|
|
161
|
+
if (!recordIds.isEmpty()) {
|
|
162
|
+
delete [SELECT Id FROM Account WHERE Id IN :recordIds];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|