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,395 @@
1
+ # Event Subscriber Architecture - AL Code Examples
2
+
3
+ ## Good Examples
4
+
5
+ ### Single Responsibility Subscriber
6
+ ```al
7
+ codeunit 50100 "Customer Credit Check Subscriber"
8
+ {
9
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnBeforePostSalesDoc', '', false, false)]
10
+ local procedure OnBeforePostSalesDoc(var SalesHeader: Record "Sales Header"; CommitIsSupressed: Boolean; PreviewMode: Boolean; var HideProgressWindow: Boolean; var IsHandled: Boolean)
11
+ var
12
+ CreditManagement: Codeunit "Credit Management";
13
+ begin
14
+ // Single responsibility: Credit validation only
15
+ if SalesHeader."Document Type" <> SalesHeader."Document Type"::Order then
16
+ exit;
17
+
18
+ if PreviewMode then
19
+ exit;
20
+
21
+ // Early exit if already handled
22
+ if IsHandled then
23
+ exit;
24
+
25
+ // Focused credit check logic
26
+ if not CreditManagement.ValidateCustomerCredit(SalesHeader."Sell-to Customer No.", SalesHeader."Amount Including VAT") then begin
27
+ Error('Credit limit exceeded for customer %1', SalesHeader."Sell-to Customer No.");
28
+ end;
29
+ end;
30
+ }
31
+ ```
32
+
33
+ ### Error-Isolated Integration Subscriber
34
+ ```al
35
+ codeunit 50101 "External System Integration"
36
+ {
37
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Jnl.-Post Line", 'OnAfterPostItemJnlLine', '', false, false)]
38
+ local procedure OnAfterPostItemJnlLine(var ItemJournalLine: Record "Item Journal Line"; ItemLedgerEntry: Record "Item Ledger Entry"; var ValueEntryNo: Integer; var InventoryPostingToGL: Codeunit "Inventory Posting To G/L")
39
+ var
40
+ ExternalSystemMgt: Codeunit "External System Management";
41
+ IntegrationSetup: Record "Integration Setup";
42
+ begin
43
+ // Error isolation: Don't affect posting if integration fails
44
+ if not IntegrationSetup.Get() then
45
+ exit;
46
+
47
+ if not IntegrationSetup."Enable Inventory Sync" then
48
+ exit;
49
+
50
+ // Only sync specific entry types
51
+ if not (ItemJournalLine."Entry Type" in [ItemJournalLine."Entry Type"::Sale, ItemJournalLine."Entry Type"::Purchase]) then
52
+ exit;
53
+
54
+ // Isolated external call with error handling
55
+ if not ExternalSystemMgt.TrySyncInventoryChange(ItemLedgerEntry) then begin
56
+ // Log error but don't fail the posting
57
+ LogIntegrationError('Inventory sync failed', ItemLedgerEntry."Entry No.");
58
+ end;
59
+ end;
60
+ }
61
+ ```
62
+
63
+ ### Performance-Conscious Bulk Processing
64
+ ```al
65
+ codeunit 50102 "Audit Trail Subscriber"
66
+ {
67
+ var
68
+ TempAuditBuffer: Record "Audit Buffer" temporary;
69
+ BufferSize: Integer;
70
+
71
+ [EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnAfterModifyEvent', '', false, false)]
72
+ local procedure OnAfterModifySalesHeader(var Rec: Record "Sales Header"; var xRec: Record "Sales Header"; RunTrigger: Boolean)
73
+ begin
74
+ // Performance: Early filtering
75
+ if not RunTrigger then
76
+ exit;
77
+
78
+ if not AuditSetup.IsAuditEnabled(Database::"Sales Header") then
79
+ exit;
80
+
81
+ // Buffer changes for batch processing
82
+ BufferAuditEntry(Rec, xRec);
83
+
84
+ // Batch processing when buffer reaches threshold
85
+ if TempAuditBuffer.Count >= BufferSize then
86
+ ProcessAuditBuffer();
87
+ end;
88
+
89
+ local procedure BufferAuditEntry(var CurrentRecord: Record "Sales Header"; var PreviousRecord: Record "Sales Header")
90
+ begin
91
+ TempAuditBuffer.Init();
92
+ TempAuditBuffer."Entry No." := TempAuditBuffer.Count + 1;
93
+ TempAuditBuffer."Table No." := Database::"Sales Header";
94
+ TempAuditBuffer."Record ID" := CurrentRecord.RecordId;
95
+ TempAuditBuffer."Change DateTime" := CurrentDateTime;
96
+ TempAuditBuffer.Insert();
97
+ end;
98
+
99
+ local procedure ProcessAuditBuffer()
100
+ var
101
+ AuditEntry: Record "Audit Entry";
102
+ begin
103
+ if TempAuditBuffer.IsEmpty then
104
+ exit;
105
+
106
+ // Batch insert audit entries
107
+ TempAuditBuffer.FindSet();
108
+ repeat
109
+ AuditEntry.TransferFields(TempAuditBuffer);
110
+ AuditEntry.Insert();
111
+ until TempAuditBuffer.Next() = 0;
112
+
113
+ // Clear buffer after processing
114
+ TempAuditBuffer.DeleteAll();
115
+ end;
116
+ }
117
+ ```
118
+
119
+ ### Background Session Integration
120
+ ```al
121
+ codeunit 50103 "Document Workflow Subscriber"
122
+ {
123
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Release Sales Document", 'OnAfterReleaseSalesDoc', '', false, false)]
124
+ local procedure OnAfterReleaseSalesDoc(var SalesHeader: Record "Sales Header"; PreviewMode: Boolean; var LinesWereModified: Boolean)
125
+ var
126
+ WorkflowParameters: Record "Workflow Parameters" temporary;
127
+ begin
128
+ if PreviewMode then
129
+ exit;
130
+
131
+ // Only process specific document types
132
+ if not (SalesHeader."Document Type" in [SalesHeader."Document Type"::Order, SalesHeader."Document Type"::Quote]) then
133
+ exit;
134
+
135
+ // Prepare parameters for background processing
136
+ WorkflowParameters.Init();
137
+ WorkflowParameters."Document Type" := SalesHeader."Document Type".AsInteger();
138
+ WorkflowParameters."Document No." := SalesHeader."No.";
139
+ WorkflowParameters."Customer No." := SalesHeader."Sell-to Customer No.";
140
+ WorkflowParameters.Insert();
141
+
142
+ // Execute workflow in background session to avoid blocking
143
+ StartBackgroundWorkflow(WorkflowParameters);
144
+ end;
145
+
146
+ local procedure StartBackgroundWorkflow(var Parameters: Record "Workflow Parameters")
147
+ begin
148
+ // Background session execution prevents performance impact
149
+ TaskScheduler.CreateTask(
150
+ Codeunit::"Workflow Background Processor",
151
+ Codeunit::"Workflow Error Handler",
152
+ true,
153
+ CompanyName,
154
+ CurrentDateTime + 1000, // Delay 1 second
155
+ Parameters.RecordId);
156
+ end;
157
+ }
158
+ ```
159
+
160
+ ## Bad Examples
161
+
162
+ ### Tightly Coupled Subscriber
163
+ ```al
164
+ codeunit 50200 "Bad Integration Subscriber"
165
+ {
166
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnBeforePostSalesDoc', '', false, false)]
167
+ local procedure OnBeforePostSalesDoc(var SalesHeader: Record "Sales Header"; CommitIsSupressed: Boolean; PreviewMode: Boolean; var HideProgressWindow: Boolean; var IsHandled: Boolean)
168
+ var
169
+ SalesLine: Record "Sales Line";
170
+ Customer: Record Customer;
171
+ Item: Record Item;
172
+ begin
173
+ // BAD: Direct access to publisher's internal data
174
+ if not Customer.Get(SalesHeader."Sell-to Customer No.") then begin
175
+ // BAD: Bypassing publisher's validation logic
176
+ SalesHeader."Sell-to Customer No." := '';
177
+ SalesHeader.Modify();
178
+ end;
179
+
180
+ // BAD: Complex business logic in subscriber
181
+ SalesLine.SetRange("Document Type", SalesHeader."Document Type");
182
+ SalesLine.SetRange("Document No.", SalesHeader."No.");
183
+ if SalesLine.FindSet() then begin
184
+ repeat
185
+ // BAD: Modifying publisher data without clear contract
186
+ if Item.Get(SalesLine."No.") then begin
187
+ if Item."Unit Cost" = 0 then begin
188
+ SalesLine."Unit Cost" := 100; // BAD: Hardcoded business logic
189
+ SalesLine.Modify();
190
+ end;
191
+ end;
192
+ until SalesLine.Next() = 0;
193
+ end;
194
+
195
+ // BAD: No error handling - failures will break posting
196
+ end;
197
+ }
198
+ ```
199
+
200
+ ### Performance-Degrading Subscriber
201
+ ```al
202
+ codeunit 50201 "Slow Integration Subscriber"
203
+ {
204
+ [EventSubscriber(ObjectType::Table, Database::"Item Ledger Entry", 'OnAfterInsertEvent', '', false, false)]
205
+ local procedure OnAfterInsertItemLedgerEntry(var Rec: Record "Item Ledger Entry"; RunTrigger: Boolean)
206
+ var
207
+ Item: Record Item;
208
+ Customer: Record Customer;
209
+ Vendor: Record Vendor;
210
+ ExternalAPI: Codeunit "External API Client";
211
+ begin
212
+ // BAD: No filtering - executes for every entry
213
+ // BAD: Synchronous external API call slows down posting
214
+ ExternalAPI.SendInventoryUpdate(Rec."Item No.", Rec.Quantity);
215
+
216
+ // BAD: Unnecessary database lookups on every insert
217
+ if Item.Get(Rec."Item No.") then begin
218
+ if Customer.Get(Item."Vendor No.") then begin // BAD: Wrong relationship
219
+ // BAD: More expensive operations
220
+ ExternalAPI.UpdateCustomerInventory(Customer."No.", Rec.Quantity);
221
+ end;
222
+ end;
223
+
224
+ // BAD: Complex calculations in high-frequency event
225
+ CalculateComplexStatistics(Rec);
226
+ end;
227
+
228
+ local procedure CalculateComplexStatistics(ItemLedgerEntry: Record "Item Ledger Entry")
229
+ var
230
+ AllEntries: Record "Item Ledger Entry";
231
+ begin
232
+ // BAD: Expensive calculation on every insert
233
+ AllEntries.SetRange("Item No.", ItemLedgerEntry."Item No.");
234
+ AllEntries.CalcSums(Quantity, "Cost Amount (Actual)");
235
+ // Complex processing...
236
+ end;
237
+ }
238
+ ```
239
+
240
+ ### Error-Propagating Subscriber
241
+ ```al
242
+ codeunit 50202 "Unreliable Subscriber"
243
+ {
244
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnAfterPostSalesDoc', '', false, false)]
245
+ local procedure OnAfterPostSalesDoc(var SalesHeader: Record "Sales Header"; var SalesInvoiceHeader: Record "Sales Invoice Header"; var SalesCrMemoHeader: Record "Sales Cr.Memo Header"; CommitIsSupressed: Boolean)
246
+ var
247
+ ExternalSystem: Codeunit "Unreliable External System";
248
+ NotificationEmail: Codeunit "Email Management";
249
+ begin
250
+ // BAD: No error handling - any failure stops processing
251
+ ExternalSystem.PostDocumentToERP(SalesHeader);
252
+
253
+ // BAD: Dependent on external system reliability
254
+ ExternalSystem.UpdateCustomerAccount(SalesHeader."Sell-to Customer No.");
255
+
256
+ // BAD: Multiple failure points without isolation
257
+ NotificationEmail.SendConfirmation(SalesHeader."Sell-to Customer No.");
258
+
259
+ // BAD: No fallback or retry mechanism
260
+ ExternalSystem.SyncPaymentTerms(SalesHeader."Payment Terms Code");
261
+ end;
262
+ }
263
+ ```
264
+
265
+ ## Best Practices
266
+
267
+ ### Conditional Processing Optimization
268
+ ```al
269
+ codeunit 50300 "Optimized Event Subscriber"
270
+ {
271
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Jnl.-Post Line", 'OnBeforePostItemJnlLine', '', false, false)]
272
+ local procedure OnBeforePostItemJnlLine(var ItemJournalLine: Record "Item Journal Line"; var IsHandled: Boolean)
273
+ var
274
+ IntegrationSetup: Record "Integration Setup";
275
+ begin
276
+ // Early exit conditions for performance
277
+ if IsHandled then
278
+ exit;
279
+
280
+ if ItemJournalLine."Entry Type" <> ItemJournalLine."Entry Type"::Sale then
281
+ exit;
282
+
283
+ if not IntegrationSetup.Get() then
284
+ exit;
285
+
286
+ if not IntegrationSetup."Validate Inventory on Sale" then
287
+ exit;
288
+
289
+ // Focused processing only when needed
290
+ ValidateInventoryAvailability(ItemJournalLine);
291
+ end;
292
+ }
293
+ ```
294
+
295
+ ### Circuit Breaker Pattern
296
+ ```al
297
+ codeunit 50301 "Resilient Integration Subscriber"
298
+ {
299
+ var
300
+ FailureCount: Integer;
301
+ LastFailureTime: DateTime;
302
+ CircuitBreakerOpen: Boolean;
303
+
304
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnAfterPostSalesDoc', '', false, false)]
305
+ local procedure OnAfterPostSalesDoc(var SalesHeader: Record "Sales Header"; var SalesInvoiceHeader: Record "Sales Invoice Header"; var SalesCrMemoHeader: Record "Sales Cr.Memo Header"; CommitIsSupressed: Boolean)
306
+ begin
307
+ // Circuit breaker prevents cascading failures
308
+ if CircuitBreakerOpen then begin
309
+ if (CurrentDateTime - LastFailureTime) > 300000 then // 5 minutes
310
+ ResetCircuitBreaker()
311
+ else
312
+ exit;
313
+ end;
314
+
315
+ // Attempt integration with failure tracking
316
+ if not TryIntegrateDocument(SalesHeader) then
317
+ HandleIntegrationFailure();
318
+ end;
319
+
320
+ local procedure TryIntegrateDocument(SalesHeader: Record "Sales Header"): Boolean
321
+ var
322
+ ExternalAPI: Codeunit "External API Client";
323
+ begin
324
+ exit(ExternalAPI.TryPostDocument(SalesHeader));
325
+ end;
326
+
327
+ local procedure HandleIntegrationFailure()
328
+ begin
329
+ FailureCount += 1;
330
+ LastFailureTime := CurrentDateTime;
331
+
332
+ // Open circuit breaker after 3 consecutive failures
333
+ if FailureCount >= 3 then
334
+ CircuitBreakerOpen := true;
335
+
336
+ // Log failure for monitoring
337
+ LogIntegrationFailure();
338
+ end;
339
+
340
+ local procedure ResetCircuitBreaker()
341
+ begin
342
+ FailureCount := 0;
343
+ CircuitBreakerOpen := false;
344
+ LogCircuitBreakerReset();
345
+ end;
346
+ }
347
+ ```
348
+
349
+ ### Versioned Event Contract
350
+ ```al
351
+ codeunit 50302 "Versioned Event Subscriber"
352
+ {
353
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::"Custom Publisher", 'OnBusinessEvent', '', false, false)]
354
+ local procedure OnBusinessEvent(EventData: Text; EventVersion: Integer)
355
+ var
356
+ EventProcessor: Codeunit "Event Data Processor";
357
+ begin
358
+ // Handle different event contract versions
359
+ case EventVersion of
360
+ 1:
361
+ ProcessEventV1(EventData);
362
+ 2:
363
+ ProcessEventV2(EventData);
364
+ 3:
365
+ ProcessEventV3(EventData);
366
+ else
367
+ LogUnsupportedEventVersion(EventVersion);
368
+ end;
369
+ end;
370
+
371
+ local procedure ProcessEventV1(EventData: Text)
372
+ begin
373
+ // Legacy event format handling
374
+ end;
375
+
376
+ local procedure ProcessEventV2(EventData: Text)
377
+ begin
378
+ // Enhanced event format with backward compatibility
379
+ end;
380
+
381
+ local procedure ProcessEventV3(EventData: Text)
382
+ begin
383
+ // Latest event format
384
+ end;
385
+ }
386
+ ```
387
+
388
+ ## Architecture Guidelines
389
+
390
+ 1. **Maintain loose coupling** - Depend only on event parameters, not publisher internals
391
+ 2. **Implement error isolation** - Subscriber failures shouldn't break core functionality
392
+ 3. **Optimize for performance** - Use early exits and efficient processing
393
+ 4. **Design for reliability** - Include circuit breakers and retry mechanisms
394
+ 5. **Plan for evolution** - Support event contract versioning
395
+ 6. **Monitor and log** - Implement comprehensive logging for troubleshooting