bc-code-intelligence-mcp 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +107 -0
  3. package/dist/cache/cache-manager.d.ts +95 -0
  4. package/dist/cache/cache-manager.d.ts.map +1 -0
  5. package/dist/cache/cache-manager.js +328 -0
  6. package/dist/cache/cache-manager.js.map +1 -0
  7. package/dist/cli/bc-code-intel-cli.d.ts +9 -0
  8. package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
  9. package/dist/cli/bc-code-intel-cli.js +441 -0
  10. package/dist/cli/bc-code-intel-cli.js.map +1 -0
  11. package/dist/config/config-loader.d.ts +21 -0
  12. package/dist/config/config-loader.d.ts.map +1 -0
  13. package/dist/config/config-loader.js +402 -0
  14. package/dist/config/config-loader.js.map +1 -0
  15. package/dist/config/config-validator.d.ts +84 -0
  16. package/dist/config/config-validator.d.ts.map +1 -0
  17. package/dist/config/config-validator.js +604 -0
  18. package/dist/config/config-validator.js.map +1 -0
  19. package/dist/config/test-config-loader.d.ts +10 -0
  20. package/dist/config/test-config-loader.d.ts.map +1 -0
  21. package/dist/config/test-config-loader.js +135 -0
  22. package/dist/config/test-config-loader.js.map +1 -0
  23. package/dist/config/test-enhanced-layer-service.d.ts +7 -0
  24. package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
  25. package/dist/config/test-enhanced-layer-service.js +104 -0
  26. package/dist/config/test-enhanced-layer-service.js.map +1 -0
  27. package/dist/config/test-git-layer.d.ts +7 -0
  28. package/dist/config/test-git-layer.d.ts.map +1 -0
  29. package/dist/config/test-git-layer.js +68 -0
  30. package/dist/config/test-git-layer.js.map +1 -0
  31. package/dist/dev/hot-reload.d.ts +91 -0
  32. package/dist/dev/hot-reload.d.ts.map +1 -0
  33. package/dist/dev/hot-reload.js +358 -0
  34. package/dist/dev/hot-reload.js.map +1 -0
  35. package/dist/index.d.ts +57 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +673 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/layers/base-layer.d.ts +83 -0
  40. package/dist/layers/base-layer.d.ts.map +1 -0
  41. package/dist/layers/base-layer.js +166 -0
  42. package/dist/layers/base-layer.js.map +1 -0
  43. package/dist/layers/embedded-layer.d.ts +53 -0
  44. package/dist/layers/embedded-layer.d.ts.map +1 -0
  45. package/dist/layers/embedded-layer.js +238 -0
  46. package/dist/layers/embedded-layer.js.map +1 -0
  47. package/dist/layers/git-layer.d.ts +54 -0
  48. package/dist/layers/git-layer.d.ts.map +1 -0
  49. package/dist/layers/git-layer.js +369 -0
  50. package/dist/layers/git-layer.js.map +1 -0
  51. package/dist/layers/index.d.ts +12 -0
  52. package/dist/layers/index.d.ts.map +1 -0
  53. package/dist/layers/index.js +11 -0
  54. package/dist/layers/index.js.map +1 -0
  55. package/dist/layers/layer-service.d.ts +129 -0
  56. package/dist/layers/layer-service.d.ts.map +1 -0
  57. package/dist/layers/layer-service.js +570 -0
  58. package/dist/layers/layer-service.js.map +1 -0
  59. package/dist/layers/project-layer.d.ts +50 -0
  60. package/dist/layers/project-layer.d.ts.map +1 -0
  61. package/dist/layers/project-layer.js +256 -0
  62. package/dist/layers/project-layer.js.map +1 -0
  63. package/dist/monitoring/production-monitor.d.ts +148 -0
  64. package/dist/monitoring/production-monitor.d.ts.map +1 -0
  65. package/dist/monitoring/production-monitor.js +463 -0
  66. package/dist/monitoring/production-monitor.js.map +1 -0
  67. package/dist/performance/performance-monitor.d.ts +99 -0
  68. package/dist/performance/performance-monitor.d.ts.map +1 -0
  69. package/dist/performance/performance-monitor.js +253 -0
  70. package/dist/performance/performance-monitor.js.map +1 -0
  71. package/dist/sdk/bc-code-intel-client.d.ts +175 -0
  72. package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
  73. package/dist/sdk/bc-code-intel-client.js +380 -0
  74. package/dist/sdk/bc-code-intel-client.js.map +1 -0
  75. package/dist/search/intelligent-search.d.ts +97 -0
  76. package/dist/search/intelligent-search.d.ts.map +1 -0
  77. package/dist/search/intelligent-search.js +355 -0
  78. package/dist/search/intelligent-search.js.map +1 -0
  79. package/dist/security/access-control.d.ts +110 -0
  80. package/dist/security/access-control.d.ts.map +1 -0
  81. package/dist/security/access-control.js +353 -0
  82. package/dist/security/access-control.js.map +1 -0
  83. package/dist/services/code-analysis-service.d.ts +72 -0
  84. package/dist/services/code-analysis-service.d.ts.map +1 -0
  85. package/dist/services/code-analysis-service.js +811 -0
  86. package/dist/services/code-analysis-service.js.map +1 -0
  87. package/dist/services/knowledge-service.d.ts +91 -0
  88. package/dist/services/knowledge-service.d.ts.map +1 -0
  89. package/dist/services/knowledge-service.js +370 -0
  90. package/dist/services/knowledge-service.js.map +1 -0
  91. package/dist/services/methodology-service.d.ts +91 -0
  92. package/dist/services/methodology-service.d.ts.map +1 -0
  93. package/dist/services/methodology-service.js +408 -0
  94. package/dist/services/methodology-service.js.map +1 -0
  95. package/dist/services/workflow-service.d.ts +132 -0
  96. package/dist/services/workflow-service.d.ts.map +1 -0
  97. package/dist/services/workflow-service.js +277 -0
  98. package/dist/services/workflow-service.js.map +1 -0
  99. package/dist/setup/post-install.d.ts +12 -0
  100. package/dist/setup/post-install.d.ts.map +1 -0
  101. package/dist/setup/post-install.js +81 -0
  102. package/dist/setup/post-install.js.map +1 -0
  103. package/dist/streamlined-handlers.d.ts +51 -0
  104. package/dist/streamlined-handlers.d.ts.map +1 -0
  105. package/dist/streamlined-handlers.js +287 -0
  106. package/dist/streamlined-handlers.js.map +1 -0
  107. package/dist/streamlined-tools.d.ts +316 -0
  108. package/dist/streamlined-tools.d.ts.map +1 -0
  109. package/dist/streamlined-tools.js +189 -0
  110. package/dist/streamlined-tools.js.map +1 -0
  111. package/dist/test-enhanced-mcp-server.d.ts +7 -0
  112. package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
  113. package/dist/test-enhanced-mcp-server.js +177 -0
  114. package/dist/test-enhanced-mcp-server.js.map +1 -0
  115. package/dist/types/bc-knowledge.d.ts +294 -0
  116. package/dist/types/bc-knowledge.d.ts.map +1 -0
  117. package/dist/types/bc-knowledge.js +44 -0
  118. package/dist/types/bc-knowledge.js.map +1 -0
  119. package/dist/types/config-types.d.ts +180 -0
  120. package/dist/types/config-types.d.ts.map +1 -0
  121. package/dist/types/config-types.js +104 -0
  122. package/dist/types/config-types.js.map +1 -0
  123. package/dist/types/index.d.ts +5 -0
  124. package/dist/types/index.d.ts.map +1 -0
  125. package/dist/types/index.js +7 -0
  126. package/dist/types/index.js.map +1 -0
  127. package/dist/types/layer-types.d.ts +171 -0
  128. package/dist/types/layer-types.d.ts.map +1 -0
  129. package/dist/types/layer-types.js +27 -0
  130. package/dist/types/layer-types.js.map +1 -0
  131. package/dist/types/persona-types.d.ts +77 -0
  132. package/dist/types/persona-types.d.ts.map +1 -0
  133. package/dist/types/persona-types.js +341 -0
  134. package/dist/types/persona-types.js.map +1 -0
  135. package/dist/utils/path-utils.d.ts +5 -0
  136. package/dist/utils/path-utils.d.ts.map +1 -0
  137. package/dist/utils/path-utils.js +14 -0
  138. package/dist/utils/path-utils.js.map +1 -0
  139. package/dist/workflows/domain-workflows.d.ts +8 -0
  140. package/dist/workflows/domain-workflows.d.ts.map +1 -0
  141. package/dist/workflows/domain-workflows.js +360 -0
  142. package/dist/workflows/domain-workflows.js.map +1 -0
  143. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
  144. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
  145. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
  146. package/embedded-knowledge/AGENTS.md +69 -0
  147. package/embedded-knowledge/CONTRIBUTING.md +58 -0
  148. package/embedded-knowledge/LICENSE +21 -0
  149. package/embedded-knowledge/README.md +15 -0
  150. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
  151. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
  152. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
  153. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
  154. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
  155. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
  156. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
  157. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
  158. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
  159. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
  160. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
  161. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
  162. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
  163. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
  164. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
  165. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
  166. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
  167. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
  168. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +295 -0
  169. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
  170. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
  171. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
  172. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
  173. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
  174. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
  175. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
  176. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
  177. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
  178. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
  179. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
  180. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
  181. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
  182. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
  183. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
  184. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
  185. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
  186. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
  187. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
  188. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
  189. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
  190. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
  191. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
  192. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
  193. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
  194. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
  195. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
  196. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
  197. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
  198. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
  199. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
  200. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
  201. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
  202. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
  203. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
  204. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
  205. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
  206. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
  207. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
  208. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
  209. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
  210. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
  211. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
  212. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
  213. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
  214. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
  215. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
  216. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
  217. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
  218. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
  219. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
  220. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
  221. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
  222. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
  223. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
  224. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
  225. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
  226. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
  227. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
  228. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
  229. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
  230. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
  231. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
  232. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
  233. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
  234. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
  235. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
  236. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
  237. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
  238. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
  239. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
  240. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
  241. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
  242. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
  243. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
  244. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
  245. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
  246. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
  247. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
  248. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
  249. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
  250. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
  251. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
  252. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
  253. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
  254. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
  255. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
  256. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
  257. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
  258. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
  259. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
  260. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
  261. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
  262. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
  263. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
  264. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
  265. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
  266. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
  267. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
  268. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
  269. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
  270. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
  271. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
  272. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
  273. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
  274. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
  275. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
  276. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
  277. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
  278. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
  279. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
  280. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
  281. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
  282. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
  283. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
  284. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
  285. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
  286. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
  287. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
  288. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
  289. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
  290. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
  291. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
  292. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
  293. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
  294. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
  295. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
  296. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
  297. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
  298. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
  299. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
  300. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
  301. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
  302. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
  303. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
  304. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
  305. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
  306. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
  307. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
  308. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
  309. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
  310. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
  311. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
  312. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
  313. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
  314. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
  315. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
  316. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
  317. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
  318. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
  319. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
  320. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
  321. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
  322. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
  323. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
  324. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
  325. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
  326. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
  327. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
  328. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
  329. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
  330. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
  331. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
  332. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
  333. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
  334. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
  335. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
  336. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
  337. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
  338. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
  339. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
  340. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
  341. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
  342. package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
  343. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
  344. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
  345. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
  346. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
  347. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
  348. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
  349. package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
  350. package/embedded-knowledge/indexes/domain-catalog.json +106 -0
  351. package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
  352. package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
  353. package/embedded-knowledge/indexes/tags/access-control.json +1 -0
  354. package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
  355. package/embedded-knowledge/indexes/tags/actions.json +1 -0
  356. package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
  357. package/embedded-knowledge/indexes/tags/advanced.json +1 -0
  358. package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
  359. package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
  360. package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
  361. package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
  362. package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
  363. package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
  364. package/embedded-knowledge/indexes/tags/analytics.json +1 -0
  365. package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
  366. package/embedded-knowledge/indexes/tags/api-design.json +1 -0
  367. package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
  368. package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
  369. package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
  370. package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
  371. package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
  372. package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
  373. package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
  374. package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
  375. package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
  376. package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
  377. package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
  378. package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
  379. package/embedded-knowledge/indexes/tags/api.json +1 -0
  380. package/embedded-knowledge/indexes/tags/architecture.json +1 -0
  381. package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
  382. package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
  383. package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
  384. package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
  385. package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
  386. package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
  387. package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
  388. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
  389. package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
  390. package/embedded-knowledge/indexes/tags/binding.json +1 -0
  391. package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
  392. package/embedded-knowledge/indexes/tags/blocks.json +1 -0
  393. package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
  394. package/embedded-knowledge/indexes/tags/branching.json +1 -0
  395. package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
  396. package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
  397. package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
  398. package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
  399. package/embedded-knowledge/indexes/tags/business-process.json +1 -0
  400. package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
  401. package/embedded-knowledge/indexes/tags/caching.json +1 -0
  402. package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
  403. package/embedded-knowledge/indexes/tags/case.json +1 -0
  404. package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
  405. package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
  406. package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
  407. package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
  408. package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
  409. package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
  410. package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
  411. package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
  412. package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
  413. package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
  414. package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
  415. package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
  416. package/embedded-knowledge/indexes/tags/code-style.json +1 -0
  417. package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
  418. package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
  419. package/embedded-knowledge/indexes/tags/comments.json +1 -0
  420. package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
  421. package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
  422. package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
  423. package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
  424. package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
  425. package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
  426. package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
  427. package/embedded-knowledge/indexes/tags/conditional.json +1 -0
  428. package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
  429. package/embedded-knowledge/indexes/tags/consistency.json +1 -0
  430. package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
  431. package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
  432. package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
  433. package/embedded-knowledge/indexes/tags/correlation.json +1 -0
  434. package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
  435. package/embedded-knowledge/indexes/tags/data-access.json +1 -0
  436. package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
  437. package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
  438. package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
  439. package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
  440. package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
  441. package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
  442. package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
  443. package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
  444. package/embedded-knowledge/indexes/tags/database.json +1 -0
  445. package/embedded-knowledge/indexes/tags/debugging.json +1 -0
  446. package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
  447. package/embedded-knowledge/indexes/tags/declaration.json +1 -0
  448. package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
  449. package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
  450. package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
  451. package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
  452. package/embedded-knowledge/indexes/tags/deployment.json +1 -0
  453. package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
  454. package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
  455. package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
  456. package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
  457. package/embedded-knowledge/indexes/tags/documentation.json +1 -0
  458. package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
  459. package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
  460. package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
  461. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
  462. package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
  463. package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
  464. package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
  465. package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
  466. package/embedded-knowledge/indexes/tags/error-text.json +1 -0
  467. package/embedded-knowledge/indexes/tags/etag.json +1 -0
  468. package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
  469. package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
  470. package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
  471. package/embedded-knowledge/indexes/tags/events.json +1 -0
  472. package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
  473. package/embedded-knowledge/indexes/tags/expressions.json +1 -0
  474. package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
  475. package/embedded-knowledge/indexes/tags/extensions.json +1 -0
  476. package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
  477. package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
  478. package/embedded-knowledge/indexes/tags/field-control.json +1 -0
  479. package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
  480. package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
  481. package/embedded-knowledge/indexes/tags/field-state.json +1 -0
  482. package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
  483. package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
  484. package/embedded-knowledge/indexes/tags/fields.json +1 -0
  485. package/embedded-knowledge/indexes/tags/filtering.json +1 -0
  486. package/embedded-knowledge/indexes/tags/filters.json +1 -0
  487. package/embedded-knowledge/indexes/tags/formatting.json +1 -0
  488. package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
  489. package/embedded-knowledge/indexes/tags/http-status.json +1 -0
  490. package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
  491. package/embedded-knowledge/indexes/tags/implementation.json +1 -0
  492. package/embedded-knowledge/indexes/tags/indentation.json +1 -0
  493. package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
  494. package/embedded-knowledge/indexes/tags/indexing.json +1 -0
  495. package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
  496. package/embedded-knowledge/indexes/tags/integration.json +1 -0
  497. package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
  498. package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
  499. package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
  500. package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
  501. package/embedded-knowledge/indexes/tags/isolation.json +1 -0
  502. package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
  503. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
  504. package/embedded-knowledge/indexes/tags/keywords.json +1 -0
  505. package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
  506. package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
  507. package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
  508. package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
  509. package/embedded-knowledge/indexes/tags/localization.json +1 -0
  510. package/embedded-knowledge/indexes/tags/logging.json +1 -0
  511. package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
  512. package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
  513. package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
  514. package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
  515. package/embedded-knowledge/indexes/tags/memory.json +1 -0
  516. package/embedded-knowledge/indexes/tags/message-design.json +1 -0
  517. package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
  518. package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
  519. package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
  520. package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
  521. package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
  522. package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
  523. package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
  524. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
  525. package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
  526. package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
  527. package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
  528. package/embedded-knowledge/indexes/tags/naming.json +1 -0
  529. package/embedded-knowledge/indexes/tags/navigation.json +1 -0
  530. package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
  531. package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
  532. package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
  533. package/embedded-knowledge/indexes/tags/no-series.json +1 -0
  534. package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
  535. package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
  536. package/embedded-knowledge/indexes/tags/odata.json +1 -0
  537. package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
  538. package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
  539. package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
  540. package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
  541. package/embedded-knowledge/indexes/tags/operators.json +1 -0
  542. package/embedded-knowledge/indexes/tags/optimization.json +1 -0
  543. package/embedded-knowledge/indexes/tags/order.json +1 -0
  544. package/embedded-knowledge/indexes/tags/organization.json +1 -0
  545. package/embedded-knowledge/indexes/tags/pages.json +1 -0
  546. package/embedded-knowledge/indexes/tags/parameters.json +1 -0
  547. package/embedded-knowledge/indexes/tags/patterns.json +1 -0
  548. package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
  549. package/embedded-knowledge/indexes/tags/performance.json +1 -0
  550. package/embedded-knowledge/indexes/tags/placement.json +1 -0
  551. package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
  552. package/embedded-knowledge/indexes/tags/posting.json +1 -0
  553. package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
  554. package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
  555. package/embedded-knowledge/indexes/tags/privacy.json +1 -0
  556. package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
  557. package/embedded-knowledge/indexes/tags/production.json +1 -0
  558. package/embedded-knowledge/indexes/tags/productivity.json +1 -0
  559. package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
  560. package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
  561. package/embedded-knowledge/indexes/tags/ranges.json +1 -0
  562. package/embedded-knowledge/indexes/tags/readability.json +1 -0
  563. package/embedded-knowledge/indexes/tags/record-access.json +1 -0
  564. package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
  565. package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
  566. package/embedded-knowledge/indexes/tags/reference.json +1 -0
  567. package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
  568. package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
  569. package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
  570. package/embedded-knowledge/indexes/tags/runtime.json +1 -0
  571. package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
  572. package/embedded-knowledge/indexes/tags/security.json +1 -0
  573. package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
  574. package/embedded-knowledge/indexes/tags/serialization.json +1 -0
  575. package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
  576. package/embedded-knowledge/indexes/tags/session.json +1 -0
  577. package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
  578. package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
  579. package/embedded-knowledge/indexes/tags/sift.json +1 -0
  580. package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
  581. package/embedded-knowledge/indexes/tags/spacing.json +1 -0
  582. package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
  583. package/embedded-knowledge/indexes/tags/standards.json +1 -0
  584. package/embedded-knowledge/indexes/tags/statements.json +1 -0
  585. package/embedded-knowledge/indexes/tags/streaming.json +1 -0
  586. package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
  587. package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
  588. package/embedded-knowledge/indexes/tags/structure.json +1 -0
  589. package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
  590. package/embedded-knowledge/indexes/tags/switch.json +1 -0
  591. package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
  592. package/embedded-knowledge/indexes/tags/syntax.json +1 -0
  593. package/embedded-knowledge/indexes/tags/systemid.json +1 -0
  594. package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
  595. package/embedded-knowledge/indexes/tags/table-events.json +1 -0
  596. package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
  597. package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
  598. package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
  599. package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
  600. package/embedded-knowledge/indexes/tags/template-method.json +1 -0
  601. package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
  602. package/embedded-knowledge/indexes/tags/testfield.json +1 -0
  603. package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
  604. package/embedded-knowledge/indexes/tags/triggers.json +1 -0
  605. package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
  606. package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
  607. package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
  608. package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
  609. package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
  610. package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
  611. package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
  612. package/embedded-knowledge/indexes/tags/validation.json +1 -0
  613. package/embedded-knowledge/indexes/tags/variables.json +1 -0
  614. package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
  615. package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
  616. package/embedded-knowledge/indexes/tags/web-services.json +1 -0
  617. package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
  618. package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
  619. package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
  620. package/embedded-knowledge/indexes/tags/workspace.json +1 -0
  621. package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
  622. package/embedded-knowledge/indexes/topic-relationships.json +128 -0
  623. package/embedded-knowledge/methodologies/index.json +81 -0
  624. package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
  625. package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
  626. package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
  627. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
  628. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
  629. package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
  630. package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
  631. package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
  632. package/embedded-knowledge/methodologies/phases/performance.md +211 -0
  633. package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
  634. package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
  635. package/embedded-knowledge/methodologies/phases/verification.md +146 -0
  636. package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
  637. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
  638. package/package.json +74 -0
@@ -0,0 +1,346 @@
1
+ # Named Parameter Pattern - AL Code Examples
2
+
3
+ ## Good Examples
4
+
5
+ ### Self-Documenting Variable Names
6
+ ```al
7
+ procedure ProcessSalesOrder(DocumentNo: Code[20]): Boolean
8
+ var
9
+ OrderToProcess: Code[20];
10
+ ProcessingResult: Boolean;
11
+ CustomerValidationPassed: Boolean;
12
+ InventoryCheckSuccessful: Boolean;
13
+ begin
14
+ OrderToProcess := DocumentNo;
15
+
16
+ // Clear intent through descriptive variable names
17
+ CustomerValidationPassed := ValidateCustomerCredit(OrderToProcess);
18
+ if not CustomerValidationPassed then
19
+ exit(false);
20
+
21
+ InventoryCheckSuccessful := CheckInventoryAvailability(OrderToProcess);
22
+ if not InventoryCheckSuccessful then
23
+ exit(false);
24
+
25
+ ProcessingResult := PostSalesOrder(OrderToProcess);
26
+ exit(ProcessingResult);
27
+ end;
28
+ ```
29
+
30
+ ### Complex Parameter Clarity
31
+ ```al
32
+ procedure CalculateItemCost(ItemNo: Code[20]; CalculationDate: Date; IncludeIndirectCosts: Boolean; UseFIFOMethod: Boolean): Decimal
33
+ var
34
+ ItemNumberToCalculate: Code[20];
35
+ CostCalculationDate: Date;
36
+ ShouldIncludeIndirectCosts: Boolean;
37
+ ShouldUseFIFOCosting: Boolean;
38
+ CalculatedUnitCost: Decimal;
39
+ begin
40
+ // Named variables make parameter usage crystal clear
41
+ ItemNumberToCalculate := ItemNo;
42
+ CostCalculationDate := CalculationDate;
43
+ ShouldIncludeIndirectCosts := IncludeIndirectCosts;
44
+ ShouldUseFIFOCosting := UseFIFOMethod;
45
+
46
+ if ShouldUseFIFOCosting then
47
+ CalculatedUnitCost := GetFIFOCost(ItemNumberToCalculate, CostCalculationDate)
48
+ else
49
+ CalculatedUnitCost := GetAverageCost(ItemNumberToCalculate, CostCalculationDate);
50
+
51
+ if ShouldIncludeIndirectCosts then
52
+ CalculatedUnitCost += GetIndirectCosts(ItemNumberToCalculate, CostCalculationDate);
53
+
54
+ exit(CalculatedUnitCost);
55
+ end;
56
+ ```
57
+
58
+ ### Boolean Parameter Documentation
59
+ ```al
60
+ procedure CreateCustomerStatement(CustomerNo: Code[20]; StartDate: Date; EndDate: Date; IncludeZeroBalances: Boolean; ShowDetailedEntries: Boolean; PrintImmediately: Boolean)
61
+ var
62
+ CustomerToProcess: Code[20];
63
+ StatementStartDate: Date;
64
+ StatementEndDate: Date;
65
+ ShouldIncludeZeroBalanceItems: Boolean;
66
+ ShouldShowDetailedLedgerEntries: Boolean;
67
+ ShouldPrintStatementImmediately: Boolean;
68
+ StatementReport: Report "Customer Statement";
69
+ begin
70
+ // Clear boolean intent through descriptive naming
71
+ CustomerToProcess := CustomerNo;
72
+ StatementStartDate := StartDate;
73
+ StatementEndDate := EndDate;
74
+ ShouldIncludeZeroBalanceItems := IncludeZeroBalances;
75
+ ShouldShowDetailedLedgerEntries := ShowDetailedEntries;
76
+ ShouldPrintStatementImmediately := PrintImmediately;
77
+
78
+ StatementReport.SetTableView(CustomerToProcess, StatementStartDate, StatementEndDate);
79
+
80
+ if ShouldIncludeZeroBalanceItems then
81
+ StatementReport.SetIncludeZeroBalances();
82
+
83
+ if ShouldShowDetailedLedgerEntries then
84
+ StatementReport.SetShowDetails();
85
+
86
+ if ShouldPrintStatementImmediately then
87
+ StatementReport.Run()
88
+ else
89
+ StatementReport.RunModal();
90
+ end;
91
+ ```
92
+
93
+ ### API Integration with Clear Parameters
94
+ ```al
95
+ procedure SyncWithExternalSystem(CustomerNo: Code[20]; SyncDirection: Option Import,Export,Bidirectional; ForceFullSync: Boolean; LogSyncActivity: Boolean): Boolean
96
+ var
97
+ CustomerToSync: Code[20];
98
+ ChosenSyncDirection: Option Import,Export,Bidirectional;
99
+ ShouldForceCompleteSync: Boolean;
100
+ ShouldLogAllActivity: Boolean;
101
+ SyncResult: Boolean;
102
+ ExternalAPIClient: Codeunit "External API Client";
103
+ begin
104
+ // Parameter mapping with clear intent
105
+ CustomerToSync := CustomerNo;
106
+ ChosenSyncDirection := SyncDirection;
107
+ ShouldForceCompleteSync := ForceFullSync;
108
+ ShouldLogAllActivity := LogSyncActivity;
109
+
110
+ if ShouldLogAllActivity then
111
+ LogSyncStart(CustomerToSync, ChosenSyncDirection, ShouldForceCompleteSync);
112
+
113
+ case ChosenSyncDirection of
114
+ ChosenSyncDirection::Import:
115
+ SyncResult := ExternalAPIClient.ImportCustomerData(CustomerToSync, ShouldForceCompleteSync);
116
+ ChosenSyncDirection::Export:
117
+ SyncResult := ExternalAPIClient.ExportCustomerData(CustomerToSync, ShouldForceCompleteSync);
118
+ ChosenSyncDirection::Bidirectional:
119
+ SyncResult := ExternalAPIClient.SyncCustomerBidirectional(CustomerToSync, ShouldForceCompleteSync);
120
+ end;
121
+
122
+ if ShouldLogAllActivity then
123
+ LogSyncComplete(CustomerToSync, SyncResult);
124
+
125
+ exit(SyncResult);
126
+ end;
127
+ ```
128
+
129
+ ## Bad Examples
130
+
131
+ ### Unclear Parameter Usage
132
+ ```al
133
+ procedure ProcessSalesOrder(DocumentNo: Code[20]): Boolean
134
+ var
135
+ Rec: Record "Sales Header";
136
+ Result: Boolean;
137
+ begin
138
+ // BAD: Unclear what these boolean literals mean
139
+ Result := ValidateOrder(DocumentNo, true, false, true);
140
+ if not Result then
141
+ exit(false);
142
+
143
+ // BAD: Magic numbers and unclear parameters
144
+ Result := CalculateCost(DocumentNo, 0, 1, true);
145
+ if not Result then
146
+ exit(false);
147
+
148
+ // BAD: Multiple boolean parameters without context
149
+ exit(PostOrder(DocumentNo, true, false, true, false));
150
+ end;
151
+ ```
152
+
153
+ ### Confusing Boolean Chains
154
+ ```al
155
+ procedure CreateReport(CustomerNo: Code[20]; StartDate: Date; EndDate: Date): Boolean
156
+ begin
157
+ // BAD: What do these boolean values represent?
158
+ if GenerateCustomerReport(CustomerNo, StartDate, EndDate, true, false, true, false, true) then
159
+ exit(ProcessReportOutput(CustomerNo, true, false))
160
+ else
161
+ exit(HandleReportError(CustomerNo, false, true));
162
+ end;
163
+ ```
164
+
165
+ ### Ambiguous Numeric Parameters
166
+ ```al
167
+ procedure SetupItemPosting(ItemNo: Code[20]): Boolean
168
+ var
169
+ Item: Record Item;
170
+ begin
171
+ // BAD: What do these numbers mean?
172
+ if ConfigureItemSettings(ItemNo, 1, 0, 2, 5) then begin
173
+ // BAD: More unclear parameters
174
+ exit(ApplyPostingSettings(ItemNo, 3, 1, 0));
175
+ end;
176
+
177
+ exit(false);
178
+ end;
179
+ ```
180
+
181
+ ## Best Practices
182
+
183
+ ### Intermediate Variable Strategy
184
+ ```al
185
+ procedure ProcessPurchaseOrder(DocumentNo: Code[20]; ValidateVendor: Boolean; CheckInventory: Boolean; PostImmediately: Boolean): Boolean
186
+ var
187
+ OrderDocumentNumber: Code[20];
188
+ ShouldValidateVendorCredit: Boolean;
189
+ ShouldCheckInventoryLevels: Boolean;
190
+ ShouldPostOrderImmediately: Boolean;
191
+ ValidationSuccessful: Boolean;
192
+ InventoryCheckPassed: Boolean;
193
+ PostingSuccessful: Boolean;
194
+ begin
195
+ // Map parameters to descriptive variables
196
+ OrderDocumentNumber := DocumentNo;
197
+ ShouldValidateVendorCredit := ValidateVendor;
198
+ ShouldCheckInventoryLevels := CheckInventory;
199
+ ShouldPostOrderImmediately := PostImmediately;
200
+
201
+ // Clear conditional logic
202
+ if ShouldValidateVendorCredit then begin
203
+ ValidationSuccessful := ValidateVendorCredit(OrderDocumentNumber);
204
+ if not ValidationSuccessful then
205
+ exit(false);
206
+ end;
207
+
208
+ if ShouldCheckInventoryLevels then begin
209
+ InventoryCheckPassed := CheckInventoryAvailability(OrderDocumentNumber);
210
+ if not InventoryCheckPassed then
211
+ exit(false);
212
+ end;
213
+
214
+ if ShouldPostOrderImmediately then begin
215
+ PostingSuccessful := PostPurchaseOrder(OrderDocumentNumber);
216
+ exit(PostingSuccessful);
217
+ end;
218
+
219
+ exit(true);
220
+ end;
221
+ ```
222
+
223
+ ### Option Parameter Clarity
224
+ ```al
225
+ procedure GenerateFinancialReport(ReportType: Option Summary,Detailed,Comparative; OutputFormat: Option PDF,Excel,XML; EmailDelivery: Boolean): Boolean
226
+ var
227
+ SelectedReportType: Option Summary,Detailed,Comparative;
228
+ ChosenOutputFormat: Option PDF,Excel,XML;
229
+ ShouldEmailReport: Boolean;
230
+ ReportGenerator: Codeunit "Financial Report Generator";
231
+ GenerationSuccessful: Boolean;
232
+ begin
233
+ // Clear option handling
234
+ SelectedReportType := ReportType;
235
+ ChosenOutputFormat := OutputFormat;
236
+ ShouldEmailReport := EmailDelivery;
237
+
238
+ case SelectedReportType of
239
+ SelectedReportType::Summary:
240
+ GenerationSuccessful := ReportGenerator.GenerateSummaryReport(ChosenOutputFormat);
241
+ SelectedReportType::Detailed:
242
+ GenerationSuccessful := ReportGenerator.GenerateDetailedReport(ChosenOutputFormat);
243
+ SelectedReportType::Comparative:
244
+ GenerationSuccessful := ReportGenerator.GenerateComparativeReport(ChosenOutputFormat);
245
+ end;
246
+
247
+ if GenerationSuccessful and ShouldEmailReport then
248
+ EmailReport(SelectedReportType, ChosenOutputFormat);
249
+
250
+ exit(GenerationSuccessful);
251
+ end;
252
+ ```
253
+
254
+ ### Record Parameter Documentation
255
+ ```al
256
+ procedure UpdateCustomerAddress(var CustomerRecord: Record Customer; NewAddressLine1: Text[100]; NewAddressLine2: Text[50]; NewCity: Text[30]; NewPostCode: Code[20]; ValidateAddress: Boolean): Boolean
257
+ var
258
+ CustomerToUpdate: Record Customer;
259
+ ProposedAddressLine1: Text[100];
260
+ ProposedAddressLine2: Text[50];
261
+ ProposedCity: Text[30];
262
+ ProposedPostalCode: Code[20];
263
+ ShouldValidateAddressWithPostalService: Boolean;
264
+ AddressValidationSuccessful: Boolean;
265
+ begin
266
+ // Clear parameter intent
267
+ CustomerToUpdate := CustomerRecord;
268
+ ProposedAddressLine1 := NewAddressLine1;
269
+ ProposedAddressLine2 := NewAddressLine2;
270
+ ProposedCity := NewCity;
271
+ ProposedPostalCode := NewPostCode;
272
+ ShouldValidateAddressWithPostalService := ValidateAddress;
273
+
274
+ // Validate address if requested
275
+ if ShouldValidateAddressWithPostalService then begin
276
+ AddressValidationSuccessful := ValidateAddressWithPostalService(
277
+ ProposedAddressLine1,
278
+ ProposedAddressLine2,
279
+ ProposedCity,
280
+ ProposedPostalCode
281
+ );
282
+
283
+ if not AddressValidationSuccessful then
284
+ exit(false);
285
+ end;
286
+
287
+ // Apply address changes
288
+ CustomerToUpdate.Address := ProposedAddressLine1;
289
+ CustomerToUpdate."Address 2" := ProposedAddressLine2;
290
+ CustomerToUpdate.City := ProposedCity;
291
+ CustomerToUpdate."Post Code" := ProposedPostalCode;
292
+ CustomerToUpdate.Modify(true);
293
+
294
+ // Return updated record
295
+ CustomerRecord := CustomerToUpdate;
296
+ exit(true);
297
+ end;
298
+ ```
299
+
300
+ ### Complex Calculation Clarity
301
+ ```al
302
+ procedure CalculateExtendedPrice(BasePrice: Decimal; DiscountPercent: Decimal; TaxRate: Decimal; IncludeTax: Boolean; RoundToNearestCent: Boolean): Decimal
303
+ var
304
+ ItemBasePrice: Decimal;
305
+ ApplicableDiscountPercent: Decimal;
306
+ ApplicableTaxRate: Decimal;
307
+ ShouldIncludeTaxInCalculation: Boolean;
308
+ ShouldRoundResultToNearestCent: Boolean;
309
+ PriceAfterDiscount: Decimal;
310
+ TaxAmount: Decimal;
311
+ FinalCalculatedPrice: Decimal;
312
+ begin
313
+ // Parameter mapping for clarity
314
+ ItemBasePrice := BasePrice;
315
+ ApplicableDiscountPercent := DiscountPercent;
316
+ ApplicableTaxRate := TaxRate;
317
+ ShouldIncludeTaxInCalculation := IncludeTax;
318
+ ShouldRoundResultToNearestCent := RoundToNearestCent;
319
+
320
+ // Calculate discount
321
+ PriceAfterDiscount := ItemBasePrice * (1 - (ApplicableDiscountPercent / 100));
322
+
323
+ // Calculate tax if required
324
+ if ShouldIncludeTaxInCalculation then begin
325
+ TaxAmount := PriceAfterDiscount * (ApplicableTaxRate / 100);
326
+ FinalCalculatedPrice := PriceAfterDiscount + TaxAmount;
327
+ end else begin
328
+ FinalCalculatedPrice := PriceAfterDiscount;
329
+ end;
330
+
331
+ // Round if requested
332
+ if ShouldRoundResultToNearestCent then
333
+ FinalCalculatedPrice := Round(FinalCalculatedPrice, 0.01);
334
+
335
+ exit(FinalCalculatedPrice);
336
+ end;
337
+ ```
338
+
339
+ ## Implementation Guidelines
340
+
341
+ 1. **Use descriptive intermediate variables** - Map parameters to meaningful names immediately
342
+ 2. **Apply consistent naming patterns** - Use prefixes like "Should", "Chosen", "Selected" for clarity
343
+ 3. **Document boolean intent** - Make boolean parameter purpose clear through variable names
344
+ 4. **Handle option parameters explicitly** - Use case statements with named option variables
345
+ 5. **Group related parameters** - Organize parameter mapping logically in procedure start
346
+ 6. **Validate parameter combinations** - Use clear variable names in validation logic
@@ -0,0 +1,298 @@
1
+ # Record Find Early Exit - AL Code Examples
2
+
3
+ ## Good Examples
4
+
5
+ ### Early Exit with Find Pattern
6
+ ```al
7
+ procedure GetCustomerName(CustomerNo: Code[20]): Text[100]
8
+ var
9
+ Customer: Record Customer;
10
+ begin
11
+ // Early exit - avoid unnecessary processing
12
+ if not Customer.Get(CustomerNo) then
13
+ exit('');
14
+
15
+ // Only execute if record found
16
+ exit(Customer.Name);
17
+ end;
18
+ ```
19
+
20
+ ### Complex Find with Early Validation
21
+ ```al
22
+ procedure ProcessActiveCustomerOrders(CustomerNo: Code[20]): Boolean
23
+ var
24
+ Customer: Record Customer;
25
+ SalesHeader: Record "Sales Header";
26
+ ProcessedCount: Integer;
27
+ begin
28
+ // Early exit for invalid customer
29
+ if CustomerNo = '' then
30
+ exit(false);
31
+
32
+ // Early exit if customer doesn't exist
33
+ if not Customer.Get(CustomerNo) then
34
+ exit(false);
35
+
36
+ // Early exit if customer is blocked
37
+ if Customer.Blocked <> Customer.Blocked::" " then
38
+ exit(false);
39
+
40
+ // Process orders only after all validations pass
41
+ SalesHeader.SetRange("Sell-to Customer No.", CustomerNo);
42
+ SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
43
+ SalesHeader.SetRange(Status, SalesHeader.Status::Open);
44
+
45
+ if not SalesHeader.FindSet() then
46
+ exit(false);
47
+
48
+ repeat
49
+ if ProcessSalesOrder(SalesHeader."No.") then
50
+ ProcessedCount += 1;
51
+ until SalesHeader.Next() = 0;
52
+
53
+ exit(ProcessedCount > 0);
54
+ end;
55
+ ```
56
+
57
+ ### FindFirst with Early Exit
58
+ ```al
59
+ procedure GetLatestInvoiceAmount(CustomerNo: Code[20]): Decimal
60
+ var
61
+ SalesInvoiceHeader: Record "Sales Invoice Header";
62
+ begin
63
+ SalesInvoiceHeader.SetRange("Sell-to Customer No.", CustomerNo);
64
+ SalesInvoiceHeader.SetCurrentKey("Posting Date");
65
+ SalesInvoiceHeader.Ascending(false);
66
+
67
+ // Early exit if no invoices found
68
+ if not SalesInvoiceHeader.FindFirst() then
69
+ exit(0);
70
+
71
+ SalesInvoiceHeader.CalcFields("Amount Including VAT");
72
+ exit(SalesInvoiceHeader."Amount Including VAT");
73
+ end;
74
+ ```
75
+
76
+ ### Multiple Table Lookup Optimization
77
+ ```al
78
+ procedure ValidateItemAvailability(ItemNo: Code[20]; LocationCode: Code[10]; RequiredQty: Decimal): Boolean
79
+ var
80
+ Item: Record Item;
81
+ Location: Record Location;
82
+ ItemLedgerEntry: Record "Item Ledger Entry";
83
+ AvailableQty: Decimal;
84
+ begin
85
+ // Early validation - item must exist
86
+ if not Item.Get(ItemNo) then
87
+ exit(false);
88
+
89
+ // Early exit if item is blocked
90
+ if Item.Blocked then
91
+ exit(false);
92
+
93
+ // Early validation - location must exist if specified
94
+ if (LocationCode <> '') and (not Location.Get(LocationCode)) then
95
+ exit(false);
96
+
97
+ // Calculate available quantity only after validations
98
+ ItemLedgerEntry.SetRange("Item No.", ItemNo);
99
+ if LocationCode <> '' then
100
+ ItemLedgerEntry.SetRange("Location Code", LocationCode);
101
+ ItemLedgerEntry.CalcSums(Quantity);
102
+ AvailableQty := ItemLedgerEntry.Quantity;
103
+
104
+ exit(AvailableQty >= RequiredQty);
105
+ end;
106
+ ```
107
+
108
+ ## Bad Examples
109
+
110
+ ### Unnecessary Nesting After Find
111
+ ```al
112
+ procedure GetCustomerName(CustomerNo: Code[20]): Text[100]
113
+ var
114
+ Customer: Record Customer;
115
+ begin
116
+ if Customer.Get(CustomerNo) then begin
117
+ // Unnecessary nesting - should return early on not found
118
+ exit(Customer.Name);
119
+ end else begin
120
+ // Process all failure scenarios in else block
121
+ if CustomerNo = '' then begin
122
+ exit('Invalid Customer Number');
123
+ end else begin
124
+ exit('Customer Not Found');
125
+ end;
126
+ end;
127
+ end;
128
+ ```
129
+
130
+ ### Processing in Nested Blocks
131
+ ```al
132
+ procedure ProcessCustomerOrders(CustomerNo: Code[20]): Boolean
133
+ var
134
+ Customer: Record Customer;
135
+ SalesHeader: Record "Sales Header";
136
+ ProcessedCount: Integer;
137
+ begin
138
+ if Customer.Get(CustomerNo) then begin
139
+ if Customer.Blocked = Customer.Blocked::" " then begin
140
+ SalesHeader.SetRange("Sell-to Customer No.", CustomerNo);
141
+ SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
142
+ if SalesHeader.FindSet() then begin
143
+ repeat
144
+ if ProcessSalesOrder(SalesHeader."No.") then begin
145
+ ProcessedCount += 1;
146
+ end;
147
+ until SalesHeader.Next() = 0;
148
+ if ProcessedCount > 0 then begin
149
+ exit(true);
150
+ end else begin
151
+ exit(false);
152
+ end;
153
+ end else begin
154
+ exit(false);
155
+ end;
156
+ end else begin
157
+ exit(false);
158
+ end;
159
+ end else begin
160
+ exit(false);
161
+ end;
162
+ end;
163
+ ```
164
+
165
+ ### Inefficient Multiple Lookups
166
+ ```al
167
+ procedure GetItemDescription(ItemNo: Code[20]): Text[100]
168
+ var
169
+ Item: Record Item;
170
+ ItemTranslation: Record "Item Translation";
171
+ Description: Text[100];
172
+ begin
173
+ if Item.Get(ItemNo) then begin
174
+ Description := Item.Description;
175
+ // Inefficient: Could exit early with base description
176
+ ItemTranslation.SetRange("Item No.", ItemNo);
177
+ ItemTranslation.SetRange("Language Code", GlobalLanguage);
178
+ if ItemTranslation.FindFirst() then begin
179
+ if ItemTranslation.Description <> '' then begin
180
+ Description := ItemTranslation.Description;
181
+ end;
182
+ end;
183
+ exit(Description);
184
+ end else begin
185
+ exit('');
186
+ end;
187
+ end;
188
+ ```
189
+
190
+ ## Best Practices
191
+
192
+ ### Guard Clause Pattern
193
+ ```al
194
+ procedure CalculateCustomerBalance(CustomerNo: Code[20]): Decimal
195
+ var
196
+ Customer: Record Customer;
197
+ CustLedgerEntry: Record "Cust. Ledger Entry";
198
+ begin
199
+ // Guard clauses with early exits
200
+ if CustomerNo = '' then
201
+ exit(0);
202
+
203
+ if not Customer.Get(CustomerNo) then
204
+ exit(0);
205
+
206
+ // Main logic only executes with valid data
207
+ CustLedgerEntry.SetRange("Customer No.", CustomerNo);
208
+ CustLedgerEntry.SetRange(Open, true);
209
+ CustLedgerEntry.CalcSums("Remaining Amt. (LCY)");
210
+ exit(CustLedgerEntry."Remaining Amt. (LCY)");
211
+ end;
212
+ ```
213
+
214
+ ### Efficient Existence Check
215
+ ```al
216
+ procedure CustomerHasOpenOrders(CustomerNo: Code[20]): Boolean
217
+ var
218
+ SalesHeader: Record "Sales Header";
219
+ begin
220
+ // Early exit for invalid input
221
+ if CustomerNo = '' then
222
+ exit(false);
223
+
224
+ // Efficient existence check with FindFirst
225
+ SalesHeader.SetRange("Sell-to Customer No.", CustomerNo);
226
+ SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
227
+ SalesHeader.SetRange(Status, SalesHeader.Status::Open);
228
+
229
+ // Return boolean directly - no additional processing needed
230
+ exit(not SalesHeader.IsEmpty);
231
+ end;
232
+ ```
233
+
234
+ ### Optimized Filter Chain
235
+ ```al
236
+ procedure GetActiveItemCount(ItemCategoryCode: Code[20]): Integer
237
+ var
238
+ Item: Record Item;
239
+ begin
240
+ // Early exit for empty category
241
+ if ItemCategoryCode = '' then
242
+ exit(0);
243
+
244
+ // Set filters before find operation
245
+ Item.SetRange("Item Category Code", ItemCategoryCode);
246
+ Item.SetRange(Blocked, false);
247
+ Item.SetRange(Type, Item.Type::Inventory);
248
+
249
+ // Early exit if no matching records
250
+ if Item.IsEmpty then
251
+ exit(0);
252
+
253
+ exit(Item.Count);
254
+ end;
255
+ ```
256
+
257
+ ### Resource Management Pattern
258
+ ```al
259
+ procedure ProcessItemBatch(var ItemFilter: Record Item): Integer
260
+ var
261
+ ProcessedCount: Integer;
262
+ TempItem: Record Item temporary;
263
+ begin
264
+ // Early exit if no records to process
265
+ if ItemFilter.IsEmpty then
266
+ exit(0);
267
+
268
+ // Copy to temporary for safe processing
269
+ if ItemFilter.FindSet() then begin
270
+ repeat
271
+ TempItem := ItemFilter;
272
+ TempItem.Insert();
273
+ until ItemFilter.Next() = 0;
274
+ end;
275
+
276
+ // Early exit if copy failed
277
+ if TempItem.IsEmpty then
278
+ exit(0);
279
+
280
+ // Process temporary records
281
+ TempItem.FindSet();
282
+ repeat
283
+ if ProcessSingleItem(TempItem) then
284
+ ProcessedCount += 1;
285
+ until TempItem.Next() = 0;
286
+
287
+ exit(ProcessedCount);
288
+ end;
289
+ ```
290
+
291
+ ## Performance Guidelines
292
+
293
+ 1. **Use early exits to avoid unnecessary database operations**
294
+ 2. **Apply filters before Find operations to reduce record set**
295
+ 3. **Check IsEmpty before iterating large record sets**
296
+ 4. **Use FindFirst for existence checks instead of FindSet**
297
+ 5. **Validate input parameters before database access**
298
+ 6. **Group related validations for efficient early exits**