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,295 @@
1
+ ---
2
+ title: "BC24 No. Series Conversion Guide"
3
+ domain: "dean-debug"
4
+ difficulty: "advanced"
5
+ bc_versions: "24+"
6
+ tags: ["bc24-migration", "no-series-conversion", "legacy-modernization", "breaking-changes", "conversion-guide"]
7
+ prerequisites: ["no-series-implementation-patterns", "no-series-module-patterns-bc24", "business-foundation-architecture"]
8
+ samples: "samples/bc24-no-series-conversion.md"
9
+ related_topics: ["no-series-module-patterns-bc24", "no-series-validation-module-bc24", "no-series-implementation-patterns"]
10
+ ---
11
+
12
+ # BC24 No. Series Conversion Guide
13
+
14
+ ## Overview
15
+
16
+ This guide provides comprehensive step-by-step instructions for converting legacy No. Series implementations (BC14-23) to the new Business Foundation module architecture (BC24+). It addresses Microsoft's official obsoletions and provides practical conversion strategies.
17
+
18
+ **Critical Timeline**: NoSeriesManagement (Codeunit 396) is obsolete in BC24.0 - immediate conversion required for compatibility.
19
+
20
+ ## Conversion Overview
21
+
22
+ ### What Changed in BC24
23
+ - **NoSeriesManagement (Codeunit 396)**: Completely obsolete
24
+ - **New Architecture**: Business Foundation modular design
25
+ - **New Codeunits**: No. Series (310), NoSeriesBatch
26
+ - **Table Changes**: Sales/Purchase series tables merged into generic No. Series Line
27
+ - **Method Changes**: Simplified parameter structures and clearer method names
28
+
29
+ ### Conversion Scope Assessment
30
+ Before starting conversion, inventory your codebase:
31
+
32
+ 1. **Search Patterns**: `NoSeriesMgt`, `NoSeriesManagement`
33
+ 2. **Method Usage**: `InitSeries`, `GetNextNo`, `TestManual`, `SelectSeries`
34
+ 3. **Event Subscriptions**: Any events on obsolete codeunit
35
+ 4. **Custom Extensions**: Extensions of NoSeriesManagement
36
+ 5. **Table References**: Direct access to No. Series tables
37
+
38
+ ## Step-by-Step Conversion Process
39
+
40
+ ### Step 1: Inventory and Planning
41
+
42
+ #### Code Discovery
43
+ ```al
44
+ // Search your codebase for these patterns:
45
+ // 1. Variable declarations
46
+ var NoSeriesMgt: Codeunit NoSeriesManagement;
47
+
48
+ // 2. Method calls
49
+ NoSeriesMgt.InitSeries(...)
50
+ NoSeriesMgt.GetNextNo(...)
51
+ NoSeriesMgt.TestManual(...)
52
+ NoSeriesMgt.SelectSeries(...)
53
+
54
+ // 3. Event subscriptions
55
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnBeforeGetNextNo', '', true, true)]
56
+ ```
57
+
58
+ #### Create Conversion Matrix
59
+ | Legacy Method | New Method | Conversion Notes |
60
+ |---------------|------------|------------------|
61
+ | `InitSeries()` | `GetNextNo()` | Simplified parameters |
62
+ | `GetNextNo()` | `GetNextNo()` or `PeekNextNo()` | Choose based on intent |
63
+ | `TestManual()` | `TestManual()` | Same name, new codeunit |
64
+ | `SelectSeries()` | `LookupRelatedNoSeries()` | Different parameter structure |
65
+
66
+ ### Step 2: Core Method Conversions
67
+
68
+ #### InitSeries Conversion
69
+ **Before (BC14-23)**:
70
+ ```al
71
+ var
72
+ NoSeriesMgt: Codeunit NoSeriesManagement;
73
+ begin
74
+ NoSeriesMgt.InitSeries(GetNoSeriesCode(), xRec."No. Series", 0D, "No.", "No. Series");
75
+ end;
76
+ ```
77
+
78
+ **After (BC24+)**:
79
+ ```al
80
+ var
81
+ NoSeries: Codeunit "No. Series";
82
+ begin
83
+ if "No." = '' then
84
+ "No." := NoSeries.GetNextNo("No. Series", WorkDate());
85
+ end;
86
+ ```
87
+
88
+ #### GetNextNo Conversion
89
+ **Before**:
90
+ ```al
91
+ NextNo := NoSeriesMgt.GetNextNo("No. Series", WorkDate(), false); // Peek only
92
+ ActualNo := NoSeriesMgt.GetNextNo("No. Series", WorkDate(), true); // Allocate
93
+ ```
94
+
95
+ **After**:
96
+ ```al
97
+ NextNo := NoSeries.PeekNextNo("No. Series", WorkDate()); // Peek only
98
+ ActualNo := NoSeries.GetNextNo("No. Series", WorkDate()); // Allocate
99
+ ```
100
+
101
+ #### Manual Testing Conversion
102
+ **Before**:
103
+ ```al
104
+ NoSeriesMgt.TestManual("No. Series");
105
+ if NoSeriesMgt.ManualNoAllowed("No. Series") then
106
+ AllowManual := true;
107
+ ```
108
+
109
+ **After**:
110
+ ```al
111
+ NoSeries.TestManual("No. Series"); // Built-in error handling
112
+ // ManualNoAllowed is replaced by TestManual with automatic error
113
+ ```
114
+
115
+ #### Series Selection Conversion
116
+ **Before**:
117
+ ```al
118
+ NoSeriesMgt.SelectSeries("No. Series", xRec."No. Series", "No. Series");
119
+ ```
120
+
121
+ **After**:
122
+ ```al
123
+ NoSeries.LookupRelatedNoSeries("No. Series", "No. Series");
124
+ ```
125
+
126
+ ### Step 3: Advanced Pattern Conversions
127
+
128
+ #### Batch Operations
129
+ **New Capability (BC24+)**:
130
+ ```al
131
+ var
132
+ NoSeriesBatch: Codeunit "No. Series - Batch";
133
+ NumberList: List of [Code[20]];
134
+ begin
135
+ NumberList := NoSeriesBatch.GetNextNos("No. Series", WorkDate(), BatchSize);
136
+ end;
137
+ ```
138
+
139
+ #### Series Relationship Handling
140
+ **New Pattern (BC24+)**:
141
+ ```al
142
+ if NoSeries.AreRelated("Primary Series", "Secondary Series") then
143
+ // Handle related series logic
144
+ ProcessRelatedSeries();
145
+ ```
146
+
147
+ ### Step 4: Event Migration Strategy
148
+
149
+ #### Obsolete Events (No Direct Replacement)
150
+ These events are removed in BC24 without direct replacement:
151
+ ```al
152
+ // OBSOLETE - Remove these event subscriptions
153
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnBeforeGetNextNo', '', true, true)]
154
+ [EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnAfterGetNextNo', '', true, true)]
155
+ ```
156
+
157
+ #### Alternative Approaches
158
+ ```al
159
+ // Replace event-driven logic with direct method calls
160
+ procedure CustomGetNextNo(SeriesCode: Code[20]): Code[20]
161
+ var
162
+ NoSeries: Codeunit "No. Series";
163
+ NextNo: Code[20];
164
+ begin
165
+ // Pre-processing logic (replaces OnBeforeGetNextNo)
166
+ PreProcessNumberGeneration(SeriesCode);
167
+
168
+ // Get number
169
+ NextNo := NoSeries.GetNextNo(SeriesCode, WorkDate());
170
+
171
+ // Post-processing logic (replaces OnAfterGetNextNo)
172
+ PostProcessNumberGeneration(SeriesCode, NextNo);
173
+
174
+ exit(NextNo);
175
+ end;
176
+ ```
177
+
178
+ ### Step 5: Error Handling Migration
179
+
180
+ #### Enhanced Error Messages
181
+ **Before**:
182
+ ```al
183
+ if not NoSeriesMgt.TestSeries("No. Series") then
184
+ Error('Series validation failed');
185
+ ```
186
+
187
+ **After**:
188
+ ```al
189
+ // Built-in descriptive error messages
190
+ NoSeries.GetNextNo("No. Series", WorkDate()); // Automatic detailed errors
191
+ ```
192
+
193
+ #### Try-Method Pattern
194
+ **New Approach (BC24+)**:
195
+ ```al
196
+ if NoSeries.TryGetNextNo(NextNo, "No. Series", WorkDate()) then
197
+ ProcessSuccessfulGeneration(NextNo)
198
+ else
199
+ HandleGenerationFailure("No. Series");
200
+ ```
201
+
202
+ ### Step 6: Performance Optimization
203
+
204
+ #### Reduced Object Coupling
205
+ **Before**: Complex dependencies with NoSeriesManagement
206
+ **After**: Clean dependencies on focused No. Series module
207
+
208
+ #### Optimized Database Access
209
+ The new module provides better performance through:
210
+ - Reduced database queries
211
+ - Improved caching mechanisms
212
+ - Better concurrency handling
213
+
214
+ ### Step 7: Testing Strategy
215
+
216
+ #### Functional Testing Checklist
217
+ - [ ] All number generation scenarios work correctly
218
+ - [ ] Manual number entry functions properly
219
+ - [ ] Series relationships are maintained
220
+ - [ ] Date-based generation works as expected
221
+ - [ ] Error handling provides appropriate messages
222
+
223
+ #### Performance Testing
224
+ - [ ] Number generation performance meets or exceeds legacy performance
225
+ - [ ] High-concurrency scenarios perform adequately
226
+ - [ ] Batch operations show expected performance improvements
227
+
228
+ #### Regression Testing
229
+ - [ ] Existing number sequences continue to work
230
+ - [ ] No gaps or duplicates in number generation
231
+ - [ ] Business process integration remains functional
232
+
233
+ ## Common Conversion Challenges
234
+
235
+ ### Challenge 1: Event Dependencies
236
+ **Problem**: Code relies on obsolete events
237
+ **Solution**: Redesign logic using direct method calls and procedure composition
238
+
239
+ ### Challenge 2: Parameter Mapping
240
+ **Problem**: New methods have different parameter structures
241
+ **Solution**: Create wrapper procedures during transition period
242
+
243
+ ### Challenge 3: Custom Extensions
244
+ **Problem**: Extensions of NoSeriesManagement no longer work
245
+ **Solution**: Implement custom logic using the new module's extensibility points
246
+
247
+ ### Challenge 4: Complex Validation Logic
248
+ **Problem**: Custom validation tied to obsolete methods
249
+ **Solution**: Leverage new module's built-in validation capabilities
250
+
251
+ ## Conversion Validation
252
+
253
+ ### Pre-Conversion Checklist
254
+ - [ ] Complete inventory of NoSeriesManagement usage
255
+ - [ ] Backup of current implementation
256
+ - [ ] Test plan for all affected scenarios
257
+ - [ ] Rollback strategy prepared
258
+
259
+ ### Post-Conversion Checklist
260
+ - [ ] All obsolete references removed
261
+ - [ ] New module methods properly implemented
262
+ - [ ] Error handling provides appropriate feedback
263
+ - [ ] Performance meets expectations
264
+ - [ ] Documentation updated
265
+
266
+ ### Production Deployment Checklist
267
+ - [ ] Comprehensive testing in sandbox environment
268
+ - [ ] User acceptance testing completed
269
+ - [ ] Deployment runbook prepared
270
+ - [ ] Rollback procedures tested
271
+
272
+ ## Best Practices
273
+
274
+ ### During Conversion
275
+ - Convert one method at a time to minimize risk
276
+ - Test thoroughly after each conversion step
277
+ - Maintain parallel implementations during transition if needed
278
+ - Document all changes for team knowledge transfer
279
+
280
+ ### Post-Conversion
281
+ - Leverage new module capabilities for enhanced functionality
282
+ - Simplify validation logic using built-in methods
283
+ - Monitor performance improvements
284
+ - Plan for future module enhancements
285
+
286
+ ### Team Coordination
287
+ - Establish conversion standards across development team
288
+ - Create shared conversion utilities and wrapper procedures
289
+ - Coordinate timing of conversion across related projects
290
+ - Share lessons learned and best practices
291
+
292
+ *Complete conversion examples: samples/bc24-no-series-conversion.md*
293
+ *BC24+ implementation patterns: no-series-module-patterns-bc24.md*
294
+ *BC24+ validation patterns: no-series-validation-module-bc24.md*
295
+ *Legacy patterns (reference): no-series-implementation-patterns.md*
@@ -0,0 +1,86 @@
1
+ ---
2
+ title: "Case Statement Performance and Best Practices"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["case", "performance", "optimization", "control-flow"]
7
+ prerequisites: ["case-statement-syntax", "performance-fundamentals"]
8
+ samples: "samples/case-performance-optimization.md"
9
+ ---
10
+ # Case Statement Performance and Best Practices
11
+
12
+ ## Overview
13
+
14
+ Case statements provide better performance than cascaded IF statements for multiple value comparisons, but optimization strategies can significantly improve execution efficiency. Understanding performance characteristics enables optimal control flow design for high-volume BC operations.
15
+
16
+ **Performance Principle**: Case statements evaluate expressions once and use efficient jump tables, making them faster than IF chains for multiple conditions.
17
+
18
+ ## Performance Characteristics
19
+
20
+ ### Execution Efficiency
21
+ Case statements compile to efficient jump tables that directly branch to matching code without sequential condition evaluation. This provides O(1) performance compared to IF chains with O(n) sequential evaluation.
22
+
23
+ ### Branch Prediction Benefits
24
+ Modern processors optimize case statements through branch prediction algorithms that learn common execution paths, improving performance for frequently accessed branches.
25
+
26
+ ### Memory Access Patterns
27
+ Well-structured case statements improve cache locality by grouping related operations and reducing memory access overhead during branch execution.
28
+
29
+ ## Optimization Strategies
30
+
31
+ ### Branch Frequency Ordering
32
+ Order case branches by execution frequency, placing most common cases first. This minimizes average execution time by reducing branch traversal for typical scenarios.
33
+
34
+ ### Expression Simplification
35
+ Use simple expressions that evaluate to basic types. Complex expressions in case evaluation create overhead that negates performance benefits.
36
+
37
+ ### Early Exit Patterns
38
+ Structure case logic to enable early exit from processing when possible, avoiding unnecessary computation in less common branches.
39
+
40
+ ## High-Performance Patterns
41
+
42
+ ### Lookup Table Alternative
43
+ For very large case statements, consider lookup tables or dictionary structures that provide constant-time access without case statement overhead.
44
+
45
+ ### Range Optimization
46
+ Use range cases efficiently by grouping consecutive values. Range evaluation is optimized in AL compilers for better performance than individual value matching.
47
+
48
+ ### Resource Management
49
+ Place resource-intensive operations in less frequently executed branches, keeping common cases lightweight and fast-executing.
50
+
51
+ ## Anti-Patterns to Avoid
52
+
53
+ ### Complex Case Expressions
54
+ Avoid complex calculations or method calls in case expressions. Pre-calculate values before case evaluation for optimal performance.
55
+
56
+ ### Nested Case Statements
57
+ Deep case nesting creates performance overhead and reduces code maintainability. Use helper procedures or alternative structures for complex branching logic.
58
+
59
+ ### Resource-Heavy Common Branches
60
+ Avoid placing expensive operations in frequently executed branches. Profile actual usage patterns to optimize for real-world performance.
61
+
62
+ ## Performance Testing
63
+
64
+ ### Benchmarking Approaches
65
+ Compare case statements against IF chains and lookup tables using realistic data volumes and execution patterns. Measure actual performance in production-like scenarios.
66
+
67
+ ### Profiling Integration
68
+ Use BC performance profiling tools to identify case statement bottlenecks and validate optimization effectiveness in real applications.
69
+
70
+ ### Load Testing
71
+ Test case statement performance under high-volume conditions to ensure optimization strategies remain effective at scale.
72
+
73
+ ## Best Practices Summary
74
+
75
+ ### Design Guidelines
76
+ - Order branches by frequency for optimal average performance
77
+ - Keep case expressions simple and avoid complex calculations
78
+ - Use ranges efficiently for consecutive value matching
79
+ - Consider lookup alternatives for very large case statements
80
+
81
+ ### Implementation Standards
82
+ - Profile performance in realistic usage scenarios
83
+ - Avoid deep nesting that reduces performance benefits
84
+ - Place expensive operations in infrequent branches
85
+ - Test optimization effectiveness under load conditions
86
+
@@ -0,0 +1,96 @@
1
+ ---
2
+ title: "AL Compound Statements for Enhanced Debugging"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["debugging", "compound-statements", "breakpoints", "code-analysis"]
7
+ prerequisites: ["compound-statement-readability", "al-debugging-basics"]
8
+ samples: "samples/compound-statements-debugging.md"
9
+ ---
10
+ # AL Compound Statements for Enhanced Debugging
11
+
12
+ ## Overview
13
+
14
+ Compound statements significantly enhance AL debugging capabilities by providing explicit breakpoint locations, clear execution boundaries, and structured code organization that simplifies debugging workflows. The begin-end block structure creates natural debugging checkpoints that help developers isolate issues and trace execution flow.
15
+
16
+ Modern AL debugging environments leverage compound statement structure to provide more precise breakpoint placement and clearer execution visualization. The explicit boundaries created by compound blocks enable debuggers to provide better context information and more accurate step-through debugging experiences.
17
+
18
+ The debugging benefits of compound statements extend beyond simple breakpoint placement to include improved variable scope visibility, clearer call stack information, and more intuitive debugging navigation through complex business logic implementations.
19
+
20
+ ## Debugging Enhancement Mechanisms
21
+
22
+ ### Breakpoint Precision
23
+
24
+ Compound statements provide explicit locations for breakpoint placement that correspond to logical execution boundaries rather than arbitrary line positions. Each begin statement offers a natural entry point for debugging that aligns with developer mental models of code execution.
25
+
26
+ The structured nature of compound blocks allows debuggers to provide more meaningful context when execution stops at breakpoints. Developers can immediately understand the logical scope and purpose of the code being debugged without parsing surrounding syntax.
27
+
28
+ Breakpoint placement within compound statements creates predictable debugging experiences where execution stops align with logical operations rather than syntactic constructs. This alignment reduces confusion during debugging sessions and improves issue isolation efficiency.
29
+
30
+ ### Execution Flow Visualization
31
+
32
+ Compound statements create visual boundaries that help debuggers display execution flow more clearly through syntax highlighting and scope indication. The nested structure provides hierarchical context that makes complex execution paths easier to follow during debugging.
33
+
34
+ When stepping through compound statement blocks, debuggers can provide clearer indication of scope transitions and logical boundary crossings. This enhanced visualization reduces cognitive load during debugging and helps developers maintain context awareness.
35
+
36
+ The explicit structure enables debugging tools to offer enhanced navigation features like scope-aware stepping that respects logical boundaries rather than purely syntactic line progression.
37
+
38
+ ### Variable Scope Clarity
39
+
40
+ Compound statements create explicit variable scoping boundaries that debugging environments can leverage to provide more accurate variable visibility and inspection capabilities. Local variables declared within compound blocks have clear lifetime boundaries that debuggers can represent accurately.
41
+
42
+ The structured scoping enables better watch variable organization where developers can understand variable context and lifetime more intuitively during debugging sessions. Variable inspection becomes more logical when aligned with compound statement structure.
43
+
44
+ Debugging environments can use compound statement boundaries to provide more accurate variable state tracking and modification detection throughout code execution.
45
+
46
+ ## Debugging Workflow Integration
47
+
48
+ ### Strategic Breakpoint Placement
49
+
50
+ Use compound statement begin keywords as primary breakpoint locations to ensure execution stops at logical operation boundaries. This approach provides maximum context for debugging while minimizing confusion about execution state.
51
+
52
+ Place breakpoints at compound statement boundaries to debug conditional logic flow and loop iteration boundaries. These locations provide clear context about decision points and iteration state without requiring mental parsing of surrounding code.
53
+
54
+ Leverage compound statement structure to create debugging checkpoints that correspond to business logic phases rather than arbitrary code locations. This business-logic alignment improves debugging efficiency and issue isolation accuracy.
55
+
56
+ ### Step-Through Enhancement
57
+
58
+ Configure debugging environments to respect compound statement boundaries during step-through operations, providing more intuitive navigation through complex code structures. Step-into operations should target logical blocks rather than individual statements when possible.
59
+
60
+ Use compound statement structure to guide step-over operations that skip entire logical blocks when the internal implementation details aren't relevant to the current debugging focus. This capability reduces debugging time for complex procedures.
61
+
62
+ Leverage scope-aware stepping that moves between compound statement levels to provide both detailed and overview-level debugging perspectives as needed for different types of issues.
63
+
64
+ ### Exception Context Improvement
65
+
66
+ Compound statements provide better exception context by creating explicit boundaries around operations that might fail. Exception handlers can reference specific compound blocks that caused errors rather than ambiguous line references.
67
+
68
+ When exceptions occur within compound statement blocks, debugging environments can provide clearer context about the logical operation that failed and the scope of variables that might be relevant to the error condition.
69
+
70
+ Use compound statement structure to implement more granular exception handling that provides specific context for different types of failures within complex procedures.
71
+
72
+ ## Advanced Debugging Patterns
73
+
74
+ ### Conditional Debugging
75
+
76
+ Implement conditional breakpoints within compound statement blocks to debug specific scenarios without stopping execution for every iteration or condition evaluation. The compound structure provides clear logical boundaries for conditional debugging logic.
77
+
78
+ Use compound statements to create debugging hooks that can be enabled or disabled based on runtime conditions without affecting normal execution flow. These hooks provide detailed debugging information only when specific conditions occur.
79
+
80
+ Structure compound blocks to support debugging modes where additional logging or state tracking can be enabled within specific logical boundaries without impacting production performance.
81
+
82
+ ### Multi-Level Tracing
83
+
84
+ Leverage compound statement nesting to implement hierarchical tracing that provides different levels of detail based on debugging needs. Each compound level can provide appropriate tracing granularity for its logical scope.
85
+
86
+ Use compound statement boundaries to implement trace correlation that helps track related operations across different logical blocks and procedure calls. This correlation improves debugging of complex business processes.
87
+
88
+ Implement structured logging within compound blocks that provides context-aware debug information aligned with logical operation boundaries rather than arbitrary code locations.
89
+
90
+ ### Performance Debugging
91
+
92
+ Use compound statement boundaries as natural performance measurement points to identify bottlenecks and optimization opportunities during debugging sessions. The logical boundaries provide meaningful measurement contexts.
93
+
94
+ Implement performance counters within compound blocks to track execution time and resource usage at logical operation levels rather than individual statement granularity. This approach provides actionable performance debugging information.
95
+
96
+ Leverage compound statement structure to implement performance debugging that can isolate specific logical operations for detailed analysis without affecting overall procedure performance characteristics.
@@ -0,0 +1,70 @@
1
+ ---
2
+ title: "Custom Dimensions Best Practices"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["telemetry", "dimensions", "analytics", "monitoring"]
7
+ prerequisites: ["bc-session-logmessage-methods"]
8
+ samples: "samples/custom-dimensions.md"
9
+ ---
10
+ # Custom Dimensions Best Practices
11
+
12
+ ## Overview
13
+
14
+ Custom dimensions transform basic telemetry events into rich, queryable data that enables sophisticated analysis and monitoring. Proper custom dimension design balances diagnostic capability with performance impact and storage efficiency.
15
+
16
+ Custom dimensions appear as structured fields in Application Insights and other monitoring solutions, enabling filtering, grouping, and correlation analysis. Well-designed dimensions enhance troubleshooting capabilities and business intelligence extraction from telemetry data.
17
+
18
+ ## Dimension Design Principles
19
+
20
+ ### Consistency and Standardization
21
+ Establish consistent naming conventions across all telemetry events. Use standardized dimension names for common concepts like user identification, operation context, and business entity references.
22
+
23
+ Consistent dimension naming enables effective cross-component analysis and simplifies dashboard creation. Consider creating a telemetry dimension registry to maintain naming standards across development teams.
24
+
25
+ ### Cardinality Management
26
+ Avoid high-cardinality dimensions that create excessive unique value combinations. High cardinality impacts query performance, storage efficiency, and aggregation capabilities in monitoring systems.
27
+
28
+ Examples of high-cardinality dimensions include timestamps, GUIDs, or detailed error messages. Instead, categorize high-cardinality values or use separate correlation mechanisms for detailed tracking.
29
+
30
+ ### Business Context Integration
31
+ Include dimensions that align with business processes and operational concerns. Business-relevant dimensions enable telemetry analysis that directly supports troubleshooting and process optimization.
32
+
33
+ Consider dimensions for customer identification, transaction types, document numbers, and business process stages. These dimensions link technical telemetry to business impact analysis.
34
+
35
+ ## Implementation Strategies
36
+
37
+ ### Dimension Categories
38
+ Organize custom dimensions into logical categories: technical context (component, operation), business context (customer, document), and correlation context (session, trace identifiers).
39
+
40
+ Technical dimensions support system troubleshooting, business dimensions enable process analysis, and correlation dimensions link related events across system boundaries.
41
+
42
+ ### Performance Optimization
43
+ Minimize custom dimension processing overhead by pre-formatting dimension values and reusing dimension collections where appropriate. Avoid complex calculations or expensive operations within dimension value generation.
44
+
45
+ Consider dimension value caching for frequently-used values and lazy evaluation for expensive dimension calculations that may not be needed in all scenarios.
46
+
47
+ ### Data Classification Alignment
48
+ Ensure custom dimension content aligns with Business Central data classification requirements. Avoid including sensitive data in telemetry dimensions without appropriate classification and protection measures.
49
+
50
+ ## Common Anti-Patterns
51
+
52
+ ### Excessive Dimensions
53
+ Including too many custom dimensions per telemetry event creates storage bloat and complicates analysis. Focus on dimensions that provide actual analytical value rather than comprehensive data capture.
54
+
55
+ ### Dynamic Dimension Names
56
+ Creating dimension names dynamically based on runtime values prevents effective querying and analysis. Use consistent dimension names with variable values rather than variable dimension names.
57
+
58
+ ### Sensitive Data Inclusion
59
+ Including customer data, financial information, or other sensitive content in custom dimensions violates data protection principles and may create compliance issues.
60
+
61
+ ## Analysis and Querying
62
+
63
+ ### Dashboard Design
64
+ Structure custom dimensions to support effective dashboard creation and alerting rules. Consider how dimensions will be used in aggregation queries and filtering operations.
65
+
66
+ ### Correlation Patterns
67
+ Design custom dimensions to enable effective event correlation across different system components. Include consistent correlation identifiers that link related business processes.
68
+
69
+ ### Time-Series Analysis
70
+ Include dimensions that support time-series analysis of business processes and system performance. Consider dimensions for business cycles, operational periods, and performance trends.
@@ -0,0 +1,84 @@
1
+ ---
2
+ title: "Custom Telemetry Implementation in AL"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["telemetry", "session-logmessage", "privacy", "diagnostics", "monitoring"]
7
+ samples: "samples/custom-telemetry.md"
8
+ type: "implementation-pattern"
9
+ category: "diagnostics"
10
+ pattern_type: "good"
11
+ severity: "medium"
12
+ impact_level: "high"
13
+ improvement_suggestion: "Implement custom telemetry for actionable monitoring and diagnostics"
14
+ implementation_steps: ["design-telemetry-schema", "implement-session-logmessage", "validate-privacy-compliance"]
15
+ validation_criteria: ["privacy-compliant", "actionable-data", "performance-neutral"]
16
+ technical_areas: ["al-code", "monitoring"]
17
+ ---
18
+
19
+ # Custom Telemetry Implementation in AL
20
+
21
+ ## Overview
22
+
23
+ Custom telemetry in AL enables developers to emit structured diagnostic data through Session.LogMessage() for Application Insights integration. This observability foundation supports proactive monitoring, performance analysis, and troubleshooting while maintaining strict privacy compliance.
24
+
25
+ **Critical Principle**: Treat telemetry as an API - documented, versioned, discoverable, and non-breaking for downstream analytics consumers.
26
+
27
+ ## Strategic Framework
28
+
29
+ ### Telemetry Design Philosophy
30
+ - **Actionable Data Only**: Emit signals customers can act upon, avoiding noise from non-actionable metrics
31
+ - **Privacy by Design**: Never log PII, customer data, or sensitive business information
32
+ - **Cost Consciousness**: Balance diagnostic value with data ingestion costs through intelligent sampling
33
+ - **Schema Consistency**: Use standardized naming conventions and structured dimensions
34
+
35
+ ### When to Implement Custom Telemetry
36
+ - **Error Deflection**: Authentication failures, permission issues, configuration problems
37
+ - **Performance Monitoring**: Long-running operations, resource bottlenecks, timeout scenarios
38
+ - **Feature Adoption**: Usage patterns, workflow completion rates, feature discovery
39
+ - **Integration Health**: External service calls, API responses, data synchronization status
40
+
41
+ ## Architecture Focus
42
+
43
+ ### Session.LogMessage() Implementation Pattern
44
+ Structure telemetry calls with consistent event IDs, descriptive messages following "Object ActionInPastTense" pattern, and appropriate verbosity levels. Use custom dimensions dictionary for structured data while maintaining PascalCasing conventions.
45
+
46
+ ### Privacy-Compliant Data Classification
47
+ Always use DataClassification::SystemMetadata for telemetry events. Review all LogMessage calls for potential privacy violations before production deployment. Focus on operational metadata rather than business data.
48
+
49
+ ### Telemetry Scope Strategy
50
+ Default to TelemetryScope::ExtensionPublisher to control costs. Use TelemetryScope::All only when customers can directly act on the telemetry data for their business operations.
51
+
52
+ ## Best Practices
53
+
54
+ ### Implementation Guidelines
55
+ - **Object-Level Emission**: Call Session.LogMessage() from within objects causing situations requiring telemetry
56
+ - **Structured Dimensions**: Use Dictionary of [Text,Text] for custom dimensions with meaningful prefixes
57
+ - **Message Consistency**: Always include human-readable "message" field expressing event purpose
58
+ - **Correlation Support**: Include identifiers enabling distributed tracing across system boundaries
59
+
60
+ ### Performance Considerations
61
+ - **Non-Blocking**: Ensure telemetry calls never impact user experience or application performance
62
+ - **Minimal Processing**: Avoid complex calculations within telemetry emission paths
63
+ - **Sampling Strategy**: Implement intelligent sampling for high-frequency events
64
+
65
+ ### Analytics Integration
66
+ Design telemetry for Application Insights consumption with KQL-friendly field names, consistent schemas across related events, and dimensions supporting common analytical queries.
67
+
68
+ ## Anti-Patterns
69
+
70
+ ### Avoid These Approaches
71
+ - **Privacy Violations**: Logging customer data, PII, or sensitive business information
72
+ - **Telemetry Flooding**: Excessive volume without considering customer ingestion costs
73
+ - **Functional Dependencies**: Using telemetry data for application logic rather than pure observability
74
+ - **Inconsistent Schemas**: Different naming patterns across related telemetry events
75
+
76
+ ### Common Implementation Mistakes
77
+ - Missing privacy review before production deployment
78
+ - Using special characters or spaces in custom dimension keys
79
+ - Emitting telemetry from central objects rather than originating sources
80
+ - Failing to provide actionable information for intended telemetry consumers
81
+
82
+ *Implementation examples: see samples/custom-telemetry.md*
83
+ *Privacy guidelines: see privacy-compliance-patterns.md*
84
+ *Related patterns: monitoring-strategy.md, error-handling-patterns.md*