@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,237 @@
1
+ /**
2
+ * Test Data Factory for Case records
3
+ * Supports bulk creation with Account/Contact relationships and priority variations
4
+ *
5
+ * Usage:
6
+ * List<Case> cases = TestDataFactory_Case.create(200);
7
+ * List<Case> casesForAccount = TestDataFactory_Case.createForAccount(50, accountId);
8
+ * List<Case> highPriority = TestDataFactory_Case.createWithPriority(100, 'High');
9
+ */
10
+ public class TestDataFactory_Case {
11
+
12
+ private static final String DEFAULT_SUBJECT_PREFIX = 'Test Case ';
13
+ private static final String DEFAULT_STATUS = 'New';
14
+ private static final String DEFAULT_PRIORITY = 'Medium';
15
+ private static final String DEFAULT_ORIGIN = 'Web';
16
+
17
+ /**
18
+ * Create and insert Case records (creates parent Account automatically)
19
+ * @param count Number of records to create
20
+ * @return List of inserted Case records with IDs
21
+ */
22
+ public static List<Case> create(Integer count) {
23
+ return create(count, true);
24
+ }
25
+
26
+ /**
27
+ * Create Case records with insert option
28
+ * @param count Number of records to create
29
+ * @param doInsert Whether to insert records
30
+ * @return List of Case records
31
+ */
32
+ public static List<Case> create(Integer count, Boolean doInsert) {
33
+ // Create parent Account and Contact
34
+ Account parentAccount = new Account(Name = 'Test Parent Account for Cases');
35
+ insert parentAccount;
36
+
37
+ Contact parentContact = new Contact(
38
+ FirstName = 'Test',
39
+ LastName = 'CaseContact',
40
+ AccountId = parentAccount.Id,
41
+ Email = 'casecontact@testfactory.example.com'
42
+ );
43
+ insert parentContact;
44
+
45
+ return createForAccountAndContact(count, parentAccount.Id, parentContact.Id, doInsert);
46
+ }
47
+
48
+ /**
49
+ * Create Case records for a specific Account
50
+ * @param count Number of records to create
51
+ * @param accountId Parent Account ID
52
+ * @return List of inserted Case records
53
+ */
54
+ public static List<Case> createForAccount(Integer count, Id accountId) {
55
+ return createForAccount(count, accountId, true);
56
+ }
57
+
58
+ /**
59
+ * Create Case records for a specific Account with insert option
60
+ * @param count Number of records to create
61
+ * @param accountId Parent Account ID
62
+ * @param doInsert Whether to insert records
63
+ * @return List of Case records
64
+ */
65
+ public static List<Case> createForAccount(Integer count, Id accountId, Boolean doInsert) {
66
+ List<Case> records = new List<Case>();
67
+ for (Integer i = 0; i < count; i++) {
68
+ records.add(buildRecord(i, accountId, null));
69
+ }
70
+ if (doInsert && !records.isEmpty()) {
71
+ insert records;
72
+ }
73
+ return records;
74
+ }
75
+
76
+ /**
77
+ * Create Case records for specific Account and Contact
78
+ * @param count Number of records to create
79
+ * @param accountId Parent Account ID
80
+ * @param contactId Parent Contact ID
81
+ * @param doInsert Whether to insert records
82
+ * @return List of Case records
83
+ */
84
+ public static List<Case> createForAccountAndContact(Integer count, Id accountId, Id contactId, Boolean doInsert) {
85
+ List<Case> records = new List<Case>();
86
+ for (Integer i = 0; i < count; i++) {
87
+ records.add(buildRecord(i, accountId, contactId));
88
+ }
89
+ if (doInsert && !records.isEmpty()) {
90
+ insert records;
91
+ }
92
+ return records;
93
+ }
94
+
95
+ /**
96
+ * Create Case records with a specific Priority
97
+ * @param count Number of records to create
98
+ * @param priority Priority picklist value (Low, Medium, High)
99
+ * @return List of inserted Case records
100
+ */
101
+ public static List<Case> createWithPriority(Integer count, String priority) {
102
+ Account parentAccount = new Account(Name = 'Test Account for ' + priority + ' Priority Cases');
103
+ insert parentAccount;
104
+
105
+ List<Case> records = new List<Case>();
106
+ for (Integer i = 0; i < count; i++) {
107
+ Case c = buildRecord(i, parentAccount.Id, null);
108
+ c.Priority = priority;
109
+ records.add(c);
110
+ }
111
+ if (!records.isEmpty()) {
112
+ insert records;
113
+ }
114
+ return records;
115
+ }
116
+
117
+ /**
118
+ * Create Case records with a specific Status
119
+ * @param count Number of records to create
120
+ * @param status Status picklist value
121
+ * @return List of inserted Case records
122
+ */
123
+ public static List<Case> createWithStatus(Integer count, String status) {
124
+ Account parentAccount = new Account(Name = 'Test Account for ' + status + ' Cases');
125
+ insert parentAccount;
126
+
127
+ List<Case> records = new List<Case>();
128
+ for (Integer i = 0; i < count; i++) {
129
+ Case c = buildRecord(i, parentAccount.Id, null);
130
+ c.Status = status;
131
+ records.add(c);
132
+ }
133
+ if (!records.isEmpty()) {
134
+ insert records;
135
+ }
136
+ return records;
137
+ }
138
+
139
+ /**
140
+ * Create Cases with varied Types for categorization testing
141
+ * @param count Number of records to create
142
+ * @param accountId Parent Account ID
143
+ * @return List of inserted Case records with varied types
144
+ */
145
+ public static List<Case> createWithVariedTypes(Integer count, Id accountId) {
146
+ List<String> types = new List<String>{
147
+ 'Mechanical', 'Electrical', 'Electronic', 'Structural', 'Other',
148
+ 'Feature Request', 'Question', 'Problem'
149
+ };
150
+
151
+ List<Case> records = new List<Case>();
152
+ for (Integer i = 0; i < count; i++) {
153
+ Case c = buildRecord(i, accountId, null);
154
+ c.Type = types[Math.mod(i, types.size())];
155
+ records.add(c);
156
+ }
157
+
158
+ if (!records.isEmpty()) {
159
+ insert records;
160
+ }
161
+ return records;
162
+ }
163
+
164
+ /**
165
+ * Create escalated Cases for escalation rule testing
166
+ * @param count Number of records to create
167
+ * @return List of inserted escalated Case records
168
+ */
169
+ public static List<Case> createEscalated(Integer count) {
170
+ Account parentAccount = new Account(Name = 'Test Account for Escalated Cases');
171
+ insert parentAccount;
172
+
173
+ List<Case> records = new List<Case>();
174
+ for (Integer i = 0; i < count; i++) {
175
+ Case c = buildRecord(i, parentAccount.Id, null);
176
+ c.Priority = 'High';
177
+ c.IsEscalated = true;
178
+ records.add(c);
179
+ }
180
+ if (!records.isEmpty()) {
181
+ insert records;
182
+ }
183
+ return records;
184
+ }
185
+
186
+ /**
187
+ * Build a single Case record with default values
188
+ * @param index Record index for unique naming
189
+ * @param accountId Parent Account ID
190
+ * @param contactId Parent Contact ID (optional)
191
+ * @return Case record (not inserted)
192
+ */
193
+ private static Case buildRecord(Integer index, Id accountId, Id contactId) {
194
+ String indexStr = String.valueOf(index).leftPad(5, '0');
195
+
196
+ return new Case(
197
+ Subject = DEFAULT_SUBJECT_PREFIX + indexStr,
198
+ AccountId = accountId,
199
+ ContactId = contactId,
200
+ Status = DEFAULT_STATUS,
201
+ Priority = DEFAULT_PRIORITY,
202
+ Origin = DEFAULT_ORIGIN,
203
+ Type = 'Problem',
204
+ Reason = 'User didn\'t attend training',
205
+ Description = 'Test case created by TestDataFactory for automated testing. Case index: ' + index,
206
+ SuppliedName = 'Test Supplied Name ' + index,
207
+ SuppliedEmail = 'supplied' + index + '@testfactory.example.com',
208
+ SuppliedPhone = '(555) 600-' + String.valueOf(1000 + index),
209
+ SuppliedCompany = 'Test Supplied Company ' + index
210
+ );
211
+ }
212
+
213
+ /**
214
+ * Get IDs of created records for cleanup
215
+ * @param records List of Case records
216
+ * @return Set of Case IDs
217
+ */
218
+ public static Set<Id> getIds(List<Case> records) {
219
+ Set<Id> ids = new Set<Id>();
220
+ for (Case c : records) {
221
+ if (c.Id != null) {
222
+ ids.add(c.Id);
223
+ }
224
+ }
225
+ return ids;
226
+ }
227
+
228
+ /**
229
+ * Delete records by IDs (cleanup utility)
230
+ * @param recordIds Set of Case IDs to delete
231
+ */
232
+ public static void cleanup(Set<Id> recordIds) {
233
+ if (!recordIds.isEmpty()) {
234
+ delete [SELECT Id FROM Case WHERE Id IN :recordIds];
235
+ }
236
+ }
237
+ }
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Test Data Factory for Contact records
3
+ * Supports bulk creation with Account relationships
4
+ *
5
+ * Usage:
6
+ * List<Contact> contacts = TestDataFactory_Contact.create(200);
7
+ * List<Contact> contactsForAccount = TestDataFactory_Contact.createForAccount(50, accountId);
8
+ * List<Contact> contactsNoInsert = TestDataFactory_Contact.create(200, false);
9
+ */
10
+ public class TestDataFactory_Contact {
11
+
12
+ private static final String DEFAULT_FIRST_NAME_PREFIX = 'Test';
13
+ private static final String DEFAULT_LAST_NAME_PREFIX = 'Contact';
14
+ private static final String DEFAULT_EMAIL_DOMAIN = 'testfactory.example.com';
15
+
16
+ /**
17
+ * Create and insert Contact records (creates parent Account automatically)
18
+ * @param count Number of records to create
19
+ * @return List of inserted Contact records with IDs
20
+ */
21
+ public static List<Contact> create(Integer count) {
22
+ return create(count, true);
23
+ }
24
+
25
+ /**
26
+ * Create Contact records with insert option
27
+ * @param count Number of records to create
28
+ * @param doInsert Whether to insert records
29
+ * @return List of Contact records
30
+ */
31
+ public static List<Contact> create(Integer count, Boolean doInsert) {
32
+ // Create a parent Account for orphan protection
33
+ Account parentAccount = new Account(Name = 'Test Parent Account for Contacts');
34
+ insert parentAccount;
35
+
36
+ return createForAccount(count, parentAccount.Id, doInsert);
37
+ }
38
+
39
+ /**
40
+ * Create Contact records for a specific Account
41
+ * @param count Number of records to create
42
+ * @param accountId Parent Account ID
43
+ * @return List of inserted Contact records
44
+ */
45
+ public static List<Contact> createForAccount(Integer count, Id accountId) {
46
+ return createForAccount(count, accountId, true);
47
+ }
48
+
49
+ /**
50
+ * Create Contact records for a specific Account with insert option
51
+ * @param count Number of records to create
52
+ * @param accountId Parent Account ID
53
+ * @param doInsert Whether to insert records
54
+ * @return List of Contact records
55
+ */
56
+ public static List<Contact> createForAccount(Integer count, Id accountId, Boolean doInsert) {
57
+ List<Contact> records = new List<Contact>();
58
+ for (Integer i = 0; i < count; i++) {
59
+ records.add(buildRecord(i, accountId));
60
+ }
61
+ if (doInsert && !records.isEmpty()) {
62
+ insert records;
63
+ }
64
+ return records;
65
+ }
66
+
67
+ /**
68
+ * Create Contacts distributed across multiple Accounts
69
+ * @param accountIds List of Account IDs
70
+ * @param contactsPerAccount Number of Contacts per Account
71
+ * @return List of inserted Contact records
72
+ */
73
+ public static List<Contact> createForAccounts(List<Id> accountIds, Integer contactsPerAccount) {
74
+ List<Contact> records = new List<Contact>();
75
+ Integer globalIndex = 0;
76
+
77
+ for (Id accountId : accountIds) {
78
+ for (Integer i = 0; i < contactsPerAccount; i++) {
79
+ records.add(buildRecord(globalIndex++, accountId));
80
+ }
81
+ }
82
+
83
+ if (!records.isEmpty()) {
84
+ insert records;
85
+ }
86
+ return records;
87
+ }
88
+
89
+ /**
90
+ * Create Contacts with varied titles for role-based testing
91
+ * @param count Number of records to create
92
+ * @param accountId Parent Account ID
93
+ * @return List of inserted Contact records with varied titles
94
+ */
95
+ public static List<Contact> createWithVariedTitles(Integer count, Id accountId) {
96
+ List<String> titles = new List<String>{
97
+ 'CEO', 'CFO', 'CTO', 'VP Sales', 'VP Marketing',
98
+ 'Director', 'Manager', 'Senior Developer', 'Analyst', 'Consultant'
99
+ };
100
+
101
+ List<Contact> records = new List<Contact>();
102
+ for (Integer i = 0; i < count; i++) {
103
+ Contact con = buildRecord(i, accountId);
104
+ con.Title = titles[Math.mod(i, titles.size())];
105
+ records.add(con);
106
+ }
107
+
108
+ if (!records.isEmpty()) {
109
+ insert records;
110
+ }
111
+ return records;
112
+ }
113
+
114
+ /**
115
+ * Build a single Contact record with default values
116
+ * @param index Record index for unique naming
117
+ * @param accountId Parent Account ID
118
+ * @return Contact record (not inserted)
119
+ */
120
+ private static Contact buildRecord(Integer index, Id accountId) {
121
+ String indexStr = String.valueOf(index).leftPad(5, '0');
122
+ String firstName = DEFAULT_FIRST_NAME_PREFIX + indexStr;
123
+ String lastName = DEFAULT_LAST_NAME_PREFIX + indexStr;
124
+
125
+ return new Contact(
126
+ FirstName = firstName,
127
+ LastName = lastName,
128
+ AccountId = accountId,
129
+ Email = firstName.toLowerCase() + '.' + lastName.toLowerCase() + '@' + DEFAULT_EMAIL_DOMAIN,
130
+ Phone = '(555) 200-' + String.valueOf(1000 + index),
131
+ MobilePhone = '(555) 300-' + String.valueOf(1000 + index),
132
+ Title = 'Test Title',
133
+ Department = 'Test Department',
134
+ MailingStreet = '456 Contact Ave',
135
+ MailingCity = 'San Francisco',
136
+ MailingState = 'CA',
137
+ MailingPostalCode = '94103',
138
+ MailingCountry = 'USA',
139
+ Birthdate = Date.today().addYears(-30).addDays(index),
140
+ Description = 'Test contact created by TestDataFactory for automated testing'
141
+ );
142
+ }
143
+
144
+ /**
145
+ * Get IDs of created records for cleanup
146
+ * @param records List of Contact records
147
+ * @return Set of Contact IDs
148
+ */
149
+ public static Set<Id> getIds(List<Contact> records) {
150
+ Set<Id> ids = new Set<Id>();
151
+ for (Contact con : records) {
152
+ if (con.Id != null) {
153
+ ids.add(con.Id);
154
+ }
155
+ }
156
+ return ids;
157
+ }
158
+
159
+ /**
160
+ * Delete records by IDs (cleanup utility)
161
+ * @param recordIds Set of Contact IDs to delete
162
+ */
163
+ public static void cleanup(Set<Id> recordIds) {
164
+ if (!recordIds.isEmpty()) {
165
+ delete [SELECT Id FROM Contact WHERE Id IN :recordIds];
166
+ }
167
+ }
168
+ }
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Test Data Factory Template for Custom Objects
3
+ *
4
+ * INSTRUCTIONS:
5
+ * 1. Copy this file and rename to TestDataFactory_[YourObject].cls
6
+ * 2. Replace {{ObjectName}} with your object API name (e.g., Invoice__c)
7
+ * 3. Replace {{ObjectLabel}} with display name (e.g., Invoice)
8
+ * 4. Update buildRecord() with your object's fields
9
+ * 5. Add object-specific creation methods as needed
10
+ *
11
+ * Usage:
12
+ * List<{{ObjectName}}> records = TestDataFactory_{{ObjectLabel}}.create(200);
13
+ * List<{{ObjectName}}> recordsNoInsert = TestDataFactory_{{ObjectLabel}}.create(200, false);
14
+ */
15
+ public class TestDataFactory_{{ObjectLabel}} {
16
+
17
+ // ═══════════════════════════════════════════════════════════════════════
18
+ // CONFIGURATION - Update these for your object
19
+ // ═══════════════════════════════════════════════════════════════════════
20
+
21
+ private static final String DEFAULT_NAME_PREFIX = 'Test {{ObjectLabel}} ';
22
+
23
+ // Add default values for required picklist fields
24
+ // private static final String DEFAULT_STATUS = 'Draft';
25
+ // private static final String DEFAULT_TYPE = 'Standard';
26
+
27
+ // ═══════════════════════════════════════════════════════════════════════
28
+ // STANDARD FACTORY METHODS
29
+ // ═══════════════════════════════════════════════════════════════════════
30
+
31
+ /**
32
+ * Create and insert records with default values
33
+ * @param count Number of records to create
34
+ * @return List of inserted records with IDs
35
+ */
36
+ public static List<{{ObjectName}}> create(Integer count) {
37
+ return create(count, true);
38
+ }
39
+
40
+ /**
41
+ * Create records with insert option
42
+ * @param count Number of records to create
43
+ * @param doInsert Whether to insert records
44
+ * @return List of records
45
+ */
46
+ public static List<{{ObjectName}}> create(Integer count, Boolean doInsert) {
47
+ List<{{ObjectName}}> records = new List<{{ObjectName}}>();
48
+ for (Integer i = 0; i < count; i++) {
49
+ records.add(buildRecord(i));
50
+ }
51
+ if (doInsert && !records.isEmpty()) {
52
+ insert records;
53
+ }
54
+ return records;
55
+ }
56
+
57
+ // ═══════════════════════════════════════════════════════════════════════
58
+ // RELATIONSHIP METHODS - Uncomment and modify if object has lookups
59
+ // ═══════════════════════════════════════════════════════════════════════
60
+
61
+ /**
62
+ * Create records for a specific parent Account
63
+ * Uncomment if your object has an Account lookup
64
+ */
65
+ /*
66
+ public static List<{{ObjectName}}> createForAccount(Integer count, Id accountId) {
67
+ return createForAccount(count, accountId, true);
68
+ }
69
+
70
+ public static List<{{ObjectName}}> createForAccount(Integer count, Id accountId, Boolean doInsert) {
71
+ List<{{ObjectName}}> records = new List<{{ObjectName}}>();
72
+ for (Integer i = 0; i < count; i++) {
73
+ {{ObjectName}} record = buildRecord(i);
74
+ record.Account__c = accountId; // Update with your lookup field API name
75
+ records.add(record);
76
+ }
77
+ if (doInsert && !records.isEmpty()) {
78
+ insert records;
79
+ }
80
+ return records;
81
+ }
82
+ */
83
+
84
+ /**
85
+ * Create records for a specific parent (generic lookup)
86
+ * Uncomment and modify for your parent object
87
+ */
88
+ /*
89
+ public static List<{{ObjectName}}> createForParent(Integer count, Id parentId) {
90
+ List<{{ObjectName}}> records = new List<{{ObjectName}}>();
91
+ for (Integer i = 0; i < count; i++) {
92
+ {{ObjectName}} record = buildRecord(i);
93
+ record.Parent__c = parentId; // Update with your lookup field API name
94
+ records.add(record);
95
+ }
96
+ if (!records.isEmpty()) {
97
+ insert records;
98
+ }
99
+ return records;
100
+ }
101
+ */
102
+
103
+ // ═══════════════════════════════════════════════════════════════════════
104
+ // VARIATION METHODS - Add methods for specific field variations
105
+ // ═══════════════════════════════════════════════════════════════════════
106
+
107
+ /**
108
+ * Create records with a specific Status
109
+ * Uncomment if your object has a Status picklist
110
+ */
111
+ /*
112
+ public static List<{{ObjectName}}> createWithStatus(Integer count, String status) {
113
+ List<{{ObjectName}}> records = new List<{{ObjectName}}>();
114
+ for (Integer i = 0; i < count; i++) {
115
+ {{ObjectName}} record = buildRecord(i);
116
+ record.Status__c = status; // Update with your status field API name
117
+ records.add(record);
118
+ }
119
+ if (!records.isEmpty()) {
120
+ insert records;
121
+ }
122
+ return records;
123
+ }
124
+ */
125
+
126
+ /**
127
+ * Create records with varied values for comprehensive testing
128
+ * Modify for your object's key picklist fields
129
+ */
130
+ /*
131
+ public static List<{{ObjectName}}> createWithVariedValues(Integer count) {
132
+ List<String> statuses = new List<String>{'Draft', 'Active', 'Complete', 'Cancelled'};
133
+
134
+ List<{{ObjectName}}> records = new List<{{ObjectName}}>();
135
+ for (Integer i = 0; i < count; i++) {
136
+ {{ObjectName}} record = buildRecord(i);
137
+ record.Status__c = statuses[Math.mod(i, statuses.size())];
138
+ records.add(record);
139
+ }
140
+
141
+ if (!records.isEmpty()) {
142
+ insert records;
143
+ }
144
+ return records;
145
+ }
146
+ */
147
+
148
+ // ═══════════════════════════════════════════════════════════════════════
149
+ // RECORD BUILDER - Customize for your object's fields
150
+ // ═══════════════════════════════════════════════════════════════════════
151
+
152
+ /**
153
+ * Build a single record with default values
154
+ *
155
+ * UPDATE THIS METHOD with your object's fields:
156
+ * 1. Add all required fields
157
+ * 2. Add fields needed for testing
158
+ * 3. Use realistic test values
159
+ *
160
+ * @param index Record index for unique naming
161
+ * @return Record (not inserted)
162
+ */
163
+ private static {{ObjectName}} buildRecord(Integer index) {
164
+ String indexStr = String.valueOf(index).leftPad(5, '0');
165
+
166
+ return new {{ObjectName}}(
167
+ Name = DEFAULT_NAME_PREFIX + indexStr
168
+
169
+ // ─────────────────────────────────────────────────────────────
170
+ // ADD YOUR FIELDS BELOW
171
+ // ─────────────────────────────────────────────────────────────
172
+
173
+ // Text fields
174
+ // , Description__c = 'Test {{ObjectLabel}} created by TestDataFactory'
175
+
176
+ // Picklist fields (use valid picklist values)
177
+ // , Status__c = DEFAULT_STATUS
178
+ // , Type__c = DEFAULT_TYPE
179
+
180
+ // Number fields
181
+ // , Amount__c = 1000 + (index * 100)
182
+ // , Quantity__c = 1 + index
183
+
184
+ // Date fields
185
+ // , StartDate__c = Date.today()
186
+ // , EndDate__c = Date.today().addDays(30 + index)
187
+
188
+ // DateTime fields
189
+ // , ScheduledDateTime__c = DateTime.now().addDays(index)
190
+
191
+ // Checkbox fields
192
+ // , IsActive__c = true
193
+
194
+ // Currency fields
195
+ // , TotalAmount__c = 10000.00 + (index * 500)
196
+
197
+ // Percent fields
198
+ // , DiscountPercent__c = 10 + index
199
+
200
+ // Email fields
201
+ // , ContactEmail__c = 'test' + index + '@testfactory.example.com'
202
+
203
+ // Phone fields
204
+ // , ContactPhone__c = '(555) 900-' + String.valueOf(1000 + index)
205
+
206
+ // URL fields
207
+ // , Website__c = 'https://test' + index + '.example.com'
208
+
209
+ // Lookup fields (requires parent record ID)
210
+ // , Account__c = accountId
211
+ // , Contact__c = contactId
212
+
213
+ // ─────────────────────────────────────────────────────────────
214
+ );
215
+ }
216
+
217
+ // ═══════════════════════════════════════════════════════════════════════
218
+ // UTILITY METHODS
219
+ // ═══════════════════════════════════════════════════════════════════════
220
+
221
+ /**
222
+ * Get IDs of created records for cleanup
223
+ * @param records List of records
224
+ * @return Set of record IDs
225
+ */
226
+ public static Set<Id> getIds(List<{{ObjectName}}> records) {
227
+ Set<Id> ids = new Set<Id>();
228
+ for ({{ObjectName}} record : records) {
229
+ if (record.Id != null) {
230
+ ids.add(record.Id);
231
+ }
232
+ }
233
+ return ids;
234
+ }
235
+
236
+ /**
237
+ * Delete records by IDs (cleanup utility)
238
+ * @param recordIds Set of record IDs to delete
239
+ */
240
+ public static void cleanup(Set<Id> recordIds) {
241
+ if (!recordIds.isEmpty()) {
242
+ delete [SELECT Id FROM {{ObjectName}} WHERE Id IN :recordIds];
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Delete records by Name pattern (cleanup utility)
248
+ * @param namePattern LIKE pattern (e.g., 'Test%')
249
+ */
250
+ public static void cleanupByName(String namePattern) {
251
+ List<{{ObjectName}}> records = [
252
+ SELECT Id FROM {{ObjectName}}
253
+ WHERE Name LIKE :namePattern
254
+ LIMIT 10000
255
+ ];
256
+ if (!records.isEmpty()) {
257
+ delete records;
258
+ }
259
+ }
260
+ }