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,427 +0,0 @@
1
- # Type-Safe Operations Sample
2
-
3
- ## Overview
4
- This sample demonstrates type-safe operation patterns in AL including generic procedures, interface-based type safety, and compile-time type validation techniques.
5
-
6
- ## Generic Type-Safe Procedures
7
-
8
- ```al
9
- codeunit 50400 "Type Safe Operations"
10
- {
11
- procedure SafeGetRecord<T>(RecordNo: Code[20]; var TargetRecord: Record T): Boolean
12
- begin
13
- TargetRecord.SetRange("No.", RecordNo);
14
- exit(TargetRecord.FindFirst());
15
- end;
16
-
17
- procedure SafeUpdateField<T>(var TargetRecord: Record T; FieldNo: Integer; NewValue: Variant): Boolean
18
- var
19
- RecordRef: RecordRef;
20
- FieldRef: FieldRef;
21
- begin
22
- RecordRef.GetTable(TargetRecord);
23
-
24
- if not RecordRef.FieldExist(FieldNo) then
25
- exit(false);
26
-
27
- FieldRef := RecordRef.Field(FieldNo);
28
-
29
- if not ValidateFieldType(FieldRef, NewValue) then
30
- exit(false);
31
-
32
- FieldRef.Value := NewValue;
33
- RecordRef.SetTable(TargetRecord);
34
-
35
- exit(TargetRecord.Modify(true));
36
- end;
37
-
38
- local procedure ValidateFieldType(FieldRef: FieldRef; NewValue: Variant): Boolean
39
- begin
40
- case FieldRef.Type of
41
- FieldType::Code:
42
- exit(NewValue.IsCode);
43
- FieldType::Text:
44
- exit(NewValue.IsText);
45
- FieldType::Integer:
46
- exit(NewValue.IsInteger);
47
- FieldType::Decimal:
48
- exit(NewValue.IsDecimal);
49
- FieldType::Boolean:
50
- exit(NewValue.IsBoolean);
51
- FieldType::Date:
52
- exit(NewValue.IsDate);
53
- FieldType::DateTime:
54
- exit(NewValue.IsDateTime);
55
- else
56
- exit(false);
57
- end;
58
- end;
59
- }
60
- ```
61
-
62
- ## Interface-Based Type Safety
63
-
64
- ```al
65
- interface "Type Safe Validator"
66
- {
67
- procedure Validate(Value: Variant): Boolean;
68
- procedure GetValidationMessage(): Text;
69
- }
70
-
71
- codeunit 50401 "Customer Validator" implements "Type Safe Validator"
72
- {
73
- procedure Validate(Value: Variant): Boolean
74
- var
75
- Customer: Record Customer;
76
- begin
77
- if not Value.IsRecord then
78
- exit(false);
79
-
80
- Customer := Value;
81
- exit(ValidateCustomer(Customer));
82
- end;
83
-
84
- procedure GetValidationMessage(): Text
85
- begin
86
- exit('Customer validation failed');
87
- end;
88
-
89
- local procedure ValidateCustomer(Customer: Record Customer): Boolean
90
- begin
91
- if Customer."No." = '' then
92
- exit(false);
93
-
94
- if Customer.Name = '' then
95
- exit(false);
96
-
97
- if Customer.Blocked <> Customer.Blocked::" " then
98
- exit(false);
99
-
100
- exit(true);
101
- end;
102
- }
103
-
104
- codeunit 50402 "Item Validator" implements "Type Safe Validator"
105
- {
106
- procedure Validate(Value: Variant): Boolean
107
- var
108
- Item: Record Item;
109
- begin
110
- if not Value.IsRecord then
111
- exit(false);
112
-
113
- Item := Value;
114
- exit(ValidateItem(Item));
115
- end;
116
-
117
- procedure GetValidationMessage(): Text
118
- begin
119
- exit('Item validation failed');
120
- end;
121
-
122
- local procedure ValidateItem(Item: Record Item): Boolean
123
- begin
124
- if Item."No." = '' then
125
- exit(false);
126
-
127
- if Item.Description = '' then
128
- exit(false);
129
-
130
- if Item.Type = Item.Type::" " then
131
- exit(false);
132
-
133
- exit(true);
134
- end;
135
- }
136
- ```
137
-
138
- ## Type-Safe Data Processing
139
-
140
- ```al
141
- codeunit 50403 "Type Safe Data Processor"
142
- {
143
- procedure ProcessTypedData<T>(var DataRecord: Record T; Processor: Interface "Data Processor"): Boolean
144
- var
145
- RecordVariant: Variant;
146
- begin
147
- RecordVariant := DataRecord;
148
-
149
- if not Processor.CanProcess(RecordVariant) then
150
- exit(false);
151
-
152
- if not Processor.Process(RecordVariant) then
153
- exit(false);
154
-
155
- DataRecord := RecordVariant;
156
- exit(true);
157
- end;
158
-
159
- procedure BatchProcessRecords<T>(var RecordSet: Record T; Processor: Interface "Data Processor"): Integer
160
- var
161
- ProcessedCount: Integer;
162
- CurrentRecord: Record T;
163
- begin
164
- RecordSet.FindSet();
165
- repeat
166
- CurrentRecord := RecordSet;
167
- if ProcessTypedData(CurrentRecord, Processor) then
168
- ProcessedCount += 1;
169
- until RecordSet.Next() = 0;
170
-
171
- exit(ProcessedCount);
172
- end;
173
- }
174
-
175
- interface "Data Processor"
176
- {
177
- procedure CanProcess(Data: Variant): Boolean;
178
- procedure Process(var Data: Variant): Boolean;
179
- procedure GetProcessorName(): Text;
180
- }
181
- ```
182
-
183
- ## Type-Safe Configuration Pattern
184
-
185
- ```al
186
- codeunit 50404 "Type Safe Config Manager"
187
- {
188
- procedure GetConfigValue<T>(ConfigKey: Code[50]): T
189
- var
190
- ConfigRecord: Record "Type Safe Configuration";
191
- ResultValue: T;
192
- ConfigVariant: Variant;
193
- begin
194
- if not ConfigRecord.Get(ConfigKey) then
195
- Error('Configuration key %1 not found', ConfigKey);
196
-
197
- ConfigVariant := ConfigRecord.Value;
198
-
199
- if not TryConvertToType<T>(ConfigVariant, ResultValue) then
200
- Error('Cannot convert configuration value to requested type for key %1', ConfigKey);
201
-
202
- exit(ResultValue);
203
- end;
204
-
205
- procedure SetConfigValue<T>(ConfigKey: Code[50]; Value: T): Boolean
206
- var
207
- ConfigRecord: Record "Type Safe Configuration";
208
- ValueVariant: Variant;
209
- begin
210
- ValueVariant := Value;
211
-
212
- if ConfigRecord.Get(ConfigKey) then
213
- ConfigRecord.Modify()
214
- else begin
215
- ConfigRecord.Init();
216
- ConfigRecord."Config Key" := ConfigKey;
217
- ConfigRecord.Insert();
218
- end;
219
-
220
- ConfigRecord.Value := ValueVariant;
221
- ConfigRecord."Data Type" := GetVariantType(ValueVariant);
222
-
223
- exit(ConfigRecord.Modify(true));
224
- end;
225
-
226
- [TryFunction]
227
- local procedure TryConvertToType<T>(SourceVariant: Variant; var TargetValue: T)
228
- var
229
- TempVariant: Variant;
230
- begin
231
- TempVariant := SourceVariant;
232
- TargetValue := TempVariant;
233
- end;
234
-
235
- local procedure GetVariantType(Value: Variant): Enum "Configuration Data Type"
236
- begin
237
- case true of
238
- Value.IsBoolean:
239
- exit("Configuration Data Type"::Boolean);
240
- Value.IsInteger:
241
- exit("Configuration Data Type"::Integer);
242
- Value.IsDecimal:
243
- exit("Configuration Data Type"::Decimal);
244
- Value.IsText:
245
- exit("Configuration Data Type"::Text);
246
- Value.IsCode:
247
- exit("Configuration Data Type"::Code);
248
- Value.IsDate:
249
- exit("Configuration Data Type"::Date);
250
- Value.IsDateTime:
251
- exit("Configuration Data Type"::DateTime);
252
- else
253
- exit("Configuration Data Type"::Variant);
254
- end;
255
- end;
256
- }
257
- ```
258
-
259
- ## Type-Safe Event Handling
260
-
261
- ```al
262
- codeunit 50405 "Type Safe Event Manager"
263
- {
264
- procedure RegisterEventHandler<T>(EventName: Code[50]; Handler: Interface "Typed Event Handler")
265
- var
266
- EventRegistration: Record "Event Handler Registration";
267
- begin
268
- EventRegistration.Init();
269
- EventRegistration."Event Name" := EventName;
270
- EventRegistration."Handler Type" := GetTypeName<T>();
271
- EventRegistration."Handler Interface" := Handler;
272
- EventRegistration.Active := true;
273
- EventRegistration.Insert(true);
274
- end;
275
-
276
- procedure RaiseTypedEvent<T>(EventName: Code[50]; EventData: T): Boolean
277
- var
278
- EventRegistration: Record "Event Handler Registration";
279
- Handler: Interface "Typed Event Handler";
280
- EventVariant: Variant;
281
- HandlerExecuted: Boolean;
282
- begin
283
- EventVariant := EventData;
284
-
285
- EventRegistration.SetRange("Event Name", EventName);
286
- EventRegistration.SetRange("Handler Type", GetTypeName<T>());
287
- EventRegistration.SetRange(Active, true);
288
-
289
- if EventRegistration.FindSet() then
290
- repeat
291
- Handler := EventRegistration."Handler Interface";
292
- if Handler.HandleEvent(EventVariant) then
293
- HandlerExecuted := true;
294
- until EventRegistration.Next() = 0;
295
-
296
- exit(HandlerExecuted);
297
- end;
298
-
299
- local procedure GetTypeName<T>(): Text
300
- var
301
- TypeHelper: Codeunit "Type Helper";
302
- DummyValue: T;
303
- DummyVariant: Variant;
304
- begin
305
- DummyVariant := DummyValue;
306
- exit(TypeHelper.GetObjectName(DummyVariant));
307
- end;
308
- }
309
-
310
- interface "Typed Event Handler"
311
- {
312
- procedure HandleEvent(EventData: Variant): Boolean;
313
- procedure GetHandlerName(): Text;
314
- }
315
- ```
316
-
317
- ## Type-Safe Collection Operations
318
-
319
- ```al
320
- codeunit 50406 "Type Safe Collections"
321
- {
322
- procedure CreateTypedList<T>(): List of [T]
323
- var
324
- TypedList: List of [T];
325
- begin
326
- exit(TypedList);
327
- end;
328
-
329
- procedure AddToTypedList<T>(var TypedList: List of [T]; Item: T): Boolean
330
- begin
331
- TypedList.Add(Item);
332
- exit(true);
333
- end;
334
-
335
- procedure FilterTypedList<T>(var TypedList: List of [T]; FilterFunc: Interface "List Filter"): List of [T]
336
- var
337
- FilteredList: List of [T];
338
- Item: T;
339
- ItemVariant: Variant;
340
- begin
341
- foreach Item in TypedList do begin
342
- ItemVariant := Item;
343
- if FilterFunc.ShouldInclude(ItemVariant) then
344
- FilteredList.Add(Item);
345
- end;
346
-
347
- exit(FilteredList);
348
- end;
349
-
350
- procedure TransformTypedList<TSource, TTarget>(SourceList: List of [TSource]; TransformFunc: Interface "List Transform"): List of [TTarget]
351
- var
352
- TargetList: List of [TTarget];
353
- SourceItem: TSource;
354
- SourceVariant: Variant;
355
- TargetVariant: Variant;
356
- TargetItem: TTarget;
357
- begin
358
- foreach SourceItem in SourceList do begin
359
- SourceVariant := SourceItem;
360
- if TransformFunc.Transform(SourceVariant, TargetVariant) then begin
361
- TargetItem := TargetVariant;
362
- TargetList.Add(TargetItem);
363
- end;
364
- end;
365
-
366
- exit(TargetList);
367
- end;
368
- }
369
-
370
- interface "List Filter"
371
- {
372
- procedure ShouldInclude(Item: Variant): Boolean;
373
- }
374
-
375
- interface "List Transform"
376
- {
377
- procedure Transform(Source: Variant; var Target: Variant): Boolean;
378
- }
379
- ```
380
-
381
- ## Type-Safe Error Handling
382
-
383
- ```al
384
- codeunit 50407 "Type Safe Error Handler"
385
- {
386
- procedure TryOperation<TInput, TOutput>(Input: TInput; Operation: Interface "Typed Operation"; var Output: TOutput): Boolean
387
- var
388
- InputVariant: Variant;
389
- OutputVariant: Variant;
390
- OperationResult: Boolean;
391
- begin
392
- InputVariant := Input;
393
-
394
- if not Operation.Validate(InputVariant) then
395
- exit(false);
396
-
397
- OperationResult := Operation.Execute(InputVariant, OutputVariant);
398
-
399
- if OperationResult then
400
- Output := OutputVariant;
401
-
402
- exit(OperationResult);
403
- end;
404
-
405
- procedure ExecuteWithFallback<T>(PrimaryOperation: Interface "Typed Operation"; FallbackOperation: Interface "Typed Operation"; Input: T): T
406
- var
407
- Output: T;
408
- begin
409
- if TryOperation(Input, PrimaryOperation, Output) then
410
- exit(Output);
411
-
412
- if TryOperation(Input, FallbackOperation, Output) then
413
- exit(Output);
414
-
415
- Error('All operations failed for input type %1', GetTypeName<T>());
416
- end;
417
- }
418
-
419
- interface "Typed Operation"
420
- {
421
- procedure Validate(Input: Variant): Boolean;
422
- procedure Execute(Input: Variant; var Output: Variant): Boolean;
423
- procedure GetOperationName(): Text;
424
- }
425
- ```
426
-
427
- This sample demonstrates comprehensive type-safe operation patterns including generic procedures, interface-based validation, typed collections, configuration management, event handling, and error handling with compile-time type safety.
@@ -1,122 +0,0 @@
1
- ---
2
- title: "Converting AL Single Statements to Compound Blocks"
3
- domain: "sam-coder"
4
- difficulty: "beginner"
5
- bc_versions: "14+"
6
- tags: ["refactoring", "compound-statements", "code-conversion", "development-workflow"]
7
- prerequisites: ["al-syntax-basics", "compound-statement-readability"]
8
- samples: "samples/single-to-compound-conversion.md"
9
- ---
10
- # Converting AL Single Statements to Compound Blocks
11
-
12
- ## Overview
13
-
14
- Converting single AL statements to compound blocks represents a fundamental refactoring pattern that enhances code maintainability and prepares codebases for future expansion. This transformation process involves systematically identifying single-statement constructs and wrapping them in begin-end blocks to create consistent structure.
15
-
16
- The conversion process addresses technical debt in existing AL codebases where single statements were used for simplicity but now create maintenance challenges. Modern AL development practices favor compound statements for their explicit structure and future-proofing benefits.
17
-
18
- This refactoring pattern becomes particularly valuable during code review processes, team transitions, or when preparing legacy AL code for enhancement. The systematic conversion creates a foundation for reliable code evolution without introducing scope-related bugs.
19
-
20
- ## Conversion Methodology
21
-
22
- ### Systematic Identification
23
-
24
- Begin conversion efforts by cataloging all single-statement constructs across the AL codebase. Focus on conditional statements, loop constructs, and exception handlers where single statements appear without compound block structure.
25
-
26
- Use development environment search capabilities to locate patterns like if-then without corresponding begin-end blocks, while loops with single statements, and case branches containing only single operations.
27
-
28
- Document the scope of conversion work to prioritize high-impact areas and coordinate conversion efforts across development team members. This systematic approach prevents duplicate work and ensures comprehensive coverage.
29
-
30
- ### Priority-Based Conversion
31
-
32
- Start conversion efforts with frequently modified code sections where the compound statement benefits provide immediate value. Focus on procedures and triggers that undergo regular enhancement or maintenance activities.
33
-
34
- Prioritize conversion in business logic implementations where requirements changes commonly add new statements to existing conditional or loop constructs. These areas benefit most from the future-proofing aspects of compound statements.
35
-
36
- Consider the development team's current work to align conversion efforts with active development areas. This coordination maximizes the immediate benefits while minimizing disruption to ongoing feature development.
37
-
38
- ### Safe Transformation Process
39
-
40
- Implement conversion changes through controlled refactoring sessions rather than bulk automated transformations. This approach allows verification of each change and prevents introduction of unintended side effects.
41
-
42
- Test each conversion increment to ensure behavioral equivalence between single-statement and compound block implementations. Use existing unit tests or create focused test scenarios to validate conversion accuracy.
43
-
44
- Apply version control branching strategies to isolate conversion work from feature development, allowing safe experimentation and easy rollback if issues arise during the transformation process.
45
-
46
- ## Development Environment Integration
47
-
48
- ### Editor Enhancement
49
-
50
- Configure AL development environments to automatically suggest compound statement conversions during code editing. Many modern editors provide refactoring tools that can identify single-statement opportunities and offer conversion suggestions.
51
-
52
- Set up code formatting rules that automatically insert begin-end blocks when creating new conditional or loop constructs. This proactive approach prevents the accumulation of single-statement constructs in new development.
53
-
54
- Use editor extensions or plugins that highlight single-statement constructs during code review, making conversion opportunities visible without manual scanning.
55
-
56
- ### Automated Detection
57
-
58
- Implement code analysis tools that identify single-statement patterns and generate conversion recommendations. These tools can scan entire AL projects and provide comprehensive reports on conversion opportunities.
59
-
60
- Create custom linting rules that flag single-statement constructs as style violations, encouraging developers to use compound blocks consistently. Configure these rules with appropriate severity levels to balance enforcement with development workflow efficiency.
61
-
62
- Integrate conversion detection into continuous integration processes to catch single-statement introductions before they enter the main codebase. This prevents the accumulation of inconsistent patterns.
63
-
64
- ### Template Integration
65
-
66
- Update code templates and snippets to generate compound statements by default rather than single-statement alternatives. This proactive measure ensures new code follows compound statement patterns automatically.
67
-
68
- Modify code generation tools and wizards to produce begin-end blocks consistently across all conditional and iterative constructs. This systematic approach eliminates the need for subsequent conversion work.
69
-
70
- Share updated templates across development team members to ensure consistent adoption of compound statement patterns in all new development efforts.
71
-
72
- ## Team Collaboration Strategies
73
-
74
- ### Conversion Planning
75
-
76
- Coordinate conversion efforts across development team members to prevent conflicts and ensure comprehensive coverage. Establish clear ownership of different code areas to avoid duplicate conversion work.
77
-
78
- Schedule conversion activities during development lulls or maintenance windows to minimize impact on feature development timelines. Plan conversion work in manageable increments that fit within available development capacity.
79
-
80
- Communicate conversion priorities and progress to keep team members informed about changing code patterns and ensure alignment with ongoing development activities.
81
-
82
- ### Knowledge Transfer
83
-
84
- Provide training and documentation to help team members understand compound statement benefits and conversion techniques. Focus on practical examples that demonstrate the maintainability advantages.
85
-
86
- Establish mentoring relationships between experienced developers and those new to compound statement patterns. This peer support accelerates adoption and ensures consistent application across the team.
87
-
88
- Create conversion guidelines that document approved techniques and common pitfalls to avoid. Share these guidelines through team knowledge bases or development wikis.
89
-
90
- ### Quality Assurance
91
-
92
- Implement peer review processes for conversion work to ensure accuracy and maintain code quality standards. Use code review sessions as teaching opportunities to reinforce compound statement benefits.
93
-
94
- Establish testing protocols that verify conversion accuracy and prevent regression introduction during transformation activities. Create focused test scenarios that validate behavioral equivalence.
95
-
96
- Monitor conversion quality metrics to identify areas where additional training or process refinement might improve outcomes. Track conversion accuracy and team adoption rates to measure progress.
97
-
98
- ## Common Conversion Scenarios
99
-
100
- ### Legacy Code Enhancement
101
-
102
- Address legacy AL codebases that predominantly use single-statement patterns by implementing gradual conversion strategies. Focus on high-value areas where maintainability improvements provide immediate benefits.
103
-
104
- Plan conversion work around scheduled maintenance activities or enhancement projects to maximize efficiency and minimize dedicated refactoring overhead.
105
-
106
- Document legacy code patterns and conversion rationale to help future developers understand the evolution of coding standards within the organization.
107
-
108
- ### Code Review Integration
109
-
110
- Incorporate conversion opportunities into regular code review processes, using review sessions to identify and address single-statement patterns as they arise.
111
-
112
- Establish review guidelines that encourage compound statement adoption without creating adversarial review environments. Focus on educational benefits rather than strict enforcement.
113
-
114
- Use review comments to explain compound statement benefits and provide conversion examples that demonstrate improved maintainability.
115
-
116
- ### New Developer Onboarding
117
-
118
- Include compound statement conversion skills in new developer training programs to establish proper coding patterns from the beginning of team tenure.
119
-
120
- Provide hands-on conversion exercises that give new developers experience with both identification and transformation techniques. Use real codebase examples to make training relevant.
121
-
122
- Assign conversion tasks as learning opportunities for new team members, providing mentorship and feedback throughout the process.
@@ -1,96 +0,0 @@
1
- ---
2
- title: "Template Method Pattern in AL"
3
- domain: "sam-coder"
4
- difficulty: "intermediate"
5
- bc_versions: "14+"
6
- tags: ["template-method", "behavioral-patterns", "algorithm-structure", "inheritance"]
7
- prerequisites: ["object-orientation-al", "inheritance-patterns", "virtual-methods"]
8
- samples: "samples/template-method-pattern.md"
9
- related_topics: ["business-process-template-patterns", "type-safe-operations-al"]
10
- ---
11
-
12
- # Template Method Pattern in AL
13
-
14
- ## Overview
15
-
16
- The Template Method Pattern defines the skeleton of an algorithm in a base class, allowing subclasses to override specific steps without changing the algorithm's structure. In AL development, this pattern enables consistent process execution while providing flexibility for customization.
17
-
18
- **Key Benefit**: Provides a stable algorithm framework that ensures consistent execution while enabling customization of specific steps through inheritance.
19
-
20
- ## Core Pattern Architecture
21
-
22
- ### Algorithm Skeleton Definition
23
- Define the overall algorithm structure in a base codeunit or interface, establishing the sequence of operations and control flow.
24
-
25
- ### Extension Points
26
- Identify specific steps in the algorithm that can be customized by subclasses while maintaining the overall algorithm integrity.
27
-
28
- ### Invariant Operations
29
- Implement operations that remain constant across all algorithm implementations, providing stability and consistency.
30
-
31
- ## Implementation Strategies
32
-
33
- ### Virtual Method Framework
34
- Use virtual methods in AL to create extension points that subclasses can override while maintaining the template algorithm structure.
35
-
36
- ### Interface-Based Templates
37
- Design template patterns using interfaces to define algorithm contracts that implementing classes must fulfill.
38
-
39
- ### Event-Driven Templates
40
- Integrate template methods with AL event systems to provide extension points without requiring inheritance.
41
-
42
- ## AL-Specific Patterns
43
-
44
- ### Codeunit Template Hierarchy
45
- Create codeunit hierarchies where base codeunits define template algorithms and derived codeunits customize specific operations.
46
-
47
- ### Page Template Patterns
48
- Implement page template patterns that provide consistent user interaction flows while allowing customization of specific behaviors.
49
-
50
- ### Report Template Framework
51
- Design report templates that define consistent report generation algorithms while enabling customization of data processing and formatting.
52
-
53
- ## Advanced Template Techniques
54
-
55
- ### Multi-Phase Templates
56
- Design template algorithms that support multiple phases of execution, enabling complex customization scenarios.
57
-
58
- ### Conditional Template Execution
59
- Implement template methods that can conditionally execute different algorithm branches based on runtime conditions or configuration.
60
-
61
- ### Nested Template Patterns
62
- Create nested template structures where template methods can invoke other template methods, enabling complex algorithm composition.
63
-
64
- ## Advanced Implementation
65
-
66
- ### Process Integration
67
- Design templates for business processes, data operations, and workflow automation with consistent error handling.
68
-
69
- ### Performance & Validation
70
- Optimize template efficiency, implement lazy evaluation, and provide consistent validation approaches.
71
-
72
- ## Implementation Guidelines
73
-
74
- ### Testing & Documentation
75
- Validate template structure, test customizations, and provide comprehensive documentation with clear customization guidelines.
76
-
77
- ### Framework Integration
78
- Integrate with existing Business Central frameworks and patterns for consistent implementation.
79
-
80
- ### Extension Integration
81
- Design templates that work effectively with AL extension mechanisms and AppSource publishing requirements.
82
-
83
- ### Cross-Module Templates
84
- Create template patterns that can work across different modules while maintaining consistent behavior.
85
-
86
- ## Best Practices
87
-
88
- Keep algorithms focused, minimize extension points, document contracts, and implement comprehensive error handling.
89
-
90
- ## Common Pitfalls
91
-
92
- Avoid template complexity and inflexible designs that reduce effectiveness and customization opportunities.
93
-
94
- *Complete template method examples: samples/template-method-pattern.md*
95
- *Business process templates: business-process-template-patterns.md*
96
- *Type-safe implementations: type-safe-operations-al.md*