bc-code-intelligence-mcp 1.3.3 → 1.3.4

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 (548) hide show
  1. package/dist/config/test-enhanced-layer-service.js +10 -10
  2. package/dist/config/test-enhanced-layer-service.js.map +1 -1
  3. package/dist/dev/hot-reload.d.ts +2 -2
  4. package/dist/dev/hot-reload.d.ts.map +1 -1
  5. package/dist/dev/hot-reload.js.map +1 -1
  6. package/dist/index.d.ts +0 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +34 -38
  9. package/dist/index.js.map +1 -1
  10. package/dist/layers/index.d.ts +1 -1
  11. package/dist/layers/index.d.ts.map +1 -1
  12. package/dist/layers/index.js +1 -1
  13. package/dist/layers/index.js.map +1 -1
  14. package/dist/services/code-analysis-service.d.ts.map +1 -1
  15. package/dist/services/code-analysis-service.js +4 -0
  16. package/dist/services/code-analysis-service.js.map +1 -1
  17. package/dist/services/knowledge-service.d.ts +21 -10
  18. package/dist/services/knowledge-service.d.ts.map +1 -1
  19. package/dist/services/knowledge-service.js +71 -54
  20. package/dist/services/knowledge-service.js.map +1 -1
  21. package/dist/services/multi-content-layer-service.d.ts +90 -0
  22. package/dist/services/multi-content-layer-service.d.ts.map +1 -1
  23. package/dist/services/multi-content-layer-service.js +380 -0
  24. package/dist/services/multi-content-layer-service.js.map +1 -1
  25. package/dist/services/workflow-service.d.ts +11 -3
  26. package/dist/services/workflow-service.d.ts.map +1 -1
  27. package/dist/services/workflow-service.js +119 -78
  28. package/dist/services/workflow-service.js.map +1 -1
  29. package/dist/streamlined-handlers.d.ts +31 -2
  30. package/dist/streamlined-handlers.d.ts.map +1 -1
  31. package/dist/streamlined-handlers.js +151 -109
  32. package/dist/streamlined-handlers.js.map +1 -1
  33. package/dist/streamlined-tools.d.ts +12 -0
  34. package/dist/streamlined-tools.d.ts.map +1 -1
  35. package/dist/streamlined-tools.js +11 -6
  36. package/dist/streamlined-tools.js.map +1 -1
  37. package/package.json +13 -4
  38. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +0 -24
  39. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +0 -24
  40. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +0 -30
  41. package/embedded-knowledge/AGENTS.md +0 -178
  42. package/embedded-knowledge/CONTRIBUTING.md +0 -58
  43. package/embedded-knowledge/LICENSE +0 -21
  44. package/embedded-knowledge/README.md +0 -32
  45. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +0 -90
  46. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +0 -113
  47. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +0 -101
  48. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +0 -87
  49. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +0 -155
  50. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +0 -138
  51. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +0 -79
  52. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +0 -280
  53. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +0 -200
  54. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +0 -565
  55. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +0 -665
  56. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +0 -325
  57. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +0 -696
  58. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +0 -320
  59. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +0 -102
  60. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +0 -433
  61. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +0 -66
  62. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +0 -115
  63. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +0 -360
  64. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +0 -86
  65. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +0 -96
  66. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +0 -70
  67. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +0 -84
  68. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +0 -93
  69. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +0 -73
  70. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +0 -78
  71. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +0 -79
  72. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +0 -87
  73. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +0 -209
  74. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +0 -246
  75. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +0 -107
  76. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +0 -105
  77. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +0 -186
  78. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +0 -60
  79. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +0 -139
  80. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +0 -190
  81. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +0 -516
  82. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +0 -298
  83. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +0 -324
  84. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +0 -344
  85. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +0 -137
  86. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +0 -340
  87. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +0 -810
  88. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +0 -86
  89. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +0 -110
  90. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +0 -758
  91. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +0 -665
  92. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +0 -316
  93. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +0 -223
  94. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +0 -149
  95. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +0 -412
  96. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +0 -211
  97. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +0 -155
  98. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +0 -475
  99. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +0 -238
  100. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +0 -97
  101. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +0 -666
  102. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +0 -319
  103. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +0 -236
  104. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +0 -59
  105. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +0 -67
  106. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +0 -70
  107. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +0 -90
  108. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +0 -87
  109. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +0 -70
  110. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +0 -74
  111. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +0 -81
  112. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +0 -56
  113. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +0 -66
  114. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +0 -79
  115. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +0 -78
  116. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +0 -83
  117. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +0 -76
  118. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +0 -104
  119. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +0 -145
  120. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +0 -104
  121. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +0 -114
  122. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +0 -356
  123. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +0 -256
  124. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +0 -101
  125. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +0 -108
  126. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +0 -80
  127. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +0 -98
  128. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +0 -123
  129. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +0 -96
  130. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +0 -115
  131. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +0 -115
  132. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +0 -114
  133. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +0 -395
  134. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +0 -479
  135. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +0 -548
  136. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +0 -287
  137. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +0 -434
  138. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +0 -508
  139. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +0 -615
  140. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +0 -144
  141. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +0 -96
  142. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +0 -124
  143. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +0 -84
  144. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +0 -75
  145. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +0 -96
  146. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +0 -385
  147. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +0 -72
  148. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +0 -48
  149. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +0 -49
  150. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +0 -67
  151. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +0 -119
  152. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +0 -123
  153. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +0 -64
  154. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +0 -60
  155. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +0 -83
  156. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +0 -716
  157. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +0 -101
  158. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +0 -91
  159. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +0 -79
  160. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +0 -79
  161. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +0 -89
  162. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +0 -76
  163. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +0 -76
  164. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +0 -76
  165. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +0 -81
  166. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +0 -76
  167. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +0 -75
  168. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +0 -76
  169. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +0 -76
  170. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +0 -76
  171. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +0 -96
  172. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +0 -76
  173. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +0 -86
  174. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +0 -90
  175. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +0 -82
  176. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +0 -78
  177. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +0 -76
  178. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +0 -78
  179. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +0 -100
  180. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +0 -115
  181. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +0 -124
  182. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +0 -110
  183. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +0 -438
  184. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +0 -255
  185. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +0 -209
  186. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +0 -218
  187. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +0 -218
  188. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +0 -280
  189. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +0 -188
  190. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +0 -245
  191. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +0 -244
  192. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +0 -278
  193. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +0 -484
  194. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +0 -64
  195. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +0 -107
  196. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +0 -280
  197. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +0 -75
  198. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +0 -67
  199. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +0 -76
  200. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +0 -98
  201. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +0 -128
  202. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +0 -75
  203. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +0 -95
  204. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +0 -141
  205. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +0 -91
  206. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +0 -118
  207. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +0 -111
  208. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +0 -113
  209. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +0 -127
  210. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +0 -141
  211. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +0 -66
  212. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +0 -96
  213. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +0 -161
  214. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +0 -177
  215. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +0 -239
  216. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +0 -346
  217. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +0 -298
  218. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +0 -677
  219. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +0 -117
  220. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +0 -75
  221. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +0 -169
  222. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +0 -399
  223. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +0 -356
  224. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +0 -889
  225. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +0 -84
  226. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +0 -127
  227. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +0 -89
  228. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +0 -516
  229. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +0 -61
  230. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +0 -427
  231. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +0 -122
  232. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +0 -96
  233. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +0 -101
  234. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +0 -149
  235. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +0 -107
  236. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +0 -95
  237. package/embedded-knowledge/domains/seth-security/api-permission-model.md +0 -115
  238. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +0 -78
  239. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +0 -373
  240. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +0 -308
  241. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +0 -146
  242. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +0 -79
  243. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +0 -78
  244. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +0 -81
  245. package/embedded-knowledge/indexes/bc-version-matrix.json +0 -188
  246. package/embedded-knowledge/indexes/domain-catalog.json +0 -106
  247. package/embedded-knowledge/indexes/tags/abbreviations.json +0 -1
  248. package/embedded-knowledge/indexes/tags/abstraction.json +0 -1
  249. package/embedded-knowledge/indexes/tags/access-control.json +0 -1
  250. package/embedded-knowledge/indexes/tags/accessibility.json +0 -1
  251. package/embedded-knowledge/indexes/tags/actions.json +0 -1
  252. package/embedded-knowledge/indexes/tags/advanced-patterns.json +0 -1
  253. package/embedded-knowledge/indexes/tags/advanced.json +0 -1
  254. package/embedded-knowledge/indexes/tags/al-extension.json +0 -1
  255. package/embedded-knowledge/indexes/tags/al-generics.json +0 -1
  256. package/embedded-knowledge/indexes/tags/al-objects.json +0 -1
  257. package/embedded-knowledge/indexes/tags/al-syntax.json +0 -1
  258. package/embedded-knowledge/indexes/tags/algorithm-structure.json +0 -1
  259. package/embedded-knowledge/indexes/tags/alternatives.json +0 -1
  260. package/embedded-knowledge/indexes/tags/analytics.json +0 -1
  261. package/embedded-knowledge/indexes/tags/api-delegates.json +0 -1
  262. package/embedded-knowledge/indexes/tags/api-design.json +0 -1
  263. package/embedded-knowledge/indexes/tags/api-documentation.json +0 -1
  264. package/embedded-knowledge/indexes/tags/api-endpoints.json +0 -1
  265. package/embedded-knowledge/indexes/tags/api-extensibility.json +0 -1
  266. package/embedded-knowledge/indexes/tags/api-fieldsets.json +0 -1
  267. package/embedded-knowledge/indexes/tags/api-integration.json +0 -1
  268. package/embedded-knowledge/indexes/tags/api-interfaces.json +0 -1
  269. package/embedded-knowledge/indexes/tags/api-optimization.json +0 -1
  270. package/embedded-knowledge/indexes/tags/api-pages.json +0 -1
  271. package/embedded-knowledge/indexes/tags/api-patterns.json +0 -1
  272. package/embedded-knowledge/indexes/tags/api-permissions.json +0 -1
  273. package/embedded-knowledge/indexes/tags/api-responses.json +0 -1
  274. package/embedded-knowledge/indexes/tags/api-simplification.json +0 -1
  275. package/embedded-knowledge/indexes/tags/api.json +0 -1
  276. package/embedded-knowledge/indexes/tags/architecture.json +0 -1
  277. package/embedded-knowledge/indexes/tags/async-patterns.json +0 -1
  278. package/embedded-knowledge/indexes/tags/async-processing.json +0 -1
  279. package/embedded-knowledge/indexes/tags/automatic-registration.json +0 -1
  280. package/embedded-knowledge/indexes/tags/batch-operations.json +0 -1
  281. package/embedded-knowledge/indexes/tags/bc24-migration.json +0 -1
  282. package/embedded-knowledge/indexes/tags/begin-blocks.json +0 -1
  283. package/embedded-knowledge/indexes/tags/begin-end.json +0 -1
  284. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +0 -1
  285. package/embedded-knowledge/indexes/tags/best-practices.json +0 -1
  286. package/embedded-knowledge/indexes/tags/binding.json +0 -1
  287. package/embedded-knowledge/indexes/tags/block-structure.json +0 -1
  288. package/embedded-knowledge/indexes/tags/blocks.json +0 -1
  289. package/embedded-knowledge/indexes/tags/boolean-expressions.json +0 -1
  290. package/embedded-knowledge/indexes/tags/branching.json +0 -1
  291. package/embedded-knowledge/indexes/tags/breaking-changes.json +0 -1
  292. package/embedded-knowledge/indexes/tags/breakpoints.json +0 -1
  293. package/embedded-knowledge/indexes/tags/business-foundation.json +0 -1
  294. package/embedded-knowledge/indexes/tags/business-infrastructure.json +0 -1
  295. package/embedded-knowledge/indexes/tags/business-process.json +0 -1
  296. package/embedded-knowledge/indexes/tags/business-rules.json +0 -1
  297. package/embedded-knowledge/indexes/tags/caching.json +0 -1
  298. package/embedded-knowledge/indexes/tags/case-statements.json +0 -1
  299. package/embedded-knowledge/indexes/tags/case.json +0 -1
  300. package/embedded-knowledge/indexes/tags/code-analysis.json +0 -1
  301. package/embedded-knowledge/indexes/tags/code-clarity.json +0 -1
  302. package/embedded-knowledge/indexes/tags/code-comprehension.json +0 -1
  303. package/embedded-knowledge/indexes/tags/code-conversion.json +0 -1
  304. package/embedded-knowledge/indexes/tags/code-formatting.json +0 -1
  305. package/embedded-knowledge/indexes/tags/code-organization.json +0 -1
  306. package/embedded-knowledge/indexes/tags/code-patterns.json +0 -1
  307. package/embedded-knowledge/indexes/tags/code-quality.json +0 -1
  308. package/embedded-knowledge/indexes/tags/code-reuse.json +0 -1
  309. package/embedded-knowledge/indexes/tags/code-simplification.json +0 -1
  310. package/embedded-knowledge/indexes/tags/code-standards.json +0 -1
  311. package/embedded-knowledge/indexes/tags/code-structure.json +0 -1
  312. package/embedded-knowledge/indexes/tags/code-style.json +0 -1
  313. package/embedded-knowledge/indexes/tags/codeunit-design.json +0 -1
  314. package/embedded-knowledge/indexes/tags/command-queue.json +0 -1
  315. package/embedded-knowledge/indexes/tags/comments.json +0 -1
  316. package/embedded-knowledge/indexes/tags/compile-time-validation.json +0 -1
  317. package/embedded-knowledge/indexes/tags/complex-facade.json +0 -1
  318. package/embedded-knowledge/indexes/tags/complexity-hiding.json +0 -1
  319. package/embedded-knowledge/indexes/tags/complexity-management.json +0 -1
  320. package/embedded-knowledge/indexes/tags/compound-statements.json +0 -1
  321. package/embedded-knowledge/indexes/tags/concurrency.json +0 -1
  322. package/embedded-knowledge/indexes/tags/conditional-logic.json +0 -1
  323. package/embedded-knowledge/indexes/tags/conditional.json +0 -1
  324. package/embedded-knowledge/indexes/tags/conflict-resolution.json +0 -1
  325. package/embedded-knowledge/indexes/tags/consistency.json +0 -1
  326. package/embedded-knowledge/indexes/tags/contract-design.json +0 -1
  327. package/embedded-knowledge/indexes/tags/control-flow.json +0 -1
  328. package/embedded-knowledge/indexes/tags/conversion-guide.json +0 -1
  329. package/embedded-knowledge/indexes/tags/correlation.json +0 -1
  330. package/embedded-knowledge/indexes/tags/custom-messages.json +0 -1
  331. package/embedded-knowledge/indexes/tags/data-access.json +0 -1
  332. package/embedded-knowledge/indexes/tags/data-exposure.json +0 -1
  333. package/embedded-knowledge/indexes/tags/data-integrity.json +0 -1
  334. package/embedded-knowledge/indexes/tags/data-loading.json +0 -1
  335. package/embedded-knowledge/indexes/tags/data-manipulation.json +0 -1
  336. package/embedded-knowledge/indexes/tags/data-modeling.json +0 -1
  337. package/embedded-knowledge/indexes/tags/data-patterns.json +0 -1
  338. package/embedded-knowledge/indexes/tags/data-protection.json +0 -1
  339. package/embedded-knowledge/indexes/tags/data-validation.json +0 -1
  340. package/embedded-knowledge/indexes/tags/database.json +0 -1
  341. package/embedded-knowledge/indexes/tags/debugging.json +0 -1
  342. package/embedded-knowledge/indexes/tags/decision-making.json +0 -1
  343. package/embedded-knowledge/indexes/tags/declaration.json +0 -1
  344. package/embedded-knowledge/indexes/tags/default-messages.json +0 -1
  345. package/embedded-knowledge/indexes/tags/defensive-programming.json +0 -1
  346. package/embedded-knowledge/indexes/tags/deleteall.json +0 -1
  347. package/embedded-knowledge/indexes/tags/dependencies.json +0 -1
  348. package/embedded-knowledge/indexes/tags/deployment.json +0 -1
  349. package/embedded-knowledge/indexes/tags/developer-productivity.json +0 -1
  350. package/embedded-knowledge/indexes/tags/development-workflow.json +0 -1
  351. package/embedded-knowledge/indexes/tags/diagnostics.json +0 -1
  352. package/embedded-knowledge/indexes/tags/dimensions.json +0 -1
  353. package/embedded-knowledge/indexes/tags/documentation.json +0 -1
  354. package/embedded-knowledge/indexes/tags/early-exit.json +0 -1
  355. package/embedded-knowledge/indexes/tags/else-clauses.json +0 -1
  356. package/embedded-knowledge/indexes/tags/end-statements.json +0 -1
  357. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +0 -1
  358. package/embedded-knowledge/indexes/tags/entity-relationships.json +0 -1
  359. package/embedded-knowledge/indexes/tags/error-handling.json +0 -1
  360. package/embedded-knowledge/indexes/tags/error-messages.json +0 -1
  361. package/embedded-knowledge/indexes/tags/error-prevention.json +0 -1
  362. package/embedded-knowledge/indexes/tags/error-text.json +0 -1
  363. package/embedded-knowledge/indexes/tags/etag.json +0 -1
  364. package/embedded-knowledge/indexes/tags/event-bridge.json +0 -1
  365. package/embedded-knowledge/indexes/tags/event-payload.json +0 -1
  366. package/embedded-knowledge/indexes/tags/event-routing.json +0 -1
  367. package/embedded-knowledge/indexes/tags/events.json +0 -1
  368. package/embedded-knowledge/indexes/tags/execution-flow.json +0 -1
  369. package/embedded-knowledge/indexes/tags/expressions.json +0 -1
  370. package/embedded-knowledge/indexes/tags/extensibility.json +0 -1
  371. package/embedded-knowledge/indexes/tags/extensions.json +0 -1
  372. package/embedded-knowledge/indexes/tags/facade-composition.json +0 -1
  373. package/embedded-knowledge/indexes/tags/facade-pattern.json +0 -1
  374. package/embedded-knowledge/indexes/tags/field-control.json +0 -1
  375. package/embedded-knowledge/indexes/tags/field-exclusion.json +0 -1
  376. package/embedded-knowledge/indexes/tags/field-registration.json +0 -1
  377. package/embedded-knowledge/indexes/tags/field-state.json +0 -1
  378. package/embedded-knowledge/indexes/tags/field-validation.json +0 -1
  379. package/embedded-knowledge/indexes/tags/fielderror.json +0 -1
  380. package/embedded-knowledge/indexes/tags/fields.json +0 -1
  381. package/embedded-knowledge/indexes/tags/filtering.json +0 -1
  382. package/embedded-knowledge/indexes/tags/filters.json +0 -1
  383. package/embedded-knowledge/indexes/tags/formatting.json +0 -1
  384. package/embedded-knowledge/indexes/tags/generic-methods.json +0 -1
  385. package/embedded-knowledge/indexes/tags/http-status.json +0 -1
  386. package/embedded-knowledge/indexes/tags/if-statements.json +0 -1
  387. package/embedded-knowledge/indexes/tags/implementation.json +0 -1
  388. package/embedded-knowledge/indexes/tags/indentation.json +0 -1
  389. package/embedded-knowledge/indexes/tags/index-summary.json +0 -277
  390. package/embedded-knowledge/indexes/tags/indexing.json +0 -1
  391. package/embedded-knowledge/indexes/tags/inheritance.json +0 -1
  392. package/embedded-knowledge/indexes/tags/integration.json +0 -1
  393. package/embedded-knowledge/indexes/tags/integrity-checking.json +0 -1
  394. package/embedded-knowledge/indexes/tags/intellisense.json +0 -1
  395. package/embedded-knowledge/indexes/tags/interface-design.json +0 -1
  396. package/embedded-knowledge/indexes/tags/interface-segregation.json +0 -1
  397. package/embedded-knowledge/indexes/tags/isolation.json +0 -1
  398. package/embedded-knowledge/indexes/tags/job-processing.json +0 -1
  399. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +0 -1
  400. package/embedded-knowledge/indexes/tags/keywords.json +0 -1
  401. package/embedded-knowledge/indexes/tags/legacy-modernization.json +0 -1
  402. package/embedded-knowledge/indexes/tags/line-breaks.json +0 -1
  403. package/embedded-knowledge/indexes/tags/line-organization.json +0 -1
  404. package/embedded-knowledge/indexes/tags/line-positioning.json +0 -1
  405. package/embedded-knowledge/indexes/tags/localization.json +0 -1
  406. package/embedded-knowledge/indexes/tags/logging.json +0 -1
  407. package/embedded-knowledge/indexes/tags/loose-coupling.json +0 -1
  408. package/embedded-knowledge/indexes/tags/maintainability.json +0 -1
  409. package/embedded-knowledge/indexes/tags/memory-management.json +0 -1
  410. package/embedded-knowledge/indexes/tags/memory-optimization.json +0 -1
  411. package/embedded-knowledge/indexes/tags/memory.json +0 -1
  412. package/embedded-knowledge/indexes/tags/message-design.json +0 -1
  413. package/embedded-knowledge/indexes/tags/message-formatting.json +0 -1
  414. package/embedded-knowledge/indexes/tags/message-patterns.json +0 -1
  415. package/embedded-knowledge/indexes/tags/metadata-driven.json +0 -1
  416. package/embedded-knowledge/indexes/tags/method-comparison.json +0 -1
  417. package/embedded-knowledge/indexes/tags/module-architecture.json +0 -1
  418. package/embedded-knowledge/indexes/tags/module-validation.json +0 -1
  419. package/embedded-knowledge/indexes/tags/monitoring.json +0 -1
  420. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +0 -1
  421. package/embedded-knowledge/indexes/tags/multi-tenancy.json +0 -1
  422. package/embedded-knowledge/indexes/tags/multiple-values.json +0 -1
  423. package/embedded-knowledge/indexes/tags/naming-conventions.json +0 -1
  424. package/embedded-knowledge/indexes/tags/naming.json +0 -1
  425. package/embedded-knowledge/indexes/tags/navigation.json +0 -1
  426. package/embedded-knowledge/indexes/tags/nested-statements.json +0 -1
  427. package/embedded-knowledge/indexes/tags/no-series-conversion.json +0 -1
  428. package/embedded-knowledge/indexes/tags/no-series-validation.json +0 -1
  429. package/embedded-knowledge/indexes/tags/no-series.json +0 -1
  430. package/embedded-knowledge/indexes/tags/number-generation.json +0 -1
  431. package/embedded-knowledge/indexes/tags/object-documentation.json +0 -1
  432. package/embedded-knowledge/indexes/tags/odata.json +0 -1
  433. package/embedded-knowledge/indexes/tags/ondelete.json +0 -1
  434. package/embedded-knowledge/indexes/tags/onvalidate.json +0 -1
  435. package/embedded-knowledge/indexes/tags/operation-delegation.json +0 -1
  436. package/embedded-knowledge/indexes/tags/operation-safety.json +0 -1
  437. package/embedded-knowledge/indexes/tags/operators.json +0 -1
  438. package/embedded-knowledge/indexes/tags/optimization.json +0 -1
  439. package/embedded-knowledge/indexes/tags/order.json +0 -1
  440. package/embedded-knowledge/indexes/tags/organization.json +0 -1
  441. package/embedded-knowledge/indexes/tags/pages.json +0 -1
  442. package/embedded-knowledge/indexes/tags/parameters.json +0 -1
  443. package/embedded-knowledge/indexes/tags/patterns.json +0 -1
  444. package/embedded-knowledge/indexes/tags/performance-optimization.json +0 -1
  445. package/embedded-knowledge/indexes/tags/performance.json +0 -1
  446. package/embedded-knowledge/indexes/tags/placement.json +0 -1
  447. package/embedded-knowledge/indexes/tags/posting-codeunits.json +0 -1
  448. package/embedded-knowledge/indexes/tags/posting.json +0 -1
  449. package/embedded-knowledge/indexes/tags/preconditions.json +0 -1
  450. package/embedded-knowledge/indexes/tags/primary-key.json +0 -1
  451. package/embedded-knowledge/indexes/tags/privacy.json +0 -1
  452. package/embedded-knowledge/indexes/tags/process-automation.json +0 -1
  453. package/embedded-knowledge/indexes/tags/production.json +0 -1
  454. package/embedded-knowledge/indexes/tags/productivity.json +0 -1
  455. package/embedded-knowledge/indexes/tags/query-performance.json +0 -1
  456. package/embedded-knowledge/indexes/tags/queue-management.json +0 -1
  457. package/embedded-knowledge/indexes/tags/ranges.json +0 -1
  458. package/embedded-knowledge/indexes/tags/readability.json +0 -1
  459. package/embedded-knowledge/indexes/tags/record-access.json +0 -1
  460. package/embedded-knowledge/indexes/tags/record-methods.json +0 -1
  461. package/embedded-knowledge/indexes/tags/refactoring.json +0 -1
  462. package/embedded-knowledge/indexes/tags/reference.json +0 -1
  463. package/embedded-knowledge/indexes/tags/repeat-loops.json +0 -1
  464. package/embedded-knowledge/indexes/tags/repeat-statement.json +0 -1
  465. package/embedded-knowledge/indexes/tags/runtime-errors.json +0 -1
  466. package/embedded-knowledge/indexes/tags/runtime.json +0 -1
  467. package/embedded-knowledge/indexes/tags/safeguards.json +0 -1
  468. package/embedded-knowledge/indexes/tags/security.json +0 -1
  469. package/embedded-knowledge/indexes/tags/sequence-management.json +0 -1
  470. package/embedded-knowledge/indexes/tags/serialization.json +0 -1
  471. package/embedded-knowledge/indexes/tags/session-logmessage.json +0 -1
  472. package/embedded-knowledge/indexes/tags/session.json +0 -1
  473. package/embedded-knowledge/indexes/tags/setloadfields.json +0 -1
  474. package/embedded-knowledge/indexes/tags/shortcuts.json +0 -1
  475. package/embedded-knowledge/indexes/tags/sift.json +0 -1
  476. package/embedded-knowledge/indexes/tags/singleinstance.json +0 -1
  477. package/embedded-knowledge/indexes/tags/spacing.json +0 -1
  478. package/embedded-knowledge/indexes/tags/sql-translation.json +0 -1
  479. package/embedded-knowledge/indexes/tags/standards.json +0 -1
  480. package/embedded-knowledge/indexes/tags/statements.json +0 -1
  481. package/embedded-knowledge/indexes/tags/streaming.json +0 -1
  482. package/embedded-knowledge/indexes/tags/strong-typing.json +0 -1
  483. package/embedded-knowledge/indexes/tags/structural-patterns.json +0 -1
  484. package/embedded-knowledge/indexes/tags/structure.json +0 -1
  485. package/embedded-knowledge/indexes/tags/subscribers.json +0 -1
  486. package/embedded-knowledge/indexes/tags/switch.json +0 -1
  487. package/embedded-knowledge/indexes/tags/symbol-search.json +0 -1
  488. package/embedded-knowledge/indexes/tags/syntax.json +0 -1
  489. package/embedded-knowledge/indexes/tags/systemid.json +0 -1
  490. package/embedded-knowledge/indexes/tags/table-configuration.json +0 -1
  491. package/embedded-knowledge/indexes/tags/table-events.json +0 -1
  492. package/embedded-knowledge/indexes/tags/table-keys.json +0 -1
  493. package/embedded-knowledge/indexes/tags/table-safety.json +0 -1
  494. package/embedded-knowledge/indexes/tags/task-scheduler.json +0 -1
  495. package/embedded-knowledge/indexes/tags/telemetry.json +0 -1
  496. package/embedded-knowledge/indexes/tags/template-method.json +0 -1
  497. package/embedded-knowledge/indexes/tags/temporary-tables.json +0 -1
  498. package/embedded-knowledge/indexes/tags/testfield.json +0 -1
  499. package/embedded-knowledge/indexes/tags/tradeoffs.json +0 -1
  500. package/embedded-knowledge/indexes/tags/triggers.json +0 -1
  501. package/embedded-knowledge/indexes/tags/troubleshooting.json +0 -1
  502. package/embedded-knowledge/indexes/tags/type-safety.json +0 -1
  503. package/embedded-knowledge/indexes/tags/url-structure.json +0 -1
  504. package/embedded-knowledge/indexes/tags/user-experience.json +0 -1
  505. package/embedded-knowledge/indexes/tags/user-feedback.json +0 -1
  506. package/embedded-knowledge/indexes/tags/user-interface.json +0 -1
  507. package/embedded-knowledge/indexes/tags/validation-feedback.json +0 -1
  508. package/embedded-knowledge/indexes/tags/validation.json +0 -1
  509. package/embedded-knowledge/indexes/tags/variables.json +0 -1
  510. package/embedded-knowledge/indexes/tags/verbosity.json +0 -1
  511. package/embedded-knowledge/indexes/tags/vs-code.json +0 -1
  512. package/embedded-knowledge/indexes/tags/web-services.json +0 -1
  513. package/embedded-knowledge/indexes/tags/workflow-management.json +0 -1
  514. package/embedded-knowledge/indexes/tags/workflow-optimization.json +0 -1
  515. package/embedded-knowledge/indexes/tags/workflow-templates.json +0 -1
  516. package/embedded-knowledge/indexes/tags/workspace.json +0 -1
  517. package/embedded-knowledge/indexes/tags/xml-documentation.json +0 -1
  518. package/embedded-knowledge/indexes/topic-relationships.json +0 -128
  519. package/embedded-knowledge/methodologies/index.json +0 -81
  520. package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
  521. package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
  522. package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
  523. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
  524. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
  525. package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
  526. package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
  527. package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
  528. package/embedded-knowledge/methodologies/phases/performance.md +0 -211
  529. package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
  530. package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
  531. package/embedded-knowledge/methodologies/phases/verification.md +0 -146
  532. package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
  533. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
  534. package/embedded-knowledge/specialists/alex-architect.md +0 -216
  535. package/embedded-knowledge/specialists/casey-copilot.md +0 -226
  536. package/embedded-knowledge/specialists/chris-config.md +0 -267
  537. package/embedded-knowledge/specialists/dean-debug.md +0 -222
  538. package/embedded-knowledge/specialists/eva-errors.md +0 -235
  539. package/embedded-knowledge/specialists/jordan-bridge.md +0 -235
  540. package/embedded-knowledge/specialists/logan-legacy.md +0 -209
  541. package/embedded-knowledge/specialists/maya-mentor.md +0 -211
  542. package/embedded-knowledge/specialists/morgan-market.md +0 -226
  543. package/embedded-knowledge/specialists/quinn-tester.md +0 -235
  544. package/embedded-knowledge/specialists/roger-reviewer.md +0 -234
  545. package/embedded-knowledge/specialists/sam-coder.md +0 -359
  546. package/embedded-knowledge/specialists/seth-security.md +0 -235
  547. package/embedded-knowledge/specialists/taylor-docs.md +0 -257
  548. package/embedded-knowledge/specialists/uma-ux.md +0 -235
@@ -1,677 +0,0 @@
1
- # Command Queue Pattern in AL - Code Examples
2
-
3
- This sample demonstrates implementing command queue patterns for asynchronous processing in Business Central.
4
-
5
- ## Basic Command Interface
6
-
7
- ```al
8
- // Core command interface
9
- interface ICommand
10
- {
11
- procedure Execute(): Boolean;
12
- procedure GetCommandName(): Text[50];
13
- procedure GetDescription(): Text[250];
14
- procedure CanUndo(): Boolean;
15
- procedure Undo(): Boolean;
16
- procedure GetExecutionTime(): DateTime;
17
- procedure GetCommandData(): Dictionary of [Text, Variant];
18
- }
19
- ```
20
-
21
- ## Command Queue Implementation
22
-
23
- ```al
24
- // Main command queue system
25
- codeunit 50700 "Command Queue Manager"
26
- {
27
- var
28
- CommandQueue: List of [Interface ICommand];
29
- ExecutedCommands: List of [Interface ICommand];
30
- IsProcessing: Boolean;
31
- ProcessingStats: Dictionary of [Text, Variant];
32
-
33
- procedure EnqueueCommand(Command: Interface ICommand)
34
- begin
35
- CommandQueue.Add(Command);
36
- LogCommandEnqueued(Command);
37
-
38
- // Auto-process if not already processing
39
- if not IsProcessing then
40
- ProcessNextCommand();
41
- end;
42
-
43
- procedure EnqueuePriorityCommand(Command: Interface ICommand)
44
- begin
45
- CommandQueue.Insert(1, Command);
46
- LogCommandEnqueued(Command);
47
-
48
- if not IsProcessing then
49
- ProcessNextCommand();
50
- end;
51
-
52
- procedure ProcessAllCommands(): Integer
53
- var
54
- ProcessedCount: Integer;
55
- begin
56
- ProcessedCount := 0;
57
-
58
- while CommandQueue.Count > 0 do begin
59
- if ProcessNextCommand() then
60
- ProcessedCount += 1
61
- else
62
- break; // Stop processing on error
63
- end;
64
-
65
- exit(ProcessedCount);
66
- end;
67
-
68
- procedure ProcessNextCommand(): Boolean
69
- var
70
- Command: Interface ICommand;
71
- ExecutionResult: Boolean;
72
- StartTime: DateTime;
73
- EndTime: DateTime;
74
- begin
75
- if CommandQueue.Count = 0 then
76
- exit(false);
77
-
78
- if IsProcessing then
79
- exit(false); // Prevent concurrent processing
80
-
81
- IsProcessing := true;
82
- Command := CommandQueue.Get(1);
83
- CommandQueue.RemoveAt(1);
84
-
85
- try
86
- StartTime := CurrentDateTime;
87
- ExecutionResult := ExecuteCommandSafely(Command);
88
- EndTime := CurrentDateTime;
89
-
90
- if ExecutionResult then begin
91
- ExecutedCommands.Add(Command);
92
- LogCommandExecuted(Command, StartTime, EndTime, true);
93
- UpdateProcessingStats(Command, true, EndTime - StartTime);
94
- end else begin
95
- LogCommandExecuted(Command, StartTime, EndTime, false);
96
- HandleCommandFailure(Command);
97
- UpdateProcessingStats(Command, false, EndTime - StartTime);
98
- end;
99
-
100
- finally
101
- IsProcessing := false;
102
- end;
103
-
104
- exit(ExecutionResult);
105
- end;
106
-
107
- procedure UndoLastCommand(): Boolean
108
- var
109
- LastCommand: Interface ICommand;
110
- begin
111
- if ExecutedCommands.Count = 0 then
112
- exit(false);
113
-
114
- LastCommand := ExecutedCommands.Get(ExecutedCommands.Count);
115
-
116
- if not LastCommand.CanUndo() then
117
- exit(false);
118
-
119
- if LastCommand.Undo() then begin
120
- ExecutedCommands.RemoveAt(ExecutedCommands.Count);
121
- LogCommandUndone(LastCommand);
122
- exit(true);
123
- end;
124
-
125
- exit(false);
126
- end;
127
-
128
- procedure GetQueueStatus(): Dictionary of [Text, Variant]
129
- var
130
- Status: Dictionary of [Text, Variant];
131
- begin
132
- Status.Set('QueueLength', CommandQueue.Count);
133
- Status.Set('ExecutedCount', ExecutedCommands.Count);
134
- Status.Set('IsProcessing', IsProcessing);
135
- Status.Set('ProcessingStats', ProcessingStats);
136
-
137
- exit(Status);
138
- end;
139
-
140
- procedure ClearQueue()
141
- begin
142
- CommandQueue.Clear();
143
- LogQueueCleared();
144
- end;
145
-
146
- local procedure ExecuteCommandSafely(Command: Interface ICommand): Boolean
147
- begin
148
- try
149
- exit(Command.Execute());
150
- except
151
- LogCommandError(Command, GetLastErrorText);
152
- exit(false);
153
- end;
154
- end;
155
-
156
- local procedure HandleCommandFailure(Command: Interface ICommand)
157
- begin
158
- // Add to dead letter queue or retry logic could go here
159
- LogCommandFailure(Command);
160
- end;
161
-
162
- local procedure UpdateProcessingStats(Command: Interface ICommand; Success: Boolean; Duration: BigInteger)
163
- var
164
- TotalCommands: Integer;
165
- SuccessfulCommands: Integer;
166
- FailedCommands: Integer;
167
- TotalDuration: BigInteger;
168
- AverageDuration: BigInteger;
169
- begin
170
- if ProcessingStats.Get('TotalCommands', TotalCommands) then
171
- TotalCommands += 1
172
- else
173
- TotalCommands := 1;
174
-
175
- if Success then begin
176
- if ProcessingStats.Get('SuccessfulCommands', SuccessfulCommands) then
177
- SuccessfulCommands += 1
178
- else
179
- SuccessfulCommands := 1;
180
- end else begin
181
- if ProcessingStats.Get('FailedCommands', FailedCommands) then
182
- FailedCommands += 1
183
- else
184
- FailedCommands := 1;
185
- end;
186
-
187
- if ProcessingStats.Get('TotalDuration', TotalDuration) then
188
- TotalDuration += Duration
189
- else
190
- TotalDuration := Duration;
191
-
192
- AverageDuration := TotalDuration div TotalCommands;
193
-
194
- ProcessingStats.Set('TotalCommands', TotalCommands);
195
- ProcessingStats.Set('SuccessfulCommands', SuccessfulCommands);
196
- ProcessingStats.Set('FailedCommands', FailedCommands);
197
- ProcessingStats.Set('TotalDuration', TotalDuration);
198
- ProcessingStats.Set('AverageDuration', AverageDuration);
199
- end;
200
-
201
- // Logging procedures
202
- local procedure LogCommandEnqueued(Command: Interface ICommand)
203
- begin
204
- // Log command enqueue event
205
- end;
206
-
207
- local procedure LogCommandExecuted(Command: Interface ICommand; StartTime: DateTime; EndTime: DateTime; Success: Boolean)
208
- begin
209
- // Log command execution details
210
- end;
211
-
212
- local procedure LogCommandUndone(Command: Interface ICommand)
213
- begin
214
- // Log command undo event
215
- end;
216
-
217
- local procedure LogCommandError(Command: Interface ICommand; ErrorText: Text)
218
- begin
219
- // Log command execution error
220
- end;
221
-
222
- local procedure LogCommandFailure(Command: Interface ICommand)
223
- begin
224
- // Log command failure for analysis
225
- end;
226
-
227
- local procedure LogQueueCleared()
228
- begin
229
- // Log queue clear event
230
- end;
231
- }
232
- ```
233
-
234
- ## Sales Document Creation Command
235
-
236
- ```al
237
- // Example command: Create sales document
238
- codeunit 50701 "Create Sales Document Cmd" implements ICommand
239
- {
240
- var
241
- CustomerNo: Code[20];
242
- Items: List of [Dictionary of [Text, Variant]];
243
- OrderDate: Date;
244
- CommandData: Dictionary of [Text, Variant];
245
- CreatedDocumentNo: Code[20];
246
- ExecutionTime: DateTime;
247
-
248
- procedure Initialize(NewCustomerNo: Code[20]; OrderItems: List of [Dictionary of [Text, Variant]]; NewOrderDate: Date)
249
- begin
250
- CustomerNo := NewCustomerNo;
251
- Items := OrderItems;
252
- OrderDate := NewOrderDate;
253
-
254
- // Store command data for logging/undo
255
- CommandData.Set('CustomerNo', CustomerNo);
256
- CommandData.Set('OrderDate', OrderDate);
257
- CommandData.Set('ItemCount', Items.Count);
258
- end;
259
-
260
- procedure Execute(): Boolean
261
- var
262
- SalesHeader: Record "Sales Header";
263
- SalesLine: Record "Sales Line";
264
- ItemData: Dictionary of [Text, Variant];
265
- LineNo: Integer;
266
- begin
267
- ExecutionTime := CurrentDateTime;
268
-
269
- if CustomerNo = '' then
270
- exit(false);
271
-
272
- if not CustomerExists(CustomerNo) then
273
- exit(false);
274
-
275
- try
276
- // Create sales header
277
- SalesHeader.Init();
278
- SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
279
- SalesHeader."No." := '';
280
- SalesHeader.Insert(true);
281
- CreatedDocumentNo := SalesHeader."No.";
282
-
283
- SalesHeader.Validate("Sell-to Customer No.", CustomerNo);
284
- if OrderDate <> 0D then
285
- SalesHeader.Validate("Order Date", OrderDate);
286
- SalesHeader.Modify(true);
287
-
288
- // Add items
289
- LineNo := 10000;
290
- foreach ItemData in Items do begin
291
- if not CreateSalesLine(SalesHeader, ItemData, LineNo) then
292
- exit(false);
293
- LineNo += 10000;
294
- end;
295
-
296
- // Update command data with result
297
- CommandData.Set('CreatedDocumentNo', CreatedDocumentNo);
298
-
299
- exit(true);
300
-
301
- except
302
- exit(false);
303
- end;
304
- end;
305
-
306
- procedure GetCommandName(): Text[50]
307
- begin
308
- exit('CREATE_SALES_DOCUMENT');
309
- end;
310
-
311
- procedure GetDescription(): Text[250]
312
- begin
313
- exit(StrSubstNo('Create sales document for customer %1 with %2 items', CustomerNo, Items.Count));
314
- end;
315
-
316
- procedure CanUndo(): Boolean
317
- begin
318
- exit(CreatedDocumentNo <> '');
319
- end;
320
-
321
- procedure Undo(): Boolean
322
- var
323
- SalesHeader: Record "Sales Header";
324
- begin
325
- if CreatedDocumentNo = '' then
326
- exit(false);
327
-
328
- if SalesHeader.Get(SalesHeader."Document Type"::Order, CreatedDocumentNo) then begin
329
- // Only allow undo if not posted
330
- if SalesHeader.Status = SalesHeader.Status::Open then begin
331
- SalesHeader.Delete(true);
332
- exit(true);
333
- end;
334
- end;
335
-
336
- exit(false);
337
- end;
338
-
339
- procedure GetExecutionTime(): DateTime
340
- begin
341
- exit(ExecutionTime);
342
- end;
343
-
344
- procedure GetCommandData(): Dictionary of [Text, Variant]
345
- begin
346
- exit(CommandData);
347
- end;
348
-
349
- local procedure CustomerExists(CustomerNo: Code[20]): Boolean
350
- var
351
- Customer: Record Customer;
352
- begin
353
- exit(Customer.Get(CustomerNo));
354
- end;
355
-
356
- local procedure CreateSalesLine(SalesHeader: Record "Sales Header"; ItemData: Dictionary of [Text, Variant]; LineNo: Integer): Boolean
357
- var
358
- SalesLine: Record "Sales Line";
359
- ItemNo: Code[20];
360
- Quantity: Decimal;
361
- UnitPrice: Decimal;
362
- begin
363
- try
364
- SalesLine.Init();
365
- SalesLine."Document Type" := SalesHeader."Document Type";
366
- SalesLine."Document No." := SalesHeader."No.";
367
- SalesLine."Line No." := LineNo;
368
- SalesLine.Insert(true);
369
-
370
- if ItemData.Get('ItemNo', ItemNo) then
371
- SalesLine.Validate("No.", ItemNo);
372
-
373
- if ItemData.Get('Quantity', Quantity) then
374
- SalesLine.Validate(Quantity, Quantity);
375
-
376
- if ItemData.Get('UnitPrice', UnitPrice) then
377
- SalesLine.Validate("Unit Price", UnitPrice);
378
-
379
- SalesLine.Modify(true);
380
- exit(true);
381
-
382
- except
383
- exit(false);
384
- end;
385
- end;
386
- }
387
- ```
388
-
389
- ## Batch Processing Command
390
-
391
- ```al
392
- // Command for batch operations
393
- codeunit 50702 "Batch Update Prices Cmd" implements ICommand
394
- {
395
- var
396
- ItemCategoryCode: Code[20];
397
- PriceAdjustmentPercent: Decimal;
398
- EffectiveDate: Date;
399
- ProcessedItems: List of [Code[20]];
400
- OriginalPrices: Dictionary of [Code[20], Decimal];
401
- ExecutionTime: DateTime;
402
-
403
- procedure Initialize(CategoryCode: Code[20]; AdjustmentPercent: Decimal; NewEffectiveDate: Date)
404
- begin
405
- ItemCategoryCode := CategoryCode;
406
- PriceAdjustmentPercent := AdjustmentPercent;
407
- EffectiveDate := NewEffectiveDate;
408
- Clear(ProcessedItems);
409
- Clear(OriginalPrices);
410
- end;
411
-
412
- procedure Execute(): Boolean
413
- var
414
- Item: Record Item;
415
- NewPrice: Decimal;
416
- ProcessedCount: Integer;
417
- begin
418
- ExecutionTime := CurrentDateTime;
419
-
420
- if ItemCategoryCode = '' then
421
- exit(false);
422
-
423
- if PriceAdjustmentPercent = 0 then
424
- exit(false);
425
-
426
- try
427
- Item.SetRange("Item Category Code", ItemCategoryCode);
428
- Item.SetRange(Blocked, false);
429
-
430
- if Item.FindSet() then
431
- repeat
432
- // Store original price for undo capability
433
- OriginalPrices.Set(Item."No.", Item."Unit Price");
434
-
435
- // Calculate new price
436
- NewPrice := Item."Unit Price" * (1 + PriceAdjustmentPercent / 100);
437
- NewPrice := Round(NewPrice, 0.01);
438
-
439
- // Update price
440
- Item.Validate("Unit Price", NewPrice);
441
- Item.Modify(true);
442
-
443
- ProcessedItems.Add(Item."No.");
444
- ProcessedCount += 1;
445
-
446
- // Commit periodically for large batches
447
- if ProcessedCount mod 100 = 0 then
448
- Commit();
449
-
450
- until Item.Next() = 0;
451
-
452
- exit(true);
453
-
454
- except
455
- exit(false);
456
- end;
457
- end;
458
-
459
- procedure GetCommandName(): Text[50]
460
- begin
461
- exit('BATCH_UPDATE_PRICES');
462
- end;
463
-
464
- procedure GetDescription(): Text[250]
465
- begin
466
- exit(StrSubstNo('Update prices for category %1 by %2%', ItemCategoryCode, PriceAdjustmentPercent));
467
- end;
468
-
469
- procedure CanUndo(): Boolean
470
- begin
471
- exit(ProcessedItems.Count > 0);
472
- end;
473
-
474
- procedure Undo(): Boolean
475
- var
476
- Item: Record Item;
477
- ItemNo: Code[20];
478
- OriginalPrice: Decimal;
479
- UndoCount: Integer;
480
- begin
481
- try
482
- foreach ItemNo in ProcessedItems do begin
483
- if Item.Get(ItemNo) and OriginalPrices.Get(ItemNo, OriginalPrice) then begin
484
- Item.Validate("Unit Price", OriginalPrice);
485
- Item.Modify(true);
486
- UndoCount += 1;
487
-
488
- if UndoCount mod 100 = 0 then
489
- Commit();
490
- end;
491
- end;
492
-
493
- exit(true);
494
-
495
- except
496
- exit(false);
497
- end;
498
- end;
499
-
500
- procedure GetExecutionTime(): DateTime
501
- begin
502
- exit(ExecutionTime);
503
- end;
504
-
505
- procedure GetCommandData(): Dictionary of [Text, Variant]
506
- var
507
- CommandData: Dictionary of [Text, Variant];
508
- begin
509
- CommandData.Set('ItemCategory', ItemCategoryCode);
510
- CommandData.Set('AdjustmentPercent', PriceAdjustmentPercent);
511
- CommandData.Set('EffectiveDate', EffectiveDate);
512
- CommandData.Set('ProcessedCount', ProcessedItems.Count);
513
-
514
- exit(CommandData);
515
- end;
516
- }
517
- ```
518
-
519
- ## Priority Queue Implementation
520
-
521
- ```al
522
- // Priority queue for command processing
523
- codeunit 50703 "Priority Command Queue"
524
- {
525
- var
526
- HighPriorityQueue: List of [Interface ICommand];
527
- NormalPriorityQueue: List of [Interface ICommand];
528
- LowPriorityQueue: List of [Interface ICommand];
529
-
530
- procedure EnqueueCommand(Command: Interface ICommand; Priority: Option High,Normal,Low)
531
- begin
532
- case Priority of
533
- Priority::High:
534
- HighPriorityQueue.Add(Command);
535
- Priority::Normal:
536
- NormalPriorityQueue.Add(Command);
537
- Priority::Low:
538
- LowPriorityQueue.Add(Command);
539
- end;
540
-
541
- LogCommandEnqueued(Command, Priority);
542
- end;
543
-
544
- procedure DequeueNextCommand(): Interface ICommand
545
- var
546
- EmptyCommand: Interface ICommand;
547
- begin
548
- // Process high priority first
549
- if HighPriorityQueue.Count > 0 then begin
550
- EmptyCommand := HighPriorityQueue.Get(1);
551
- HighPriorityQueue.RemoveAt(1);
552
- exit(EmptyCommand);
553
- end;
554
-
555
- // Then normal priority
556
- if NormalPriorityQueue.Count > 0 then begin
557
- EmptyCommand := NormalPriorityQueue.Get(1);
558
- NormalPriorityQueue.RemoveAt(1);
559
- exit(EmptyCommand);
560
- end;
561
-
562
- // Finally low priority
563
- if LowPriorityQueue.Count > 0 then begin
564
- EmptyCommand := LowPriorityQueue.Get(1);
565
- LowPriorityQueue.RemoveAt(1);
566
- exit(EmptyCommand);
567
- end;
568
-
569
- exit(EmptyCommand);
570
- end;
571
-
572
- procedure HasCommands(): Boolean
573
- begin
574
- exit((HighPriorityQueue.Count > 0) or (NormalPriorityQueue.Count > 0) or (LowPriorityQueue.Count > 0));
575
- end;
576
-
577
- procedure GetQueueCounts(): Dictionary of [Text, Integer]
578
- var
579
- Counts: Dictionary of [Text, Integer];
580
- begin
581
- Counts.Set('High', HighPriorityQueue.Count);
582
- Counts.Set('Normal', NormalPriorityQueue.Count);
583
- Counts.Set('Low', LowPriorityQueue.Count);
584
-
585
- exit(Counts);
586
- end;
587
-
588
- procedure ProcessAllCommandsByPriority(): Integer
589
- var
590
- Command: Interface ICommand;
591
- ProcessedCount: Integer;
592
- begin
593
- ProcessedCount := 0;
594
-
595
- while HasCommands() do begin
596
- Command := DequeueNextCommand();
597
- if ExecuteCommand(Command) then
598
- ProcessedCount += 1;
599
- end;
600
-
601
- exit(ProcessedCount);
602
- end;
603
-
604
- local procedure ExecuteCommand(Command: Interface ICommand): Boolean
605
- begin
606
- try
607
- exit(Command.Execute());
608
- except
609
- LogCommandError(Command, GetLastErrorText);
610
- exit(false);
611
- end;
612
- end;
613
-
614
- local procedure LogCommandEnqueued(Command: Interface ICommand; Priority: Option)
615
- begin
616
- // Log command enqueue with priority
617
- end;
618
-
619
- local procedure LogCommandError(Command: Interface ICommand; ErrorText: Text)
620
- begin
621
- // Log command execution error
622
- end;
623
- }
624
- ```
625
-
626
- ## Usage Example
627
-
628
- ```al
629
- // Example of using the command queue system
630
- codeunit 50704 "Command Queue Usage Example"
631
- {
632
- procedure DemonstrateCommandQueue()
633
- var
634
- CommandQueue: Codeunit "Command Queue Manager";
635
- SalesDocCommand: Codeunit "Create Sales Document Cmd";
636
- PriceUpdateCommand: Codeunit "Batch Update Prices Cmd";
637
- Items: List of [Dictionary of [Text, Variant]];
638
- ItemData: Dictionary of [Text, Variant];
639
- QueueStatus: Dictionary of [Text, Variant];
640
- ProcessedCount: Integer;
641
- begin
642
- // Create sales document command
643
- ItemData.Set('ItemNo', 'ITEM001');
644
- ItemData.Set('Quantity', 5);
645
- ItemData.Set('UnitPrice', 25.00);
646
- Items.Add(ItemData);
647
-
648
- Clear(ItemData);
649
- ItemData.Set('ItemNo', 'ITEM002');
650
- ItemData.Set('Quantity', 10);
651
- Items.Add(ItemData);
652
-
653
- SalesDocCommand.Initialize('CUST001', Items, Today);
654
-
655
- // Create price update command
656
- PriceUpdateCommand.Initialize('ELECTRONICS', 5.0, Today);
657
-
658
- // Enqueue commands
659
- CommandQueue.EnqueueCommand(SalesDocCommand);
660
- CommandQueue.EnqueueCommand(PriceUpdateCommand);
661
-
662
- // Process all commands
663
- ProcessedCount := CommandQueue.ProcessAllCommands();
664
-
665
- // Check status
666
- QueueStatus := CommandQueue.GetQueueStatus();
667
-
668
- Message('Processed %1 commands. Queue status: %2', ProcessedCount, Format(QueueStatus));
669
-
670
- // Demonstrate undo
671
- if CommandQueue.UndoLastCommand() then
672
- Message('Last command undone successfully');
673
- end;
674
- }
675
- ```
676
-
677
- This comprehensive implementation provides a flexible command queue system with support for priority processing, undo operations, batch processing, and comprehensive logging for reliable asynchronous processing in Business Central.