@salesforce/afv-skills 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/CREDITS.md +5 -0
  3. package/skills/activating-datacloud/README.md +39 -0
  4. package/skills/activating-datacloud/SKILL.md +118 -0
  5. package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
  6. package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
  7. package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
  8. package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
  9. package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
  10. package/skills/building-omnistudio-callable-apex/README.md +80 -0
  11. package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
  12. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
  13. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
  14. package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
  15. package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
  16. package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
  17. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
  18. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
  19. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
  20. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
  21. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
  22. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
  23. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
  24. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
  25. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
  26. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
  27. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
  28. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
  29. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
  30. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
  31. package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
  32. package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
  33. package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
  34. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
  35. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
  36. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
  37. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
  38. package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
  39. package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
  40. package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
  41. package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
  42. package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
  43. package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
  44. package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
  45. package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
  46. package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
  47. package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
  48. package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
  49. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
  50. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
  51. package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
  52. package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
  53. package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
  54. package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
  55. package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
  56. package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
  57. package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
  58. package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
  59. package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
  60. package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
  61. package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
  62. package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
  63. package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
  64. package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
  65. package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
  66. package/skills/building-sf-integrations/CREDITS.md +5 -0
  67. package/skills/building-sf-integrations/README.md +95 -0
  68. package/skills/building-sf-integrations/SKILL.md +192 -0
  69. package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
  70. package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
  71. package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
  72. package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
  73. package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
  74. package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
  75. package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
  76. package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
  77. package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
  78. package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
  79. package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
  80. package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
  81. package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
  82. package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
  83. package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
  84. package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
  85. package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
  86. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
  87. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
  88. package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
  89. package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
  90. package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
  91. package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
  92. package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
  93. package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
  94. package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
  95. package/skills/building-sf-integrations/references/cli-reference.md +94 -0
  96. package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
  97. package/skills/building-sf-integrations/references/event-patterns.md +838 -0
  98. package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
  99. package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
  100. package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
  101. package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
  102. package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
  103. package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
  104. package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
  105. package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
  106. package/skills/building-sf-integrations/scripts/README.md +100 -0
  107. package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
  108. package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
  109. package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
  110. package/skills/configuring-connected-apps/CREDITS.md +3 -0
  111. package/skills/configuring-connected-apps/README.md +99 -0
  112. package/skills/configuring-connected-apps/SKILL.md +224 -0
  113. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
  114. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
  115. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
  116. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
  117. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
  118. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
  119. package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
  120. package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
  121. package/skills/configuring-connected-apps/references/example-usage.md +256 -0
  122. package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
  123. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
  124. package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
  125. package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
  126. package/skills/connecting-datacloud/CREDITS.md +5 -0
  127. package/skills/connecting-datacloud/README.md +59 -0
  128. package/skills/connecting-datacloud/SKILL.md +155 -0
  129. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
  130. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
  131. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
  132. package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
  133. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
  134. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
  135. package/skills/debugging-apex-logs/CREDITS.md +22 -0
  136. package/skills/debugging-apex-logs/README.md +74 -0
  137. package/skills/debugging-apex-logs/SKILL.md +172 -0
  138. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
  139. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
  140. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
  141. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
  142. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
  143. package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
  144. package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
  145. package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
  146. package/skills/debugging-apex-logs/references/common-issues.md +68 -0
  147. package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
  148. package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
  149. package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
  150. package/skills/deploying-metadata/CREDITS.md +25 -0
  151. package/skills/deploying-metadata/README.md +104 -0
  152. package/skills/deploying-metadata/SKILL.md +214 -0
  153. package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
  154. package/skills/deploying-metadata/assets/package.xml +121 -0
  155. package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
  156. package/skills/deploying-metadata/references/deploy.sh +73 -0
  157. package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
  158. package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
  159. package/skills/deploying-metadata/references/orchestration.md +183 -0
  160. package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
  161. package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
  162. package/skills/deploying-omnistudio-datapacks/README.md +88 -0
  163. package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
  164. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
  165. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
  166. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
  167. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
  168. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
  169. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
  170. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
  171. package/skills/developing-agentforce/references/actions-reference.md +8 -8
  172. package/skills/fetching-salesforce-docs/README.md +66 -0
  173. package/skills/fetching-salesforce-docs/SKILL.md +209 -0
  174. package/skills/fetching-salesforce-docs/requirements.txt +2 -0
  175. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
  176. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
  177. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
  178. package/skills/generating-apex/CREDITS.md +1 -26
  179. package/skills/generating-apex-test/CREDITS.md +2 -27
  180. package/skills/generating-lwc-components/CREDITS.md +5 -0
  181. package/skills/generating-lwc-components/README.md +126 -0
  182. package/skills/generating-lwc-components/SKILL.md +191 -0
  183. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
  184. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
  185. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
  186. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
  187. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
  188. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
  189. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
  190. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
  191. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
  192. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
  193. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
  194. package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
  195. package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
  196. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
  197. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
  198. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
  199. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
  200. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
  201. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
  202. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
  203. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
  204. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
  205. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
  206. package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
  207. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
  208. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
  209. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
  210. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
  211. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
  212. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
  213. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
  214. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
  215. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
  216. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
  217. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
  218. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
  219. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
  220. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
  221. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
  222. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
  223. package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
  224. package/skills/generating-lwc-components/references/advanced-features.md +108 -0
  225. package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
  226. package/skills/generating-lwc-components/references/cli-commands.md +545 -0
  227. package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
  228. package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
  229. package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
  230. package/skills/generating-lwc-components/references/lms-guide.md +860 -0
  231. package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
  232. package/skills/generating-lwc-components/references/performance-guide.md +861 -0
  233. package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
  234. package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
  235. package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
  236. package/skills/generating-lwc-components/references/state-management.md +642 -0
  237. package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
  238. package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
  239. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
  240. package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
  241. package/skills/generating-mermaid-diagrams/README.md +114 -0
  242. package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
  243. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
  244. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
  245. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
  246. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
  247. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
  248. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
  249. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
  250. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
  251. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
  252. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
  253. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
  254. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
  255. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
  256. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
  257. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
  258. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
  259. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
  260. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
  261. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
  262. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
  263. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
  264. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
  265. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
  266. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
  267. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
  268. package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
  269. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
  270. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
  271. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
  272. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
  273. package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
  274. package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
  275. package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
  276. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
  277. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
  278. package/skills/generating-visual-diagrams/CREDITS.md +80 -0
  279. package/skills/generating-visual-diagrams/README.md +83 -0
  280. package/skills/generating-visual-diagrams/SKILL.md +208 -0
  281. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
  282. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
  283. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
  284. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
  285. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
  286. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
  287. package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
  288. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
  289. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
  290. package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
  291. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
  292. package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
  293. package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
  294. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
  295. package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
  296. package/skills/handling-sf-data/CREDITS.md +5 -0
  297. package/skills/handling-sf-data/README.md +112 -0
  298. package/skills/handling-sf-data/SKILL.md +235 -0
  299. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
  300. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
  301. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
  302. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
  303. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
  304. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
  305. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
  306. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
  307. package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
  308. package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
  309. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
  310. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
  311. package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
  312. package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
  313. package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
  314. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
  315. package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
  316. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
  317. package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
  318. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
  319. package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
  320. package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
  321. package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
  322. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
  323. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
  324. package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
  325. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
  326. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
  327. package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
  328. package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
  329. package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
  330. package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
  331. package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
  332. package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
  333. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
  334. package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
  335. package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
  336. package/skills/handling-sf-data/references/orchestration.md +174 -0
  337. package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
  338. package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
  339. package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
  340. package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
  341. package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
  342. package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
  343. package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
  344. package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
  345. package/skills/harmonizing-datacloud/CREDITS.md +3 -0
  346. package/skills/harmonizing-datacloud/README.md +31 -0
  347. package/skills/harmonizing-datacloud/SKILL.md +117 -0
  348. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
  349. package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
  350. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
  351. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
  352. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
  353. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
  354. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
  355. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
  356. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
  357. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
  358. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
  359. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
  360. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
  361. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
  362. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
  363. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
  364. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
  365. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
  366. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
  367. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
  368. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
  369. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
  370. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
  371. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
  372. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
  373. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
  374. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
  375. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
  376. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
  377. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
  378. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
  379. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
  380. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
  381. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
  382. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
  383. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
  384. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
  385. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
  386. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
  387. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
  388. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
  389. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
  390. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
  391. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
  392. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
  393. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
  394. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
  395. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
  396. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
  397. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
  398. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
  399. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
  400. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
  401. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
  402. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
  403. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
  404. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
  405. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
  406. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
  407. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
  408. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
  409. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
  410. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
  411. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
  412. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
  413. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
  414. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
  415. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
  416. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
  417. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
  418. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
  419. package/skills/orchestrating-datacloud/CREDITS.md +15 -0
  420. package/skills/orchestrating-datacloud/README.md +129 -0
  421. package/skills/orchestrating-datacloud/SKILL.md +236 -0
  422. package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
  423. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
  424. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
  425. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
  426. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
  427. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
  428. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
  429. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
  430. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
  431. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
  432. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
  433. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
  434. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
  435. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
  436. package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
  437. package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
  438. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
  439. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
  440. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
  441. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
  442. package/skills/preparing-datacloud/CREDITS.md +7 -0
  443. package/skills/preparing-datacloud/README.md +51 -0
  444. package/skills/preparing-datacloud/SKILL.md +191 -0
  445. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
  446. package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
  447. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
  448. package/skills/querying-soql/CREDITS.md +21 -0
  449. package/skills/querying-soql/README.md +41 -0
  450. package/skills/querying-soql/SKILL.md +143 -0
  451. package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
  452. package/skills/querying-soql/assets/basic-queries.soql +188 -0
  453. package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
  454. package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
  455. package/skills/querying-soql/assets/relationship-queries.soql +203 -0
  456. package/skills/querying-soql/assets/selector-class.cls +219 -0
  457. package/skills/querying-soql/references/anti-patterns.md +348 -0
  458. package/skills/querying-soql/references/cli-commands.md +358 -0
  459. package/skills/querying-soql/references/field-coverage-rules.md +514 -0
  460. package/skills/querying-soql/references/query-optimization.md +142 -0
  461. package/skills/querying-soql/references/selector-patterns.md +479 -0
  462. package/skills/querying-soql/references/soql-reference.md +227 -0
  463. package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
  464. package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
  465. package/skills/retrieving-datacloud/CREDITS.md +7 -0
  466. package/skills/retrieving-datacloud/README.md +44 -0
  467. package/skills/retrieving-datacloud/SKILL.md +120 -0
  468. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
  469. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
  470. package/skills/running-apex-tests/CREDITS.md +22 -0
  471. package/skills/running-apex-tests/README.md +94 -0
  472. package/skills/running-apex-tests/SKILL.md +158 -0
  473. package/skills/running-apex-tests/assets/basic-test.cls +169 -0
  474. package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
  475. package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
  476. package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
  477. package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
  478. package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
  479. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
  480. package/skills/running-apex-tests/references/cli-commands.md +289 -0
  481. package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
  482. package/skills/running-apex-tests/references/performance-optimization.md +283 -0
  483. package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
  484. package/skills/running-apex-tests/references/test-patterns.md +154 -0
  485. package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
  486. package/skills/segmenting-datacloud/CREDITS.md +3 -0
  487. package/skills/segmenting-datacloud/README.md +36 -0
  488. package/skills/segmenting-datacloud/SKILL.md +115 -0
@@ -0,0 +1,71 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Named Credential Template: Custom Authentication (API Key / Basic Auth)
4
+
5
+ Use Case: Simple APIs with API key or username/password
6
+ - Internal APIs
7
+ - Legacy systems
8
+ - APIs with simple authentication
9
+ - Development/testing environments
10
+
11
+ Authentication Types:
12
+ - Basic Auth: Username + Password in Authorization header
13
+ - API Key: Custom header with API key value
14
+
15
+ Setup Steps:
16
+ 1. Replace all {{placeholder}} values
17
+ 2. Deploy to org
18
+ 3. Enter credentials via Setup → Named Credentials UI
19
+
20
+ File Location: force-app/main/default/namedCredentials/{{CredentialName}}.namedCredential-meta.xml
21
+ -->
22
+ <NamedCredential xmlns="http://soap.sforce.com/2006/04/metadata">
23
+ <fullName>{{CredentialName}}</fullName>
24
+ <label>{{CredentialLabel}}</label>
25
+
26
+ <!-- Base URL for the external service -->
27
+ <endpoint>{{BaseEndpoint}}</endpoint>
28
+
29
+ <!--
30
+ Authentication Configuration
31
+
32
+ For Basic Auth:
33
+ - principalType: NamedUser
34
+ - protocol: Password
35
+ - generateAuthorizationHeader: true
36
+
37
+ For API Key (via custom header):
38
+ - principalType: Anonymous
39
+ - protocol: NoAuthentication
40
+ - Use calloutOptions or Apex to add header
41
+ -->
42
+ <principalType>NamedUser</principalType>
43
+ <protocol>Password</protocol>
44
+
45
+ <!--
46
+ Username for Basic Auth
47
+ Password is entered via UI after deployment (NOT stored in metadata)
48
+ -->
49
+ <username>{{Username}}</username>
50
+
51
+ <!-- Request Options -->
52
+ <generateAuthorizationHeader>true</generateAuthorizationHeader>
53
+ <allowMergeFieldsInBody>true</allowMergeFieldsInBody>
54
+ <allowMergeFieldsInHeader>true</allowMergeFieldsInHeader>
55
+
56
+ <!--
57
+ SECURITY WARNING:
58
+ - Password is stored securely by Salesforce, NOT in this file
59
+ - After deployment, configure password via:
60
+ Setup → Named Credentials → Edit → Enter Password
61
+ - Never commit passwords to source control
62
+
63
+ For API Key pattern (in Apex):
64
+
65
+ HttpRequest req = new HttpRequest();
66
+ req.setEndpoint('callout:{{CredentialName}}/endpoint');
67
+ req.setHeader('X-API-Key', '{!$Credential.Password}');
68
+
69
+ Or use External Credentials (API 61+) with Custom headers for cleaner API key handling.
70
+ -->
71
+ </NamedCredential>
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Named Credential Template: OAuth 2.0 Client Credentials Flow
4
+
5
+ Use Case: Server-to-server integration without user context
6
+ - Machine-to-machine authentication
7
+ - Backend service integrations
8
+ - Scheduled jobs calling external APIs
9
+
10
+ Setup Steps:
11
+ 1. Replace all {{placeholder}} values
12
+ 2. Create corresponding Auth Provider if using OAuth
13
+ 3. Deploy to org
14
+ 4. Store client credentials in Setup → Named Credentials
15
+
16
+ File Location: force-app/main/default/namedCredentials/{{CredentialName}}.namedCredential-meta.xml
17
+ -->
18
+ <NamedCredential xmlns="http://soap.sforce.com/2006/04/metadata">
19
+ <fullName>{{CredentialName}}</fullName>
20
+ <label>{{CredentialLabel}}</label>
21
+
22
+ <!-- Base URL for the external service (without trailing slash) -->
23
+ <endpoint>{{BaseEndpoint}}</endpoint>
24
+
25
+ <!-- Authentication Configuration -->
26
+ <principalType>NamedUser</principalType>
27
+ <protocol>Oauth</protocol>
28
+
29
+ <!-- OAuth Settings -->
30
+ <!-- Token endpoint where Salesforce requests access tokens -->
31
+ <oauthTokenEndpoint>{{TokenEndpoint}}</oauthTokenEndpoint>
32
+
33
+ <!-- Space-separated OAuth scopes (e.g., "read write") -->
34
+ <oauthScope>{{Scopes}}</oauthScope>
35
+
36
+ <!-- Auth Provider reference (create this first in Setup → Auth Providers) -->
37
+ <!-- <authProvider>{{AuthProviderName}}</authProvider> -->
38
+
39
+ <!-- Request Options -->
40
+ <generateAuthorizationHeader>true</generateAuthorizationHeader>
41
+ <allowMergeFieldsInBody>true</allowMergeFieldsInBody>
42
+ <allowMergeFieldsInHeader>true</allowMergeFieldsInHeader>
43
+
44
+ <!--
45
+ Client ID and Secret are stored via UI, NOT in metadata for security.
46
+ After deployment:
47
+ 1. Go to Setup → Named Credentials
48
+ 2. Edit the credential
49
+ 3. Enter Client ID and Client Secret
50
+ -->
51
+ </NamedCredential>
@@ -0,0 +1,67 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Named Credential Template: OAuth 2.0 JWT Bearer Flow
4
+
5
+ Use Case: Server-to-server with certificate-based authentication
6
+ - CI/CD pipelines
7
+ - Backend service integrations
8
+ - Automated jobs requiring strong authentication
9
+
10
+ Prerequisites:
11
+ 1. Create certificate in Setup → Certificate and Key Management
12
+ 2. Create Connected App with JWT Bearer enabled
13
+ 3. Upload public certificate to external system
14
+ 4. Pre-authorize Connected App for users
15
+
16
+ Setup Steps:
17
+ 1. Replace all {{placeholder}} values
18
+ 2. Ensure certificate is uploaded
19
+ 3. Configure Connected App for JWT
20
+ 4. Deploy to org
21
+
22
+ File Location: force-app/main/default/namedCredentials/{{CredentialName}}.namedCredential-meta.xml
23
+ -->
24
+ <NamedCredential xmlns="http://soap.sforce.com/2006/04/metadata">
25
+ <fullName>{{CredentialName}}</fullName>
26
+ <label>{{CredentialLabel}}</label>
27
+
28
+ <!-- Base URL for the external service -->
29
+ <endpoint>{{BaseEndpoint}}</endpoint>
30
+
31
+ <!-- Authentication Configuration -->
32
+ <principalType>NamedUser</principalType>
33
+ <protocol>Oauth</protocol>
34
+
35
+ <!-- JWT Bearer Settings -->
36
+ <oauthTokenEndpoint>{{TokenEndpoint}}</oauthTokenEndpoint>
37
+ <oauthScope>{{Scopes}}</oauthScope>
38
+
39
+ <!--
40
+ Certificate for signing JWT assertions
41
+ Must exist in Setup → Certificate and Key Management
42
+ -->
43
+ <certificate>{{CertificateName}}</certificate>
44
+
45
+ <!-- Auth Provider (configure for JWT Bearer) -->
46
+ <!-- <authProvider>{{AuthProviderName}}</authProvider> -->
47
+
48
+ <!-- Request Options -->
49
+ <generateAuthorizationHeader>true</generateAuthorizationHeader>
50
+ <allowMergeFieldsInBody>true</allowMergeFieldsInBody>
51
+ <allowMergeFieldsInHeader>true</allowMergeFieldsInHeader>
52
+
53
+ <!--
54
+ JWT Bearer Flow Details:
55
+ 1. Salesforce creates JWT assertion signed with certificate
56
+ 2. JWT is sent to token endpoint
57
+ 3. External system validates signature
58
+ 4. Access token returned
59
+ 5. Access token used for API calls
60
+
61
+ JWT Claims (automatically generated):
62
+ - iss: Client ID
63
+ - sub: Username (for SF-to-SF) or service account
64
+ - aud: Token endpoint
65
+ - exp: Expiration timestamp
66
+ -->
67
+ </NamedCredential>
@@ -0,0 +1,191 @@
1
+ /**
2
+ * @description Platform Event Publisher for {{EventName}}__e
3
+ *
4
+ * Use Case: Publish events from Apex
5
+ * - Trigger-based event publishing
6
+ * - Service layer event notifications
7
+ * - Batch job completion events
8
+ *
9
+ * Features:
10
+ * - Single and bulk event publishing
11
+ * - Error handling and logging
12
+ * - Partial success handling for bulk publishes
13
+ *
14
+ * @author {{Author}}
15
+ * @date {{Date}}
16
+ */
17
+ public with sharing class {{EventName}}Publisher {
18
+
19
+ /**
20
+ * @description Publish a single event
21
+ * @param recordId ID of the triggering record
22
+ * @param operation Operation type (CREATE, UPDATE, DELETE)
23
+ * @param payload JSON payload data
24
+ * @throws EventPublishException if publish fails
25
+ */
26
+ public static void publishEvent(Id recordId, String operation, Map<String, Object> payload) {
27
+ {{EventName}}__e event = new {{EventName}}__e();
28
+ event.Record_Id__c = recordId;
29
+ event.Operation__c = operation;
30
+ event.Payload__c = JSON.serialize(payload);
31
+ event.Correlation_Id__c = generateCorrelationId();
32
+ event.Event_Timestamp__c = Datetime.now();
33
+
34
+ Database.SaveResult result = EventBus.publish(event);
35
+
36
+ if (!result.isSuccess()) {
37
+ String errorMessage = getErrorMessage(result);
38
+ System.debug(LoggingLevel.ERROR, 'Event publish failed: ' + errorMessage);
39
+ throw new EventPublishException('Failed to publish event: ' + errorMessage);
40
+ }
41
+
42
+ System.debug(LoggingLevel.DEBUG, 'Event published successfully. Correlation ID: ' + event.Correlation_Id__c);
43
+ }
44
+
45
+ /**
46
+ * @description Publish multiple events in bulk
47
+ * @param events List of events to publish
48
+ * @return List of publish results
49
+ */
50
+ public static List<PublishResult> publishEvents(List<{{EventName}}__e> events) {
51
+ if (events == null || events.isEmpty()) {
52
+ return new List<PublishResult>();
53
+ }
54
+
55
+ // Ensure correlation IDs and timestamps
56
+ for ({{EventName}}__e event : events) {
57
+ if (String.isBlank(event.Correlation_Id__c)) {
58
+ event.Correlation_Id__c = generateCorrelationId();
59
+ }
60
+ if (event.Event_Timestamp__c == null) {
61
+ event.Event_Timestamp__c = Datetime.now();
62
+ }
63
+ }
64
+
65
+ List<Database.SaveResult> results = EventBus.publish(events);
66
+
67
+ List<PublishResult> publishResults = new List<PublishResult>();
68
+ for (Integer i = 0; i < results.size(); i++) {
69
+ Database.SaveResult sr = results[i];
70
+ {{EventName}}__e event = events[i];
71
+
72
+ PublishResult pr = new PublishResult();
73
+ pr.correlationId = event.Correlation_Id__c;
74
+ pr.success = sr.isSuccess();
75
+
76
+ if (!sr.isSuccess()) {
77
+ pr.errorMessage = getErrorMessage(sr);
78
+ System.debug(LoggingLevel.ERROR,
79
+ 'Event publish failed for correlation ' + pr.correlationId + ': ' + pr.errorMessage);
80
+ }
81
+
82
+ publishResults.add(pr);
83
+ }
84
+
85
+ return publishResults;
86
+ }
87
+
88
+ /**
89
+ * @description Publish events for record changes (use in triggers)
90
+ * @param records Changed records
91
+ * @param operation Operation type
92
+ */
93
+ public static void publishForRecords(List<SObject> records, String operation) {
94
+ if (records == null || records.isEmpty()) {
95
+ return;
96
+ }
97
+
98
+ List<{{EventName}}__e> events = new List<{{EventName}}__e>();
99
+
100
+ for (SObject record : records) {
101
+ {{EventName}}__e event = new {{EventName}}__e();
102
+ event.Record_Id__c = record.Id;
103
+ event.Operation__c = operation;
104
+ event.Payload__c = JSON.serialize(record);
105
+ event.Correlation_Id__c = generateCorrelationId();
106
+ event.Event_Timestamp__c = Datetime.now();
107
+ events.add(event);
108
+ }
109
+
110
+ List<PublishResult> results = publishEvents(events);
111
+
112
+ // Log any failures
113
+ for (PublishResult pr : results) {
114
+ if (!pr.success) {
115
+ System.debug(LoggingLevel.ERROR, 'Publish failed: ' + pr.errorMessage);
116
+ }
117
+ }
118
+ }
119
+
120
+ /**
121
+ * @description Create event from Map (flexible payload)
122
+ * @param eventData Map containing event fields
123
+ * @return Constructed event
124
+ */
125
+ public static {{EventName}}__e createEvent(Map<String, Object> eventData) {
126
+ {{EventName}}__e event = new {{EventName}}__e();
127
+
128
+ if (eventData.containsKey('recordId')) {
129
+ event.Record_Id__c = (String) eventData.get('recordId');
130
+ }
131
+ if (eventData.containsKey('operation')) {
132
+ event.Operation__c = (String) eventData.get('operation');
133
+ }
134
+ if (eventData.containsKey('payload')) {
135
+ Object payload = eventData.get('payload');
136
+ event.Payload__c = payload instanceof String
137
+ ? (String) payload
138
+ : JSON.serialize(payload);
139
+ }
140
+ if (eventData.containsKey('correlationId')) {
141
+ event.Correlation_Id__c = (String) eventData.get('correlationId');
142
+ } else {
143
+ event.Correlation_Id__c = generateCorrelationId();
144
+ }
145
+
146
+ event.Event_Timestamp__c = Datetime.now();
147
+
148
+ return event;
149
+ }
150
+
151
+ /**
152
+ * @description Generate unique correlation ID
153
+ * @return UUID-like correlation ID
154
+ */
155
+ private static String generateCorrelationId() {
156
+ Blob b = Crypto.generateAesKey(128);
157
+ String h = EncodingUtil.convertToHex(b);
158
+ return h.substring(0, 8) + '-' +
159
+ h.substring(8, 12) + '-' +
160
+ h.substring(12, 16) + '-' +
161
+ h.substring(16, 20) + '-' +
162
+ h.substring(20);
163
+ }
164
+
165
+ /**
166
+ * @description Extract error message from SaveResult
167
+ * @param result Database.SaveResult
168
+ * @return Error message string
169
+ */
170
+ private static String getErrorMessage(Database.SaveResult result) {
171
+ List<String> messages = new List<String>();
172
+ for (Database.Error err : result.getErrors()) {
173
+ messages.add(err.getStatusCode() + ': ' + err.getMessage());
174
+ }
175
+ return String.join(messages, '; ');
176
+ }
177
+
178
+ /**
179
+ * @description Result wrapper for bulk publish operations
180
+ */
181
+ public class PublishResult {
182
+ public String correlationId;
183
+ public Boolean success;
184
+ public String errorMessage;
185
+ }
186
+
187
+ /**
188
+ * @description Exception for event publish failures
189
+ */
190
+ public class EventPublishException extends Exception {}
191
+ }
@@ -0,0 +1,295 @@
1
+ /**
2
+ * @description Platform Event Handler/Action Class for {{EventName}}__e
3
+ *
4
+ * Use Case: Business logic for processing Platform Events
5
+ * - Separated from trigger for testability
6
+ * - TAF-compatible action pattern
7
+ * - Bulkified processing
8
+ *
9
+ * This class is called by the {{EventName}}Subscriber trigger
10
+ * and contains all business logic for event processing.
11
+ *
12
+ * @author {{Author}}
13
+ * @date {{Date}}
14
+ */
15
+ public with sharing class {{EventName}}Handler {
16
+
17
+ /**
18
+ * @description Handle CREATE operation events
19
+ * @param event The platform event
20
+ */
21
+ public static void handleCreate({{EventName}}__e event) {
22
+ Map<String, Object> payload = parsePayload(event.Payload__c);
23
+
24
+ // Example: Create a record based on event data
25
+ /*
26
+ {{TargetObject}}__c newRecord = new {{TargetObject}}__c();
27
+ newRecord.Name = (String) payload.get('name');
28
+ newRecord.External_Id__c = event.Record_Id__c;
29
+ newRecord.Source_System__c = 'Platform Event';
30
+ insert newRecord;
31
+ */
32
+
33
+ System.debug(LoggingLevel.DEBUG,
34
+ 'Processed CREATE event: ' + event.Correlation_Id__c);
35
+ }
36
+
37
+ /**
38
+ * @description Handle UPDATE operation events
39
+ * @param event The platform event
40
+ */
41
+ public static void handleUpdate({{EventName}}__e event) {
42
+ Map<String, Object> payload = parsePayload(event.Payload__c);
43
+ String recordId = event.Record_Id__c;
44
+
45
+ // Example: Update existing record
46
+ /*
47
+ List<{{TargetObject}}__c> records = [
48
+ SELECT Id, Name
49
+ FROM {{TargetObject}}__c
50
+ WHERE External_Id__c = :recordId
51
+ WITH USER_MODE
52
+ LIMIT 1
53
+ ];
54
+
55
+ if (!records.isEmpty()) {
56
+ {{TargetObject}}__c record = records[0];
57
+ record.Name = (String) payload.get('name');
58
+ record.Last_Sync__c = Datetime.now();
59
+ update record;
60
+ }
61
+ */
62
+
63
+ System.debug(LoggingLevel.DEBUG,
64
+ 'Processed UPDATE event: ' + event.Correlation_Id__c);
65
+ }
66
+
67
+ /**
68
+ * @description Handle DELETE operation events
69
+ * @param event The platform event
70
+ */
71
+ public static void handleDelete({{EventName}}__e event) {
72
+ String recordId = event.Record_Id__c;
73
+
74
+ // Example: Delete or archive record
75
+ /*
76
+ List<{{TargetObject}}__c> records = [
77
+ SELECT Id
78
+ FROM {{TargetObject}}__c
79
+ WHERE External_Id__c = :recordId
80
+ WITH USER_MODE
81
+ LIMIT 1
82
+ ];
83
+
84
+ if (!records.isEmpty()) {
85
+ delete records;
86
+ }
87
+ */
88
+
89
+ System.debug(LoggingLevel.DEBUG,
90
+ 'Processed DELETE event: ' + event.Correlation_Id__c);
91
+ }
92
+
93
+ /**
94
+ * @description Handle bulk events (for optimized processing)
95
+ * Call this from trigger instead of individual handlers
96
+ * when processing high volumes
97
+ * @param events List of events to process
98
+ */
99
+ public static void handleBulk(List<{{EventName}}__e> events) {
100
+ // Separate events by operation
101
+ List<{{EventName}}__e> createEvents = new List<{{EventName}}__e>();
102
+ List<{{EventName}}__e> updateEvents = new List<{{EventName}}__e>();
103
+ List<{{EventName}}__e> deleteEvents = new List<{{EventName}}__e>();
104
+
105
+ for ({{EventName}}__e event : events) {
106
+ switch on event.Operation__c {
107
+ when 'CREATE' {
108
+ createEvents.add(event);
109
+ }
110
+ when 'UPDATE' {
111
+ updateEvents.add(event);
112
+ }
113
+ when 'DELETE' {
114
+ deleteEvents.add(event);
115
+ }
116
+ }
117
+ }
118
+
119
+ // Process each operation type in bulk
120
+ if (!createEvents.isEmpty()) {
121
+ handleBulkCreate(createEvents);
122
+ }
123
+ if (!updateEvents.isEmpty()) {
124
+ handleBulkUpdate(updateEvents);
125
+ }
126
+ if (!deleteEvents.isEmpty()) {
127
+ handleBulkDelete(deleteEvents);
128
+ }
129
+ }
130
+
131
+ /**
132
+ * @description Bulk create handler
133
+ * @param events CREATE events
134
+ */
135
+ private static void handleBulkCreate(List<{{EventName}}__e> events) {
136
+ List<{{TargetObject}}__c> newRecords = new List<{{TargetObject}}__c>();
137
+
138
+ for ({{EventName}}__e event : events) {
139
+ Map<String, Object> payload = parsePayload(event.Payload__c);
140
+
141
+ {{TargetObject}}__c record = new {{TargetObject}}__c();
142
+ // Map fields from payload
143
+ // record.Name = (String) payload.get('name');
144
+ // record.External_Id__c = event.Record_Id__c;
145
+
146
+ newRecords.add(record);
147
+ }
148
+
149
+ if (!newRecords.isEmpty()) {
150
+ // Use Database.insert for partial success handling
151
+ Database.SaveResult[] results = Database.insert(newRecords, false);
152
+ logDmlResults(results, 'CREATE');
153
+ }
154
+ }
155
+
156
+ /**
157
+ * @description Bulk update handler
158
+ * @param events UPDATE events
159
+ */
160
+ private static void handleBulkUpdate(List<{{EventName}}__e> events) {
161
+ // Collect external IDs to query
162
+ Set<String> externalIds = new Set<String>();
163
+ Map<String, {{EventName}}__e> eventsByExternalId = new Map<String, {{EventName}}__e>();
164
+
165
+ for ({{EventName}}__e event : events) {
166
+ externalIds.add(event.Record_Id__c);
167
+ eventsByExternalId.put(event.Record_Id__c, event);
168
+ }
169
+
170
+ // Query existing records
171
+ /*
172
+ Map<String, {{TargetObject}}__c> recordsByExternalId = new Map<String, {{TargetObject}}__c>();
173
+ for ({{TargetObject}}__c record : [
174
+ SELECT Id, External_Id__c, Name
175
+ FROM {{TargetObject}}__c
176
+ WHERE External_Id__c IN :externalIds
177
+ WITH USER_MODE
178
+ ]) {
179
+ recordsByExternalId.put(record.External_Id__c, record);
180
+ }
181
+
182
+ // Update records
183
+ List<{{TargetObject}}__c> toUpdate = new List<{{TargetObject}}__c>();
184
+ for (String extId : externalIds) {
185
+ if (recordsByExternalId.containsKey(extId)) {
186
+ {{TargetObject}}__c record = recordsByExternalId.get(extId);
187
+ {{EventName}}__e event = eventsByExternalId.get(extId);
188
+ Map<String, Object> payload = parsePayload(event.Payload__c);
189
+
190
+ // Update fields
191
+ // record.Name = (String) payload.get('name');
192
+ toUpdate.add(record);
193
+ }
194
+ }
195
+
196
+ if (!toUpdate.isEmpty()) {
197
+ Database.SaveResult[] results = Database.update(toUpdate, false);
198
+ logDmlResults(results, 'UPDATE');
199
+ }
200
+ */
201
+ }
202
+
203
+ /**
204
+ * @description Bulk delete handler
205
+ * @param events DELETE events
206
+ */
207
+ private static void handleBulkDelete(List<{{EventName}}__e> events) {
208
+ Set<String> externalIds = new Set<String>();
209
+ for ({{EventName}}__e event : events) {
210
+ externalIds.add(event.Record_Id__c);
211
+ }
212
+
213
+ /*
214
+ List<{{TargetObject}}__c> toDelete = [
215
+ SELECT Id
216
+ FROM {{TargetObject}}__c
217
+ WHERE External_Id__c IN :externalIds
218
+ WITH USER_MODE
219
+ ];
220
+
221
+ if (!toDelete.isEmpty()) {
222
+ Database.DeleteResult[] results = Database.delete(toDelete, false);
223
+ logDeleteResults(results, 'DELETE');
224
+ }
225
+ */
226
+ }
227
+
228
+ /**
229
+ * @description Parse JSON payload to Map
230
+ * @param payloadJson JSON string
231
+ * @return Parsed Map
232
+ */
233
+ private static Map<String, Object> parsePayload(String payloadJson) {
234
+ if (String.isBlank(payloadJson)) {
235
+ return new Map<String, Object>();
236
+ }
237
+
238
+ try {
239
+ return (Map<String, Object>) JSON.deserializeUntyped(payloadJson);
240
+ } catch (JSONException e) {
241
+ System.debug(LoggingLevel.ERROR, 'Failed to parse payload: ' + e.getMessage());
242
+ return new Map<String, Object>();
243
+ }
244
+ }
245
+
246
+ /**
247
+ * @description Log DML results for monitoring
248
+ * @param results Database.SaveResult array
249
+ * @param operation Operation name
250
+ */
251
+ private static void logDmlResults(Database.SaveResult[] results, String operation) {
252
+ Integer successCount = 0;
253
+ Integer failCount = 0;
254
+
255
+ for (Database.SaveResult sr : results) {
256
+ if (sr.isSuccess()) {
257
+ successCount++;
258
+ } else {
259
+ failCount++;
260
+ for (Database.Error err : sr.getErrors()) {
261
+ System.debug(LoggingLevel.ERROR,
262
+ operation + ' failed: ' + err.getStatusCode() + ' - ' + err.getMessage());
263
+ }
264
+ }
265
+ }
266
+
267
+ System.debug(LoggingLevel.INFO,
268
+ operation + ' results - Success: ' + successCount + ', Failed: ' + failCount);
269
+ }
270
+
271
+ /**
272
+ * @description Log delete results for monitoring
273
+ * @param results Database.DeleteResult array
274
+ * @param operation Operation name
275
+ */
276
+ private static void logDeleteResults(Database.DeleteResult[] results, String operation) {
277
+ Integer successCount = 0;
278
+ Integer failCount = 0;
279
+
280
+ for (Database.DeleteResult dr : results) {
281
+ if (dr.isSuccess()) {
282
+ successCount++;
283
+ } else {
284
+ failCount++;
285
+ for (Database.Error err : dr.getErrors()) {
286
+ System.debug(LoggingLevel.ERROR,
287
+ operation + ' failed: ' + err.getStatusCode() + ' - ' + err.getMessage());
288
+ }
289
+ }
290
+ }
291
+
292
+ System.debug(LoggingLevel.INFO,
293
+ operation + ' results - Success: ' + successCount + ', Failed: ' + failCount);
294
+ }
295
+ }