@salesforce/afv-skills 1.8.0 → 1.9.1
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,153 @@
|
|
|
1
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
-- PARENT-TO-CHILD QUERY (Subquery Pattern)
|
|
3
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
--
|
|
5
|
+
-- Returns parent records with related child records nested in the results.
|
|
6
|
+
-- Child records are returned as a nested list within each parent record.
|
|
7
|
+
--
|
|
8
|
+
-- USE WHEN:
|
|
9
|
+
-- • Starting from the parent object and need child record details
|
|
10
|
+
-- • Need to iterate through parents and their related children
|
|
11
|
+
-- • Building hierarchical data structures
|
|
12
|
+
--
|
|
13
|
+
-- LIMITS:
|
|
14
|
+
-- • Maximum 20 subqueries per query
|
|
15
|
+
-- • Child records limited by inner LIMIT (or 200 if not specified)
|
|
16
|
+
-- • 5 levels of relationship depth
|
|
17
|
+
--
|
|
18
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
19
|
+
|
|
20
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
21
|
+
-- BASIC: Account with Contacts
|
|
22
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
23
|
+
SELECT Id, Name, Industry, AnnualRevenue,
|
|
24
|
+
(SELECT Id, FirstName, LastName, Email, Phone, Title
|
|
25
|
+
FROM Contacts
|
|
26
|
+
ORDER BY LastName ASC
|
|
27
|
+
LIMIT 100)
|
|
28
|
+
FROM Account
|
|
29
|
+
WHERE Industry = 'Technology'
|
|
30
|
+
LIMIT 50
|
|
31
|
+
|
|
32
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
-- MULTIPLE CHILDREN: Account with Contacts AND Opportunities
|
|
34
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
35
|
+
SELECT Id, Name, Industry,
|
|
36
|
+
(SELECT Id, FirstName, LastName, Email
|
|
37
|
+
FROM Contacts
|
|
38
|
+
WHERE Email != null
|
|
39
|
+
LIMIT 50),
|
|
40
|
+
(SELECT Id, Name, StageName, Amount, CloseDate
|
|
41
|
+
FROM Opportunities
|
|
42
|
+
WHERE IsClosed = false
|
|
43
|
+
ORDER BY CloseDate ASC
|
|
44
|
+
LIMIT 50)
|
|
45
|
+
FROM Account
|
|
46
|
+
WHERE Id IN :accountIds
|
|
47
|
+
|
|
48
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
49
|
+
-- FILTERED CHILDREN: Only active/specific child records
|
|
50
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
51
|
+
SELECT Id, Name,
|
|
52
|
+
(SELECT Id, Subject, Status, Priority
|
|
53
|
+
FROM Cases
|
|
54
|
+
WHERE Status != 'Closed'
|
|
55
|
+
AND Priority = 'High'
|
|
56
|
+
ORDER BY CreatedDate DESC
|
|
57
|
+
LIMIT 25)
|
|
58
|
+
FROM Account
|
|
59
|
+
WHERE Type = 'Customer'
|
|
60
|
+
|
|
61
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
62
|
+
-- OPPORTUNITY with Products (OpportunityLineItems)
|
|
63
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
64
|
+
SELECT Id, Name, StageName, Amount, CloseDate,
|
|
65
|
+
Account.Name,
|
|
66
|
+
(SELECT Id, Name, Quantity, UnitPrice, TotalPrice,
|
|
67
|
+
Product2.Name, Product2.ProductCode
|
|
68
|
+
FROM OpportunityLineItems
|
|
69
|
+
ORDER BY TotalPrice DESC)
|
|
70
|
+
FROM Opportunity
|
|
71
|
+
WHERE StageName = 'Closed Won'
|
|
72
|
+
AND CloseDate = THIS_QUARTER
|
|
73
|
+
|
|
74
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
75
|
+
-- CASE with Comments and Attachments
|
|
76
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
77
|
+
SELECT Id, CaseNumber, Subject, Status, Priority,
|
|
78
|
+
Account.Name,
|
|
79
|
+
Contact.Name,
|
|
80
|
+
(SELECT Id, CommentBody, CreatedBy.Name, CreatedDate
|
|
81
|
+
FROM CaseComments
|
|
82
|
+
ORDER BY CreatedDate DESC
|
|
83
|
+
LIMIT 10),
|
|
84
|
+
(SELECT Id, Name, ContentType, BodyLength
|
|
85
|
+
FROM Attachments
|
|
86
|
+
LIMIT 20)
|
|
87
|
+
FROM Case
|
|
88
|
+
WHERE Status != 'Closed'
|
|
89
|
+
ORDER BY Priority DESC, CreatedDate DESC
|
|
90
|
+
|
|
91
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
92
|
+
-- USER with all related activity
|
|
93
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
94
|
+
SELECT Id, Name, Username, IsActive,
|
|
95
|
+
(SELECT Id, Subject, Status, ActivityDate
|
|
96
|
+
FROM TasksOwned
|
|
97
|
+
WHERE Status != 'Completed'
|
|
98
|
+
ORDER BY ActivityDate ASC
|
|
99
|
+
LIMIT 25),
|
|
100
|
+
(SELECT Id, Subject, StartDateTime, EndDateTime
|
|
101
|
+
FROM EventsOwned
|
|
102
|
+
WHERE StartDateTime >= TODAY
|
|
103
|
+
ORDER BY StartDateTime ASC
|
|
104
|
+
LIMIT 25)
|
|
105
|
+
FROM User
|
|
106
|
+
WHERE IsActive = true
|
|
107
|
+
AND Profile.Name = 'Standard User'
|
|
108
|
+
|
|
109
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
110
|
+
-- CUSTOM OBJECT: Parent with Custom Child Objects
|
|
111
|
+
-- Replace {{ParentObject}}, {{ChildRelationshipName}}, {{ChildObject}} with actual names
|
|
112
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
113
|
+
-- SELECT Id, Name, Status__c,
|
|
114
|
+
-- (SELECT Id, Name, Amount__c, Date__c
|
|
115
|
+
-- FROM {{ChildRelationshipName}}__r
|
|
116
|
+
-- WHERE Status__c = 'Active'
|
|
117
|
+
-- ORDER BY Date__c DESC
|
|
118
|
+
-- LIMIT 50)
|
|
119
|
+
-- FROM {{ParentObject}}__c
|
|
120
|
+
-- WHERE OwnerId = :userId
|
|
121
|
+
|
|
122
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
123
|
+
-- APEX PROCESSING PATTERN
|
|
124
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
125
|
+
/*
|
|
126
|
+
// Query with subquery
|
|
127
|
+
List<Account> accounts = [
|
|
128
|
+
SELECT Id, Name,
|
|
129
|
+
(SELECT Id, FirstName, LastName FROM Contacts)
|
|
130
|
+
FROM Account
|
|
131
|
+
WHERE Id IN :accountIds
|
|
132
|
+
];
|
|
133
|
+
|
|
134
|
+
// Process parent and children
|
|
135
|
+
for (Account acc : accounts) {
|
|
136
|
+
System.debug('Account: ' + acc.Name);
|
|
137
|
+
|
|
138
|
+
// Access child records via relationship name
|
|
139
|
+
if (acc.Contacts != null && !acc.Contacts.isEmpty()) {
|
|
140
|
+
for (Contact con : acc.Contacts) {
|
|
141
|
+
System.debug(' Contact: ' + con.FirstName + ' ' + con.LastName);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
148
|
+
-- SF CLI USAGE
|
|
149
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
150
|
+
-- sf data query \
|
|
151
|
+
-- --query "SELECT Id, Name, (SELECT Id, Name FROM Contacts) FROM Account LIMIT 10" \
|
|
152
|
+
-- --target-org myorg \
|
|
153
|
+
-- --json
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
-- POLYMORPHIC RELATIONSHIP QUERIES (TYPEOF Pattern)
|
|
3
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
--
|
|
5
|
+
-- Polymorphic lookups can point to multiple object types.
|
|
6
|
+
-- Use TYPEOF to access object-specific fields based on the actual type.
|
|
7
|
+
--
|
|
8
|
+
-- COMMON POLYMORPHIC FIELDS:
|
|
9
|
+
-- • Who (WhoId) - Task/Event → Contact OR Lead
|
|
10
|
+
-- • What (WhatId) - Task/Event → Account, Opportunity, Case, etc.
|
|
11
|
+
-- • Owner (OwnerId) - Most objects → User OR Queue
|
|
12
|
+
-- • Related (RelatedToId) - Various → Multiple objects
|
|
13
|
+
--
|
|
14
|
+
-- USE WHEN:
|
|
15
|
+
-- • Querying Task, Event, or other objects with polymorphic lookups
|
|
16
|
+
-- • Need type-specific fields from the related record
|
|
17
|
+
-- • Building reports that span multiple related object types
|
|
18
|
+
--
|
|
19
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
20
|
+
|
|
21
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
-- BASIC TYPEOF: Task with Who (Contact vs Lead)
|
|
23
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
24
|
+
SELECT Id, Subject, Status, ActivityDate,
|
|
25
|
+
TYPEOF Who
|
|
26
|
+
WHEN Contact THEN FirstName, LastName, Email, Account.Name
|
|
27
|
+
WHEN Lead THEN FirstName, LastName, Email, Company
|
|
28
|
+
END
|
|
29
|
+
FROM Task
|
|
30
|
+
WHERE Status != 'Completed'
|
|
31
|
+
AND ActivityDate >= TODAY
|
|
32
|
+
|
|
33
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
34
|
+
-- TYPEOF with What (Account, Opportunity, Case)
|
|
35
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
36
|
+
SELECT Id, Subject, Status, Priority,
|
|
37
|
+
TYPEOF What
|
|
38
|
+
WHEN Account THEN Name, Industry, AnnualRevenue, Type
|
|
39
|
+
WHEN Opportunity THEN Name, StageName, Amount, CloseDate
|
|
40
|
+
WHEN Case THEN CaseNumber, Subject, Status, Priority
|
|
41
|
+
END
|
|
42
|
+
FROM Task
|
|
43
|
+
WHERE CreatedDate = THIS_WEEK
|
|
44
|
+
ORDER BY ActivityDate ASC
|
|
45
|
+
|
|
46
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
47
|
+
-- FULL TYPEOF: Both Who and What in same query
|
|
48
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
49
|
+
SELECT Id, Subject, Status, ActivityDate, Priority,
|
|
50
|
+
Owner.Name,
|
|
51
|
+
TYPEOF Who
|
|
52
|
+
WHEN Contact THEN
|
|
53
|
+
FirstName, LastName, Email, Phone,
|
|
54
|
+
Account.Name, Account.Industry
|
|
55
|
+
WHEN Lead THEN
|
|
56
|
+
FirstName, LastName, Email, Company, Status
|
|
57
|
+
END,
|
|
58
|
+
TYPEOF What
|
|
59
|
+
WHEN Account THEN Name, Industry, Type, BillingCity
|
|
60
|
+
WHEN Opportunity THEN Name, StageName, Amount, Probability
|
|
61
|
+
WHEN Case THEN CaseNumber, Subject, Status
|
|
62
|
+
WHEN Campaign THEN Name, Status, Type
|
|
63
|
+
END
|
|
64
|
+
FROM Task
|
|
65
|
+
WHERE OwnerId = :currentUserId
|
|
66
|
+
AND Status = 'Not Started'
|
|
67
|
+
ORDER BY ActivityDate ASC
|
|
68
|
+
LIMIT 100
|
|
69
|
+
|
|
70
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
71
|
+
-- EVENT with polymorphic relationships
|
|
72
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
73
|
+
SELECT Id, Subject, StartDateTime, EndDateTime, Location,
|
|
74
|
+
TYPEOF Who
|
|
75
|
+
WHEN Contact THEN FirstName, LastName, Email, Title
|
|
76
|
+
WHEN Lead THEN FirstName, LastName, Company
|
|
77
|
+
END,
|
|
78
|
+
TYPEOF What
|
|
79
|
+
WHEN Account THEN Name, Phone, Website
|
|
80
|
+
WHEN Opportunity THEN Name, StageName, Amount
|
|
81
|
+
END
|
|
82
|
+
FROM Event
|
|
83
|
+
WHERE StartDateTime >= TODAY
|
|
84
|
+
AND StartDateTime <= NEXT_MONTH
|
|
85
|
+
ORDER BY StartDateTime ASC
|
|
86
|
+
|
|
87
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
88
|
+
-- Using ELSE clause for unhandled types
|
|
89
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
90
|
+
SELECT Id, Subject, Status,
|
|
91
|
+
TYPEOF What
|
|
92
|
+
WHEN Account THEN Name, Industry
|
|
93
|
+
WHEN Opportunity THEN Name, StageName
|
|
94
|
+
WHEN Case THEN CaseNumber
|
|
95
|
+
ELSE Name
|
|
96
|
+
END
|
|
97
|
+
FROM Task
|
|
98
|
+
WHERE ActivityDate = TODAY
|
|
99
|
+
|
|
100
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
101
|
+
-- FeedItem with polymorphic Parent
|
|
102
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
103
|
+
SELECT Id, Body, CreatedDate, CreatedBy.Name,
|
|
104
|
+
TYPEOF Parent
|
|
105
|
+
WHEN Account THEN Name, Industry
|
|
106
|
+
WHEN Opportunity THEN Name, StageName
|
|
107
|
+
WHEN Case THEN CaseNumber, Subject
|
|
108
|
+
WHEN Contact THEN FirstName, LastName
|
|
109
|
+
WHEN Lead THEN FirstName, LastName, Company
|
|
110
|
+
WHEN User THEN Name, Title
|
|
111
|
+
END
|
|
112
|
+
FROM FeedItem
|
|
113
|
+
WHERE CreatedDate = THIS_WEEK
|
|
114
|
+
ORDER BY CreatedDate DESC
|
|
115
|
+
LIMIT 50
|
|
116
|
+
|
|
117
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
118
|
+
-- ContentDocumentLink with polymorphic LinkedEntity
|
|
119
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
120
|
+
SELECT Id, ContentDocument.Title, ContentDocument.FileType,
|
|
121
|
+
TYPEOF LinkedEntity
|
|
122
|
+
WHEN Account THEN Name, Industry
|
|
123
|
+
WHEN Contact THEN FirstName, LastName
|
|
124
|
+
WHEN Opportunity THEN Name, Amount
|
|
125
|
+
WHEN Case THEN CaseNumber, Subject
|
|
126
|
+
END
|
|
127
|
+
FROM ContentDocumentLink
|
|
128
|
+
WHERE ContentDocument.FileType = 'PDF'
|
|
129
|
+
ORDER BY ContentDocument.CreatedDate DESC
|
|
130
|
+
LIMIT 100
|
|
131
|
+
|
|
132
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
133
|
+
-- ALTERNATIVE: Check Type.Name without TYPEOF
|
|
134
|
+
-- Use when you only need to identify the type, not access specific fields
|
|
135
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
136
|
+
SELECT Id, Subject, Status,
|
|
137
|
+
Who.Type,
|
|
138
|
+
Who.Name,
|
|
139
|
+
What.Type,
|
|
140
|
+
What.Name
|
|
141
|
+
FROM Task
|
|
142
|
+
WHERE ActivityDate = TODAY
|
|
143
|
+
|
|
144
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
145
|
+
-- APEX PROCESSING PATTERN
|
|
146
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
147
|
+
/*
|
|
148
|
+
// Query with TYPEOF
|
|
149
|
+
List<Task> tasks = [
|
|
150
|
+
SELECT Id, Subject,
|
|
151
|
+
TYPEOF Who
|
|
152
|
+
WHEN Contact THEN FirstName, LastName, Email
|
|
153
|
+
WHEN Lead THEN FirstName, LastName, Company
|
|
154
|
+
END
|
|
155
|
+
FROM Task
|
|
156
|
+
WHERE ActivityDate = TODAY
|
|
157
|
+
];
|
|
158
|
+
|
|
159
|
+
// Process based on type
|
|
160
|
+
for (Task t : tasks) {
|
|
161
|
+
if (t.WhoId != null) {
|
|
162
|
+
Schema.SObjectType whoType = t.WhoId.getSObjectType();
|
|
163
|
+
|
|
164
|
+
if (whoType == Contact.SObjectType) {
|
|
165
|
+
Contact con = (Contact) t.getSObject('Who');
|
|
166
|
+
System.debug('Contact: ' + con.FirstName + ' ' + con.LastName);
|
|
167
|
+
}
|
|
168
|
+
else if (whoType == Lead.SObjectType) {
|
|
169
|
+
Lead lead = (Lead) t.getSObject('Who');
|
|
170
|
+
System.debug('Lead: ' + lead.FirstName + ' at ' + lead.Company);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
*/
|
|
175
|
+
|
|
176
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
177
|
+
-- APEX ALTERNATIVE: Using instanceof
|
|
178
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
179
|
+
/*
|
|
180
|
+
for (Task t : tasks) {
|
|
181
|
+
SObject who = t.getSObject('Who');
|
|
182
|
+
if (who instanceof Contact) {
|
|
183
|
+
Contact con = (Contact) who;
|
|
184
|
+
System.debug('Contact: ' + con.Email);
|
|
185
|
+
} else if (who instanceof Lead) {
|
|
186
|
+
Lead lead = (Lead) who;
|
|
187
|
+
System.debug('Lead Company: ' + lead.Company);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
193
|
+
-- SF CLI USAGE
|
|
194
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
195
|
+
-- sf data query \
|
|
196
|
+
-- --query "SELECT Id, Subject, TYPEOF Who WHEN Contact THEN FirstName, LastName WHEN Lead THEN Company END FROM Task WHERE ActivityDate = TODAY LIMIT 10" \
|
|
197
|
+
-- --target-org myorg \
|
|
198
|
+
-- --json
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
-- SUBQUERY PATTERNS (Semi-Join & Anti-Join)
|
|
3
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
--
|
|
5
|
+
-- Subqueries filter the outer query based on related records.
|
|
6
|
+
-- Two main patterns: Semi-Join (IN) and Anti-Join (NOT IN).
|
|
7
|
+
--
|
|
8
|
+
-- SEMI-JOIN (IN):
|
|
9
|
+
-- • Returns records that HAVE matching related records
|
|
10
|
+
-- • "Give me Accounts that have Opportunities"
|
|
11
|
+
--
|
|
12
|
+
-- ANTI-JOIN (NOT IN):
|
|
13
|
+
-- • Returns records that DO NOT have matching related records
|
|
14
|
+
-- • "Give me Accounts without any Contacts"
|
|
15
|
+
--
|
|
16
|
+
-- LIMITS:
|
|
17
|
+
-- • Maximum 2 levels of semi-join nesting
|
|
18
|
+
-- • Inner query can only return Id field
|
|
19
|
+
-- • Inner query limited to 50,000 records
|
|
20
|
+
--
|
|
21
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
22
|
+
|
|
23
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
24
|
+
-- SEMI-JOIN PATTERNS (Records WITH related records)
|
|
25
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
26
|
+
|
|
27
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
28
|
+
-- BASIC SEMI-JOIN: Accounts with Opportunities
|
|
29
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
30
|
+
SELECT Id, Name, Industry, Type
|
|
31
|
+
FROM Account
|
|
32
|
+
WHERE Id IN (
|
|
33
|
+
SELECT AccountId
|
|
34
|
+
FROM Opportunity
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
38
|
+
-- FILTERED SEMI-JOIN: Accounts with OPEN Opportunities
|
|
39
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
40
|
+
SELECT Id, Name, Industry, AnnualRevenue
|
|
41
|
+
FROM Account
|
|
42
|
+
WHERE Id IN (
|
|
43
|
+
SELECT AccountId
|
|
44
|
+
FROM Opportunity
|
|
45
|
+
WHERE IsClosed = false
|
|
46
|
+
AND Amount > 50000
|
|
47
|
+
)
|
|
48
|
+
AND Industry = 'Technology'
|
|
49
|
+
|
|
50
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
51
|
+
-- SEMI-JOIN: Accounts with Won Opportunities this year
|
|
52
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
53
|
+
SELECT Id, Name, Type, Owner.Name
|
|
54
|
+
FROM Account
|
|
55
|
+
WHERE Id IN (
|
|
56
|
+
SELECT AccountId
|
|
57
|
+
FROM Opportunity
|
|
58
|
+
WHERE StageName = 'Closed Won'
|
|
59
|
+
AND CloseDate = THIS_YEAR
|
|
60
|
+
)
|
|
61
|
+
ORDER BY Name
|
|
62
|
+
|
|
63
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
64
|
+
-- SEMI-JOIN: Contacts at Accounts with Cases
|
|
65
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
66
|
+
SELECT Id, FirstName, LastName, Email, Account.Name
|
|
67
|
+
FROM Contact
|
|
68
|
+
WHERE AccountId IN (
|
|
69
|
+
SELECT AccountId
|
|
70
|
+
FROM Case
|
|
71
|
+
WHERE Status != 'Closed'
|
|
72
|
+
)
|
|
73
|
+
AND Email != null
|
|
74
|
+
|
|
75
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
76
|
+
-- SEMI-JOIN: Products used in Opportunities
|
|
77
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
78
|
+
SELECT Id, Name, ProductCode, Family
|
|
79
|
+
FROM Product2
|
|
80
|
+
WHERE Id IN (
|
|
81
|
+
SELECT Product2Id
|
|
82
|
+
FROM OpportunityLineItem
|
|
83
|
+
WHERE Opportunity.StageName = 'Closed Won'
|
|
84
|
+
)
|
|
85
|
+
AND IsActive = true
|
|
86
|
+
|
|
87
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
88
|
+
-- ANTI-JOIN PATTERNS (Records WITHOUT related records)
|
|
89
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
90
|
+
|
|
91
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
92
|
+
-- BASIC ANTI-JOIN: Accounts without Contacts
|
|
93
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
94
|
+
SELECT Id, Name, Industry, Type
|
|
95
|
+
FROM Account
|
|
96
|
+
WHERE Id NOT IN (
|
|
97
|
+
SELECT AccountId
|
|
98
|
+
FROM Contact
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
102
|
+
-- ANTI-JOIN: Accounts without Opportunities
|
|
103
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
104
|
+
SELECT Id, Name, Industry, Type, CreatedDate
|
|
105
|
+
FROM Account
|
|
106
|
+
WHERE Id NOT IN (
|
|
107
|
+
SELECT AccountId
|
|
108
|
+
FROM Opportunity
|
|
109
|
+
)
|
|
110
|
+
AND Type = 'Prospect'
|
|
111
|
+
AND CreatedDate < LAST_90_DAYS
|
|
112
|
+
|
|
113
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
114
|
+
-- ANTI-JOIN: Contacts without Activities (no Tasks)
|
|
115
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
116
|
+
SELECT Id, FirstName, LastName, Email, Account.Name
|
|
117
|
+
FROM Contact
|
|
118
|
+
WHERE Id NOT IN (
|
|
119
|
+
SELECT WhoId
|
|
120
|
+
FROM Task
|
|
121
|
+
WHERE WhoId != null
|
|
122
|
+
)
|
|
123
|
+
AND Email != null
|
|
124
|
+
|
|
125
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
126
|
+
-- ANTI-JOIN: Leads not converted
|
|
127
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
128
|
+
SELECT Id, FirstName, LastName, Company, Status
|
|
129
|
+
FROM Lead
|
|
130
|
+
WHERE IsConverted = false
|
|
131
|
+
AND Id NOT IN (
|
|
132
|
+
SELECT WhoId
|
|
133
|
+
FROM Task
|
|
134
|
+
WHERE CreatedDate = LAST_30_DAYS
|
|
135
|
+
)
|
|
136
|
+
AND Status = 'Open - Not Contacted'
|
|
137
|
+
|
|
138
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
139
|
+
-- ANTI-JOIN: Products not sold
|
|
140
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
141
|
+
SELECT Id, Name, ProductCode, Family
|
|
142
|
+
FROM Product2
|
|
143
|
+
WHERE Id NOT IN (
|
|
144
|
+
SELECT Product2Id
|
|
145
|
+
FROM OpportunityLineItem
|
|
146
|
+
)
|
|
147
|
+
AND IsActive = true
|
|
148
|
+
|
|
149
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
150
|
+
-- COMBINED PATTERNS
|
|
151
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
152
|
+
|
|
153
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
154
|
+
-- BOTH: Accounts with Contacts but no Opportunities
|
|
155
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
156
|
+
SELECT Id, Name, Industry
|
|
157
|
+
FROM Account
|
|
158
|
+
WHERE Id IN (
|
|
159
|
+
SELECT AccountId
|
|
160
|
+
FROM Contact
|
|
161
|
+
)
|
|
162
|
+
AND Id NOT IN (
|
|
163
|
+
SELECT AccountId
|
|
164
|
+
FROM Opportunity
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
168
|
+
-- COMPLEX: Accounts with Open Cases but no recent Activity
|
|
169
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
170
|
+
SELECT Id, Name, Type, Owner.Name
|
|
171
|
+
FROM Account
|
|
172
|
+
WHERE Id IN (
|
|
173
|
+
SELECT AccountId
|
|
174
|
+
FROM Case
|
|
175
|
+
WHERE Status != 'Closed'
|
|
176
|
+
AND Priority = 'High'
|
|
177
|
+
)
|
|
178
|
+
AND Id NOT IN (
|
|
179
|
+
SELECT WhatId
|
|
180
|
+
FROM Task
|
|
181
|
+
WHERE ActivityDate >= LAST_7_DAYS
|
|
182
|
+
AND WhatId != null
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
186
|
+
-- MULTI-CONDITION: Active customers needing attention
|
|
187
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
188
|
+
SELECT Id, Name, Industry, LastActivityDate
|
|
189
|
+
FROM Account
|
|
190
|
+
WHERE Type = 'Customer'
|
|
191
|
+
AND Id IN (
|
|
192
|
+
SELECT AccountId
|
|
193
|
+
FROM Opportunity
|
|
194
|
+
WHERE StageName = 'Closed Won'
|
|
195
|
+
AND CloseDate >= LAST_YEAR
|
|
196
|
+
)
|
|
197
|
+
AND Id NOT IN (
|
|
198
|
+
SELECT WhatId
|
|
199
|
+
FROM Task
|
|
200
|
+
WHERE CreatedDate >= LAST_30_DAYS
|
|
201
|
+
AND WhatId != null
|
|
202
|
+
)
|
|
203
|
+
ORDER BY LastActivityDate ASC NULLS FIRST
|
|
204
|
+
LIMIT 50
|
|
205
|
+
|
|
206
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
207
|
+
-- NESTED SUBQUERIES (Maximum 2 levels)
|
|
208
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
209
|
+
|
|
210
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
211
|
+
-- NESTED: Contacts at Accounts with Won Enterprise Opportunities
|
|
212
|
+
-- ───────────────────────────────────────────────────────────────────────────────
|
|
213
|
+
SELECT Id, FirstName, LastName, Email
|
|
214
|
+
FROM Contact
|
|
215
|
+
WHERE AccountId IN (
|
|
216
|
+
SELECT AccountId
|
|
217
|
+
FROM Opportunity
|
|
218
|
+
WHERE StageName = 'Closed Won'
|
|
219
|
+
AND Amount >= 100000
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
223
|
+
-- ALTERNATIVE: EXISTS-style pattern using relationship
|
|
224
|
+
-- When you need to check existence with complex conditions
|
|
225
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
226
|
+
|
|
227
|
+
-- Instead of subquery, sometimes a relationship query is clearer:
|
|
228
|
+
-- "Accounts that have at least one high-value Opportunity"
|
|
229
|
+
|
|
230
|
+
-- Using parent-to-child to verify related records exist:
|
|
231
|
+
SELECT Id, Name,
|
|
232
|
+
(SELECT Id FROM Opportunities WHERE Amount > 100000 LIMIT 1)
|
|
233
|
+
FROM Account
|
|
234
|
+
WHERE Industry = 'Technology'
|
|
235
|
+
|
|
236
|
+
-- Then filter in Apex for accounts that have the nested result
|
|
237
|
+
|
|
238
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
239
|
+
-- APEX PROCESSING PATTERN
|
|
240
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
241
|
+
/*
|
|
242
|
+
// Semi-join: Accounts with open high-value opportunities
|
|
243
|
+
List<Account> accountsWithOpps = [
|
|
244
|
+
SELECT Id, Name, Industry
|
|
245
|
+
FROM Account
|
|
246
|
+
WHERE Id IN (
|
|
247
|
+
SELECT AccountId
|
|
248
|
+
FROM Opportunity
|
|
249
|
+
WHERE IsClosed = false
|
|
250
|
+
AND Amount > 100000
|
|
251
|
+
)
|
|
252
|
+
];
|
|
253
|
+
|
|
254
|
+
System.debug('Accounts with high-value pipeline: ' + accountsWithOpps.size());
|
|
255
|
+
|
|
256
|
+
// Anti-join: Accounts needing outreach
|
|
257
|
+
List<Account> neglectedAccounts = [
|
|
258
|
+
SELECT Id, Name, Type, LastActivityDate
|
|
259
|
+
FROM Account
|
|
260
|
+
WHERE Type = 'Customer'
|
|
261
|
+
AND Id NOT IN (
|
|
262
|
+
SELECT WhatId
|
|
263
|
+
FROM Task
|
|
264
|
+
WHERE CreatedDate >= LAST_30_DAYS
|
|
265
|
+
AND WhatId != null
|
|
266
|
+
)
|
|
267
|
+
ORDER BY LastActivityDate ASC NULLS FIRST
|
|
268
|
+
LIMIT 100
|
|
269
|
+
];
|
|
270
|
+
|
|
271
|
+
System.debug('Accounts needing outreach: ' + neglectedAccounts.size());
|
|
272
|
+
*/
|
|
273
|
+
|
|
274
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
275
|
+
-- SF CLI USAGE
|
|
276
|
+
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
277
|
+
-- Semi-join:
|
|
278
|
+
-- sf data query \
|
|
279
|
+
-- --query "SELECT Id, Name FROM Account WHERE Id IN (SELECT AccountId FROM Opportunity WHERE StageName = 'Closed Won') LIMIT 20" \
|
|
280
|
+
-- --target-org myorg \
|
|
281
|
+
-- --json
|
|
282
|
+
--
|
|
283
|
+
-- Anti-join:
|
|
284
|
+
-- sf data query \
|
|
285
|
+
-- --query "SELECT Id, Name FROM Account WHERE Id NOT IN (SELECT AccountId FROM Contact) LIMIT 20" \
|
|
286
|
+
-- --target-org myorg \
|
|
287
|
+
-- --json
|