@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,348 @@
|
|
|
1
|
+
<!-- Parent: querying-soql/SKILL.md -->
|
|
2
|
+
# SOQL Anti-Patterns: What to Avoid
|
|
3
|
+
|
|
4
|
+
A catalog of common SOQL mistakes and their solutions. Avoiding these patterns will help you stay within governor limits, improve query performance, and write more maintainable code.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Anti-Pattern #1: SOQL Inside Loops
|
|
9
|
+
|
|
10
|
+
**The Problem**: Executing queries inside a loop quickly exhausts the 100 SOQL query limit.
|
|
11
|
+
|
|
12
|
+
```apex
|
|
13
|
+
// ❌ ANTI-PATTERN: Query per record
|
|
14
|
+
for (Contact c : Trigger.new) {
|
|
15
|
+
Account a = [SELECT Name FROM Account WHERE Id = :c.AccountId];
|
|
16
|
+
c.Account_Name__c = a.Name;
|
|
17
|
+
}
|
|
18
|
+
// 200 contacts = 200 queries = LIMIT EXCEEDED
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**The Solution**: Query once, use a Map for lookups.
|
|
22
|
+
|
|
23
|
+
```apex
|
|
24
|
+
// ✅ CORRECT: Single query with Map lookup
|
|
25
|
+
Set<Id> accountIds = new Set<Id>();
|
|
26
|
+
for (Contact c : Trigger.new) {
|
|
27
|
+
accountIds.add(c.AccountId);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
Map<Id, Account> accountMap = new Map<Id, Account>(
|
|
31
|
+
[SELECT Id, Name FROM Account WHERE Id IN :accountIds]
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
for (Contact c : Trigger.new) {
|
|
35
|
+
Account a = accountMap.get(c.AccountId);
|
|
36
|
+
if (a != null) {
|
|
37
|
+
c.Account_Name__c = a.Name;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// 200 contacts = 1 query = SAFE
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Key Insight**: Collect IDs first, query once with `IN` clause, then use Map for O(1) lookups.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Anti-Pattern #2: Non-Selective WHERE Clauses
|
|
48
|
+
|
|
49
|
+
**The Problem**: Queries on non-indexed fields cause full table scans, which fail on large objects (100k+ records).
|
|
50
|
+
|
|
51
|
+
```apex
|
|
52
|
+
// ❌ ANTI-PATTERN: Non-selective filter
|
|
53
|
+
SELECT Id FROM Lead WHERE Status = 'Open'
|
|
54
|
+
// Status is not indexed - scans ALL Lead records
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**The Solution**: Add an indexed field to make the query selective.
|
|
58
|
+
|
|
59
|
+
```apex
|
|
60
|
+
// ✅ CORRECT: Add indexed field filter
|
|
61
|
+
SELECT Id FROM Lead
|
|
62
|
+
WHERE Status = 'Open'
|
|
63
|
+
AND CreatedDate = LAST_N_DAYS:30
|
|
64
|
+
// CreatedDate is indexed - uses index
|
|
65
|
+
|
|
66
|
+
// ✅ ALTERNATIVE: Use OwnerId (indexed)
|
|
67
|
+
SELECT Id FROM Lead
|
|
68
|
+
WHERE Status = 'Open'
|
|
69
|
+
AND OwnerId = :UserInfo.getUserId()
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Indexed Fields** (Always use these in WHERE):
|
|
73
|
+
- `Id`, `Name`, `OwnerId`, `CreatedDate`, `LastModifiedDate`
|
|
74
|
+
- `RecordTypeId`, External ID fields, Master-Detail fields
|
|
75
|
+
- Standard indexed fields: `Account.AccountNumber`, `Contact.Email`, `Case.CaseNumber`
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Anti-Pattern #3: Leading Wildcards
|
|
80
|
+
|
|
81
|
+
**The Problem**: `LIKE '%value'` cannot use indexes and scans all records.
|
|
82
|
+
|
|
83
|
+
```apex
|
|
84
|
+
// ❌ ANTI-PATTERN: Leading wildcard
|
|
85
|
+
SELECT Id FROM Account WHERE Name LIKE '%Corporation'
|
|
86
|
+
// Cannot use index - full table scan
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**The Solution**: Use trailing wildcards or exact matches.
|
|
90
|
+
|
|
91
|
+
```apex
|
|
92
|
+
// ✅ CORRECT: Trailing wildcard (uses index)
|
|
93
|
+
SELECT Id FROM Account WHERE Name LIKE 'Acme%'
|
|
94
|
+
|
|
95
|
+
// ✅ CORRECT: Exact match
|
|
96
|
+
SELECT Id FROM Account WHERE Name = 'Acme Corporation'
|
|
97
|
+
|
|
98
|
+
// ✅ CORRECT: Contains check (if absolutely necessary)
|
|
99
|
+
// Do the filtering in Apex after a selective query
|
|
100
|
+
List<Account> allAccounts = [
|
|
101
|
+
SELECT Id, Name FROM Account
|
|
102
|
+
WHERE CreatedDate = THIS_YEAR
|
|
103
|
+
];
|
|
104
|
+
List<Account> filtered = new List<Account>();
|
|
105
|
+
for (Account a : allAccounts) {
|
|
106
|
+
if (a.Name.contains('Corporation')) {
|
|
107
|
+
filtered.add(a);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Anti-Pattern #4: Negative Operators
|
|
115
|
+
|
|
116
|
+
**The Problem**: `!=`, `NOT IN`, `NOT LIKE` often prevent index usage.
|
|
117
|
+
|
|
118
|
+
```apex
|
|
119
|
+
// ❌ ANTI-PATTERN: Negative operators
|
|
120
|
+
SELECT Id FROM Opportunity WHERE StageName != 'Closed Lost'
|
|
121
|
+
SELECT Id FROM Contact WHERE AccountId NOT IN :excludedIds
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**The Solution**: Query for what you want, not what you don't want.
|
|
125
|
+
|
|
126
|
+
```apex
|
|
127
|
+
// ✅ CORRECT: Positive filter with specific values
|
|
128
|
+
SELECT Id FROM Opportunity
|
|
129
|
+
WHERE StageName IN ('Prospecting', 'Qualification', 'Proposal', 'Negotiation')
|
|
130
|
+
|
|
131
|
+
// ✅ CORRECT: Use a formula field for complex exclusions
|
|
132
|
+
// Create IsExcluded__c formula, then:
|
|
133
|
+
SELECT Id FROM Contact WHERE IsExcluded__c = false
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Anti-Pattern #5: Querying for NULL
|
|
139
|
+
|
|
140
|
+
**The Problem**: `WHERE Field = null` is non-selective and scans all records.
|
|
141
|
+
|
|
142
|
+
```apex
|
|
143
|
+
// ❌ ANTI-PATTERN: Null check in WHERE
|
|
144
|
+
SELECT Id FROM Contact WHERE Email = null
|
|
145
|
+
// Non-selective - scans all contacts
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**The Solution**: Combine with selective filters or redesign data model.
|
|
149
|
+
|
|
150
|
+
```apex
|
|
151
|
+
// ✅ CORRECT: Add selective filter
|
|
152
|
+
SELECT Id FROM Contact
|
|
153
|
+
WHERE Email = null
|
|
154
|
+
AND CreatedDate = LAST_N_DAYS:30
|
|
155
|
+
|
|
156
|
+
// ✅ BETTER: Use a checkbox field
|
|
157
|
+
// Create HasEmail__c formula checkbox
|
|
158
|
+
SELECT Id FROM Contact WHERE HasEmail__c = false
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Anti-Pattern #6: SELECT * (All Fields)
|
|
164
|
+
|
|
165
|
+
**The Problem**: Querying all fields wastes resources and can hit heap limits.
|
|
166
|
+
|
|
167
|
+
```apex
|
|
168
|
+
// ❌ ANTI-PATTERN: Selecting everything
|
|
169
|
+
SELECT FIELDS(ALL) FROM Account LIMIT 200
|
|
170
|
+
// Loads ALL fields into memory
|
|
171
|
+
|
|
172
|
+
// ❌ ANTI-PATTERN: Listing every field manually
|
|
173
|
+
SELECT Id, Name, Description, BillingStreet, BillingCity,
|
|
174
|
+
BillingState, BillingPostalCode, BillingCountry, ...
|
|
175
|
+
FROM Account
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**The Solution**: Query only the fields you need.
|
|
179
|
+
|
|
180
|
+
```apex
|
|
181
|
+
// ✅ CORRECT: Minimal field selection
|
|
182
|
+
SELECT Id, Name, Industry FROM Account
|
|
183
|
+
|
|
184
|
+
// ✅ FOR DISPLAY: Just display fields
|
|
185
|
+
SELECT Id, Name FROM Account
|
|
186
|
+
|
|
187
|
+
// ✅ FOR PROCESSING: Just processing fields
|
|
188
|
+
SELECT Id, Status__c, ProcessedDate__c FROM Account
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Anti-Pattern #7: No LIMIT on Queries
|
|
194
|
+
|
|
195
|
+
**The Problem**: Unbounded queries can return 50,000 records and consume heap memory.
|
|
196
|
+
|
|
197
|
+
```apex
|
|
198
|
+
// ❌ ANTI-PATTERN: No limit
|
|
199
|
+
SELECT Id, Name FROM Account
|
|
200
|
+
// Could return 50,000 records!
|
|
201
|
+
|
|
202
|
+
// ❌ ANTI-PATTERN: Excessive limit
|
|
203
|
+
SELECT Id, Name FROM Account LIMIT 50000
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**The Solution**: Use appropriate limits for your use case.
|
|
207
|
+
|
|
208
|
+
```apex
|
|
209
|
+
// ✅ CORRECT: Reasonable limit for UI display
|
|
210
|
+
SELECT Id, Name FROM Account LIMIT 200
|
|
211
|
+
|
|
212
|
+
// ✅ CORRECT: Pagination
|
|
213
|
+
SELECT Id, Name FROM Account
|
|
214
|
+
ORDER BY Name
|
|
215
|
+
LIMIT 50 OFFSET 0
|
|
216
|
+
|
|
217
|
+
// ✅ CORRECT: Single record lookup
|
|
218
|
+
SELECT Id, Name FROM Account WHERE Name = 'Acme' LIMIT 1
|
|
219
|
+
|
|
220
|
+
// ✅ CORRECT: Existence check
|
|
221
|
+
SELECT Id FROM Account WHERE Name = 'Acme' LIMIT 1
|
|
222
|
+
// In Apex: if (!results.isEmpty()) { /* exists */ }
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Anti-Pattern #8: Deep Relationship Traversal
|
|
228
|
+
|
|
229
|
+
**The Problem**: Deep nesting (>3 levels) hurts performance and readability.
|
|
230
|
+
|
|
231
|
+
```apex
|
|
232
|
+
// ❌ ANTI-PATTERN: Deep traversal
|
|
233
|
+
SELECT Id,
|
|
234
|
+
Account.Owner.Manager.Department.Name
|
|
235
|
+
FROM Contact
|
|
236
|
+
// 4 levels deep - hard to maintain, performance hit
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**The Solution**: Flatten queries or use multiple queries.
|
|
240
|
+
|
|
241
|
+
```apex
|
|
242
|
+
// ✅ CORRECT: Flatten to 1-2 levels
|
|
243
|
+
SELECT Id, Account.Name, Account.OwnerId FROM Contact
|
|
244
|
+
|
|
245
|
+
// Then query Owner separately if needed
|
|
246
|
+
Map<Id, User> owners = new Map<Id, User>(
|
|
247
|
+
[SELECT Id, ManagerId FROM User WHERE Id IN :ownerIds]
|
|
248
|
+
);
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Anti-Pattern #9: Unfiltered Subqueries
|
|
254
|
+
|
|
255
|
+
**The Problem**: Child subqueries without filters can return massive datasets.
|
|
256
|
+
|
|
257
|
+
```apex
|
|
258
|
+
// ❌ ANTI-PATTERN: Unfiltered subquery
|
|
259
|
+
SELECT Id,
|
|
260
|
+
(SELECT Id FROM Contacts),
|
|
261
|
+
(SELECT Id FROM Opportunities)
|
|
262
|
+
FROM Account
|
|
263
|
+
// Could return thousands of child records per account
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**The Solution**: Always filter and limit subqueries.
|
|
267
|
+
|
|
268
|
+
```apex
|
|
269
|
+
// ✅ CORRECT: Filtered and limited subqueries
|
|
270
|
+
SELECT Id,
|
|
271
|
+
(SELECT Id, Name FROM Contacts
|
|
272
|
+
WHERE IsActive__c = true
|
|
273
|
+
LIMIT 5),
|
|
274
|
+
(SELECT Id, Name FROM Opportunities
|
|
275
|
+
WHERE StageName != 'Closed Lost'
|
|
276
|
+
LIMIT 5)
|
|
277
|
+
FROM Account
|
|
278
|
+
WHERE Industry = 'Technology'
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Anti-Pattern #10: Formula Fields in WHERE
|
|
284
|
+
|
|
285
|
+
**The Problem**: Formula fields are not indexed and require full table scans.
|
|
286
|
+
|
|
287
|
+
```apex
|
|
288
|
+
// ❌ ANTI-PATTERN: Filter on formula field
|
|
289
|
+
SELECT Id FROM Opportunity
|
|
290
|
+
WHERE Days_Since_Created__c > 30
|
|
291
|
+
// Formula field - cannot use index
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**The Solution**: Use the underlying indexed field.
|
|
295
|
+
|
|
296
|
+
```apex
|
|
297
|
+
// ✅ CORRECT: Use base field
|
|
298
|
+
SELECT Id FROM Opportunity
|
|
299
|
+
WHERE CreatedDate < LAST_N_DAYS:30
|
|
300
|
+
|
|
301
|
+
// ✅ ALTERNATIVE: Store computed value in regular field
|
|
302
|
+
// Use workflow/flow to update a Number field
|
|
303
|
+
SELECT Id FROM Opportunity
|
|
304
|
+
WHERE Days_Open__c > 30
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Quick Reference: Selectivity Rules
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
A filter is SELECTIVE when:
|
|
313
|
+
├── Uses an indexed field, AND
|
|
314
|
+
├── Returns < 10% of first million records, OR
|
|
315
|
+
├── Returns < 5% of records beyond first million
|
|
316
|
+
└── Absolute max: 333,333 records (1M / 3)
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**Always Indexed Fields**:
|
|
320
|
+
- `Id`, `Name`, `OwnerId`, `CreatedDate`, `LastModifiedDate`
|
|
321
|
+
- `RecordTypeId`, External ID fields, Master-Detail relationship fields
|
|
322
|
+
|
|
323
|
+
**Request Custom Index**: Contact Salesforce Support with:
|
|
324
|
+
- Object name and field API name
|
|
325
|
+
- Sample SOQL query
|
|
326
|
+
- Cardinality (unique values count)
|
|
327
|
+
- Business justification
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Testing Checklist
|
|
332
|
+
|
|
333
|
+
Before deploying SOQL to production:
|
|
334
|
+
|
|
335
|
+
1. [ ] Run Query Plan tool (Developer Console or CLI)
|
|
336
|
+
2. [ ] Verify `LeadingOperationType` is "Index" not "TableScan"
|
|
337
|
+
3. [ ] Test with 200+ records in trigger context
|
|
338
|
+
4. [ ] Verify query count stays under 100 per transaction
|
|
339
|
+
5. [ ] Check heap usage for large result sets
|
|
340
|
+
|
|
341
|
+
```bash
|
|
342
|
+
# CLI Query Plan
|
|
343
|
+
sf data query \
|
|
344
|
+
--query "SELECT Id FROM Account WHERE Name = 'Test'" \
|
|
345
|
+
--target-org my-org \
|
|
346
|
+
--use-tooling-api \
|
|
347
|
+
--plan
|
|
348
|
+
```
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
<!-- Parent: querying-soql/SKILL.md -->
|
|
2
|
+
# Salesforce CLI SOQL Commands
|
|
3
|
+
|
|
4
|
+
## Quick Reference
|
|
5
|
+
|
|
6
|
+
| Task | Command |
|
|
7
|
+
|------|---------|
|
|
8
|
+
| Run query | `sf data query --query "SELECT..."` |
|
|
9
|
+
| JSON output | `sf data query --query "..." --json` |
|
|
10
|
+
| CSV output | `sf data query --query "..." --result-format csv` |
|
|
11
|
+
| Bulk export | `sf data export bulk --query "SELECT..." --target-org alias` |
|
|
12
|
+
| Query plan | `sf api request rest '/query/?explain=<SOQL>' --target-org alias` |
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Basic Queries
|
|
17
|
+
|
|
18
|
+
### Run a Query
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
sf data query \
|
|
22
|
+
--query "SELECT Id, Name, Industry FROM Account LIMIT 10" \
|
|
23
|
+
--target-org my-sandbox
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Query with Filters
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
sf data query \
|
|
30
|
+
--query "SELECT Id, Name FROM Account WHERE Industry = 'Technology'" \
|
|
31
|
+
--target-org my-sandbox
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Query Relationships
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Child-to-parent
|
|
38
|
+
sf data query \
|
|
39
|
+
--query "SELECT Id, Name, Account.Name FROM Contact LIMIT 10" \
|
|
40
|
+
--target-org my-sandbox
|
|
41
|
+
|
|
42
|
+
# Parent-to-child
|
|
43
|
+
sf data query \
|
|
44
|
+
--query "SELECT Id, Name, (SELECT Id, Name FROM Contacts) FROM Account LIMIT 5" \
|
|
45
|
+
--target-org my-sandbox
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Output Formats
|
|
51
|
+
|
|
52
|
+
### Human-Readable (Default)
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
sf data query \
|
|
56
|
+
--query "SELECT Id, Name FROM Account LIMIT 5" \
|
|
57
|
+
--target-org my-sandbox
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### JSON
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
sf data query \
|
|
64
|
+
--query "SELECT Id, Name FROM Account LIMIT 5" \
|
|
65
|
+
--target-org my-sandbox \
|
|
66
|
+
--json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### CSV
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
sf data query \
|
|
73
|
+
--query "SELECT Id, Name, Industry FROM Account" \
|
|
74
|
+
--target-org my-sandbox \
|
|
75
|
+
--result-format csv > accounts.csv
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Direct to File
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
sf data query \
|
|
82
|
+
--query "SELECT Id, Name, Industry FROM Account" \
|
|
83
|
+
--target-org my-sandbox \
|
|
84
|
+
--result-format csv \
|
|
85
|
+
--output-file accounts.csv
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Bulk Data Export
|
|
91
|
+
|
|
92
|
+
For large result sets (> 2,000 records), use the dedicated bulk export command:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Export to CSV (default)
|
|
96
|
+
sf data export bulk \
|
|
97
|
+
--query "SELECT Id, Name FROM Account" \
|
|
98
|
+
--target-org my-sandbox \
|
|
99
|
+
--output-file accounts.csv
|
|
100
|
+
|
|
101
|
+
# Export as JSON
|
|
102
|
+
sf data export bulk \
|
|
103
|
+
--query "SELECT Id, Name FROM Account" \
|
|
104
|
+
--target-org my-sandbox \
|
|
105
|
+
--output-file accounts.json \
|
|
106
|
+
--result-format json
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
> **Note**: `--bulk` and `--wait` flags on `sf data query` were removed in v2.87.7. Use `sf data export bulk` instead.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Query Plan Analysis
|
|
114
|
+
|
|
115
|
+
Analyze query performance before running:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
sf data query \
|
|
119
|
+
--query "SELECT Id FROM Account WHERE Name = 'Acme'" \
|
|
120
|
+
--target-org my-sandbox \
|
|
121
|
+
--use-tooling-api \
|
|
122
|
+
--plan
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Understanding Query Plan Output
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"plans": [{
|
|
130
|
+
"cardinality": 50, // Estimated rows returned
|
|
131
|
+
"fields": ["Name"], // Fields used for filtering
|
|
132
|
+
"leadingOperationType": "Index", // Index = good, TableScan = bad
|
|
133
|
+
"relativeCost": 0.1, // Lower is better
|
|
134
|
+
"sobjectCardinality": 10000, // Total records in object
|
|
135
|
+
"sobjectType": "Account"
|
|
136
|
+
}]
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Key Indicators:**
|
|
141
|
+
- `leadingOperationType: "Index"` = Query uses index (good)
|
|
142
|
+
- `leadingOperationType: "TableScan"` = Full table scan (bad for large tables)
|
|
143
|
+
- `relativeCost < 1` = Efficient query
|
|
144
|
+
- `cardinality` = Expected number of results
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Tooling API Queries
|
|
149
|
+
|
|
150
|
+
Query metadata objects:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Query ApexClass
|
|
154
|
+
sf data query \
|
|
155
|
+
--query "SELECT Id, Name, Body FROM ApexClass WHERE Name = 'MyController'" \
|
|
156
|
+
--target-org my-sandbox \
|
|
157
|
+
--use-tooling-api
|
|
158
|
+
|
|
159
|
+
# Query CustomField
|
|
160
|
+
sf data query \
|
|
161
|
+
--query "SELECT Id, DeveloperName, TableEnumOrId FROM CustomField WHERE TableEnumOrId = 'Account'" \
|
|
162
|
+
--target-org my-sandbox \
|
|
163
|
+
--use-tooling-api
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Query from File
|
|
169
|
+
|
|
170
|
+
Store query in file and execute:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# Create query file
|
|
174
|
+
echo "SELECT Id, Name FROM Account WHERE Industry = 'Technology'" > query.soql
|
|
175
|
+
|
|
176
|
+
# Execute from file
|
|
177
|
+
sf data query \
|
|
178
|
+
--file query.soql \
|
|
179
|
+
--target-org my-sandbox
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Useful Patterns
|
|
185
|
+
|
|
186
|
+
### Get Record Count
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
sf data query \
|
|
190
|
+
--query "SELECT COUNT() FROM Account" \
|
|
191
|
+
--target-org my-sandbox
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Export to File
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# CSV export
|
|
198
|
+
sf data query \
|
|
199
|
+
--query "SELECT Id, Name, Industry, Phone FROM Account" \
|
|
200
|
+
--target-org my-sandbox \
|
|
201
|
+
--result-format csv > accounts.csv
|
|
202
|
+
|
|
203
|
+
# JSON export
|
|
204
|
+
sf data query \
|
|
205
|
+
--query "SELECT Id, Name, Industry FROM Account" \
|
|
206
|
+
--target-org my-sandbox \
|
|
207
|
+
--json > accounts.json
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Query with jq Processing
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Get just the names
|
|
214
|
+
sf data query \
|
|
215
|
+
--query "SELECT Name FROM Account LIMIT 10" \
|
|
216
|
+
--target-org my-sandbox \
|
|
217
|
+
--json | jq -r '.result.records[].Name'
|
|
218
|
+
|
|
219
|
+
# Count records
|
|
220
|
+
sf data query \
|
|
221
|
+
--query "SELECT Id FROM Account" \
|
|
222
|
+
--target-org my-sandbox \
|
|
223
|
+
--json | jq '.result.totalSize'
|
|
224
|
+
|
|
225
|
+
# Filter in shell
|
|
226
|
+
sf data query \
|
|
227
|
+
--query "SELECT Id, Name, Industry FROM Account" \
|
|
228
|
+
--target-org my-sandbox \
|
|
229
|
+
--json | jq '.result.records[] | select(.Industry == "Technology")'
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Query with Dates
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# Records created today
|
|
236
|
+
sf data query \
|
|
237
|
+
--query "SELECT Id, Name FROM Account WHERE CreatedDate = TODAY" \
|
|
238
|
+
--target-org my-sandbox
|
|
239
|
+
|
|
240
|
+
# Records from last 30 days
|
|
241
|
+
sf data query \
|
|
242
|
+
--query "SELECT Id, Name FROM Account WHERE CreatedDate = LAST_N_DAYS:30" \
|
|
243
|
+
--target-org my-sandbox
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Aggregate Queries
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# Count by industry
|
|
250
|
+
sf data query \
|
|
251
|
+
--query "SELECT Industry, COUNT(Id) FROM Account GROUP BY Industry" \
|
|
252
|
+
--target-org my-sandbox
|
|
253
|
+
|
|
254
|
+
# Sum of amounts
|
|
255
|
+
sf data query \
|
|
256
|
+
--query "SELECT SUM(Amount) FROM Opportunity WHERE StageName = 'Closed Won'" \
|
|
257
|
+
--target-org my-sandbox
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Troubleshooting
|
|
263
|
+
|
|
264
|
+
### Query Timeout
|
|
265
|
+
|
|
266
|
+
For long-running queries, export via bulk API:
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
sf data export bulk \
|
|
270
|
+
--query "SELECT Id, Name FROM Account" \
|
|
271
|
+
--target-org my-sandbox \
|
|
272
|
+
--output-file results.csv
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Too Many Results
|
|
276
|
+
|
|
277
|
+
Add LIMIT or filter:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
# With limit
|
|
281
|
+
sf data query \
|
|
282
|
+
--query "SELECT Id, Name FROM Account LIMIT 1000" \
|
|
283
|
+
--target-org my-sandbox
|
|
284
|
+
|
|
285
|
+
# With filter
|
|
286
|
+
sf data query \
|
|
287
|
+
--query "SELECT Id, Name FROM Account WHERE CreatedDate = THIS_YEAR" \
|
|
288
|
+
--target-org my-sandbox
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Non-Selective Query Error
|
|
292
|
+
|
|
293
|
+
Add indexed field to WHERE:
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
# Add CreatedDate filter (indexed)
|
|
297
|
+
sf data query \
|
|
298
|
+
--query "SELECT Id FROM Lead WHERE Status = 'Open' AND CreatedDate = LAST_N_DAYS:90" \
|
|
299
|
+
--target-org my-sandbox
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Permission Errors
|
|
303
|
+
|
|
304
|
+
Check field-level security:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# Query accessible fields only
|
|
308
|
+
sf data query \
|
|
309
|
+
--query "SELECT Id, Name FROM Account" \
|
|
310
|
+
--target-org my-sandbox
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Integration with Other Tools
|
|
316
|
+
|
|
317
|
+
### Pipe to File
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
sf data query \
|
|
321
|
+
--query "SELECT Id, Name FROM Account" \
|
|
322
|
+
--target-org my-sandbox \
|
|
323
|
+
--result-format csv | tee accounts.csv
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Use in Scripts
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
#!/bin/bash
|
|
330
|
+
|
|
331
|
+
ORG=${1:-"my-sandbox"}
|
|
332
|
+
|
|
333
|
+
# Get count
|
|
334
|
+
COUNT=$(sf data query \
|
|
335
|
+
--query "SELECT COUNT() FROM Account" \
|
|
336
|
+
--target-org $ORG \
|
|
337
|
+
--json | jq -r '.result.totalSize')
|
|
338
|
+
|
|
339
|
+
echo "Total accounts: $COUNT"
|
|
340
|
+
|
|
341
|
+
# Get top accounts
|
|
342
|
+
sf data query \
|
|
343
|
+
--query "SELECT Name, AnnualRevenue FROM Account ORDER BY AnnualRevenue DESC LIMIT 10" \
|
|
344
|
+
--target-org $ORG
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Compare Orgs
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
#!/bin/bash
|
|
351
|
+
|
|
352
|
+
PROD_COUNT=$(sf data query --query "SELECT COUNT() FROM Account" --target-org prod --json | jq '.result.totalSize')
|
|
353
|
+
SANDBOX_COUNT=$(sf data query --query "SELECT COUNT() FROM Account" --target-org sandbox --json | jq '.result.totalSize')
|
|
354
|
+
|
|
355
|
+
echo "Production accounts: $PROD_COUNT"
|
|
356
|
+
echo "Sandbox accounts: $SANDBOX_COUNT"
|
|
357
|
+
echo "Difference: $((PROD_COUNT - SANDBOX_COUNT))"
|
|
358
|
+
```
|