bc-code-intelligence-mcp 1.3.2 → 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 (567) hide show
  1. package/README.md +1 -0
  2. package/dist/config/test-enhanced-layer-service.js +10 -10
  3. package/dist/config/test-enhanced-layer-service.js.map +1 -1
  4. package/dist/dev/hot-reload.d.ts +2 -2
  5. package/dist/dev/hot-reload.d.ts.map +1 -1
  6. package/dist/dev/hot-reload.js.map +1 -1
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +43 -41
  10. package/dist/index.js.map +1 -1
  11. package/dist/layers/index.d.ts +1 -1
  12. package/dist/layers/index.d.ts.map +1 -1
  13. package/dist/layers/index.js +1 -1
  14. package/dist/layers/index.js.map +1 -1
  15. package/dist/layers/layer-service.d.ts.map +1 -1
  16. package/dist/layers/layer-service.js +4 -1
  17. package/dist/layers/layer-service.js.map +1 -1
  18. package/dist/search/intelligent-search.d.ts.map +1 -1
  19. package/dist/search/intelligent-search.js +5 -2
  20. package/dist/search/intelligent-search.js.map +1 -1
  21. package/dist/services/code-analysis-service.d.ts.map +1 -1
  22. package/dist/services/code-analysis-service.js +8 -1
  23. package/dist/services/code-analysis-service.js.map +1 -1
  24. package/dist/services/knowledge-service.d.ts +21 -10
  25. package/dist/services/knowledge-service.d.ts.map +1 -1
  26. package/dist/services/knowledge-service.js +82 -59
  27. package/dist/services/knowledge-service.js.map +1 -1
  28. package/dist/services/multi-content-layer-service.d.ts +90 -0
  29. package/dist/services/multi-content-layer-service.d.ts.map +1 -1
  30. package/dist/services/multi-content-layer-service.js +380 -0
  31. package/dist/services/multi-content-layer-service.js.map +1 -1
  32. package/dist/services/roleplay-engine.d.ts +1 -1
  33. package/dist/services/roleplay-engine.d.ts.map +1 -1
  34. package/dist/services/roleplay-engine.js +40 -12
  35. package/dist/services/roleplay-engine.js.map +1 -1
  36. package/dist/services/workflow-service.d.ts +11 -3
  37. package/dist/services/workflow-service.d.ts.map +1 -1
  38. package/dist/services/workflow-service.js +119 -78
  39. package/dist/services/workflow-service.js.map +1 -1
  40. package/dist/streamlined-handlers.d.ts +31 -2
  41. package/dist/streamlined-handlers.d.ts.map +1 -1
  42. package/dist/streamlined-handlers.js +152 -110
  43. package/dist/streamlined-handlers.js.map +1 -1
  44. package/dist/streamlined-tools.d.ts +12 -0
  45. package/dist/streamlined-tools.d.ts.map +1 -1
  46. package/dist/streamlined-tools.js +11 -6
  47. package/dist/streamlined-tools.js.map +1 -1
  48. package/dist/tools/specialist-tools.d.ts.map +1 -1
  49. package/dist/tools/specialist-tools.js +23 -13
  50. package/dist/tools/specialist-tools.js.map +1 -1
  51. package/dist/types/bc-knowledge.d.ts +10 -7
  52. package/dist/types/bc-knowledge.d.ts.map +1 -1
  53. package/dist/types/bc-knowledge.js +23 -1
  54. package/dist/types/bc-knowledge.js.map +1 -1
  55. package/dist/types/roleplay-types.d.ts +1 -0
  56. package/dist/types/roleplay-types.d.ts.map +1 -1
  57. package/package.json +13 -4
  58. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +0 -24
  59. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +0 -24
  60. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +0 -30
  61. package/embedded-knowledge/AGENTS.md +0 -178
  62. package/embedded-knowledge/CONTRIBUTING.md +0 -58
  63. package/embedded-knowledge/LICENSE +0 -21
  64. package/embedded-knowledge/README.md +0 -32
  65. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +0 -90
  66. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +0 -113
  67. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +0 -101
  68. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +0 -87
  69. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +0 -155
  70. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +0 -138
  71. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +0 -79
  72. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +0 -280
  73. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +0 -200
  74. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +0 -565
  75. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +0 -665
  76. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +0 -325
  77. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +0 -696
  78. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +0 -320
  79. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +0 -102
  80. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +0 -433
  81. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +0 -66
  82. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +0 -115
  83. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +0 -295
  84. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +0 -86
  85. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +0 -96
  86. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +0 -70
  87. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +0 -84
  88. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +0 -93
  89. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +0 -73
  90. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +0 -78
  91. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +0 -79
  92. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +0 -87
  93. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +0 -209
  94. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +0 -246
  95. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +0 -107
  96. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +0 -105
  97. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +0 -186
  98. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +0 -60
  99. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +0 -139
  100. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +0 -190
  101. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +0 -516
  102. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +0 -298
  103. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +0 -324
  104. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +0 -344
  105. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +0 -137
  106. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +0 -340
  107. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +0 -810
  108. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +0 -86
  109. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +0 -110
  110. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +0 -758
  111. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +0 -665
  112. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +0 -316
  113. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +0 -223
  114. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +0 -149
  115. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +0 -412
  116. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +0 -211
  117. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +0 -155
  118. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +0 -475
  119. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +0 -238
  120. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +0 -97
  121. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +0 -666
  122. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +0 -319
  123. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +0 -236
  124. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +0 -59
  125. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +0 -67
  126. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +0 -70
  127. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +0 -90
  128. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +0 -87
  129. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +0 -70
  130. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +0 -74
  131. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +0 -81
  132. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +0 -56
  133. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +0 -66
  134. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +0 -79
  135. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +0 -78
  136. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +0 -83
  137. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +0 -76
  138. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +0 -104
  139. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +0 -145
  140. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +0 -104
  141. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +0 -114
  142. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +0 -356
  143. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +0 -256
  144. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +0 -101
  145. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +0 -108
  146. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +0 -80
  147. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +0 -98
  148. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +0 -123
  149. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +0 -96
  150. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +0 -115
  151. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +0 -115
  152. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +0 -114
  153. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +0 -395
  154. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +0 -479
  155. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +0 -548
  156. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +0 -287
  157. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +0 -434
  158. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +0 -508
  159. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +0 -615
  160. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +0 -144
  161. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +0 -96
  162. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +0 -124
  163. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +0 -84
  164. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +0 -75
  165. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +0 -96
  166. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +0 -385
  167. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +0 -72
  168. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +0 -48
  169. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +0 -49
  170. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +0 -67
  171. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +0 -119
  172. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +0 -123
  173. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +0 -64
  174. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +0 -60
  175. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +0 -83
  176. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +0 -716
  177. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +0 -101
  178. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +0 -91
  179. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +0 -79
  180. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +0 -79
  181. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +0 -89
  182. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +0 -76
  183. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +0 -76
  184. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +0 -76
  185. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +0 -81
  186. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +0 -76
  187. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +0 -75
  188. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +0 -76
  189. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +0 -76
  190. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +0 -76
  191. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +0 -96
  192. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +0 -76
  193. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +0 -86
  194. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +0 -90
  195. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +0 -82
  196. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +0 -78
  197. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +0 -76
  198. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +0 -78
  199. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +0 -100
  200. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +0 -115
  201. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +0 -124
  202. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +0 -110
  203. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +0 -438
  204. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +0 -255
  205. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +0 -209
  206. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +0 -218
  207. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +0 -218
  208. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +0 -280
  209. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +0 -188
  210. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +0 -245
  211. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +0 -244
  212. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +0 -278
  213. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +0 -484
  214. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +0 -64
  215. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +0 -107
  216. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +0 -280
  217. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +0 -75
  218. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +0 -67
  219. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +0 -76
  220. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +0 -98
  221. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +0 -128
  222. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +0 -75
  223. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +0 -95
  224. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +0 -141
  225. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +0 -91
  226. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +0 -118
  227. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +0 -111
  228. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +0 -113
  229. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +0 -127
  230. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +0 -141
  231. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +0 -66
  232. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +0 -96
  233. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +0 -161
  234. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +0 -177
  235. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +0 -239
  236. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +0 -346
  237. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +0 -298
  238. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +0 -677
  239. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +0 -117
  240. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +0 -75
  241. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +0 -169
  242. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +0 -399
  243. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +0 -356
  244. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +0 -889
  245. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +0 -84
  246. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +0 -127
  247. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +0 -89
  248. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +0 -516
  249. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +0 -61
  250. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +0 -427
  251. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +0 -122
  252. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +0 -96
  253. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +0 -101
  254. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +0 -149
  255. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +0 -107
  256. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +0 -95
  257. package/embedded-knowledge/domains/seth-security/api-permission-model.md +0 -115
  258. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +0 -78
  259. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +0 -373
  260. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +0 -308
  261. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +0 -79
  262. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +0 -78
  263. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +0 -81
  264. package/embedded-knowledge/indexes/bc-version-matrix.json +0 -188
  265. package/embedded-knowledge/indexes/domain-catalog.json +0 -106
  266. package/embedded-knowledge/indexes/tags/abbreviations.json +0 -1
  267. package/embedded-knowledge/indexes/tags/abstraction.json +0 -1
  268. package/embedded-knowledge/indexes/tags/access-control.json +0 -1
  269. package/embedded-knowledge/indexes/tags/accessibility.json +0 -1
  270. package/embedded-knowledge/indexes/tags/actions.json +0 -1
  271. package/embedded-knowledge/indexes/tags/advanced-patterns.json +0 -1
  272. package/embedded-knowledge/indexes/tags/advanced.json +0 -1
  273. package/embedded-knowledge/indexes/tags/al-extension.json +0 -1
  274. package/embedded-knowledge/indexes/tags/al-generics.json +0 -1
  275. package/embedded-knowledge/indexes/tags/al-objects.json +0 -1
  276. package/embedded-knowledge/indexes/tags/al-syntax.json +0 -1
  277. package/embedded-knowledge/indexes/tags/algorithm-structure.json +0 -1
  278. package/embedded-knowledge/indexes/tags/alternatives.json +0 -1
  279. package/embedded-knowledge/indexes/tags/analytics.json +0 -1
  280. package/embedded-knowledge/indexes/tags/api-delegates.json +0 -1
  281. package/embedded-knowledge/indexes/tags/api-design.json +0 -1
  282. package/embedded-knowledge/indexes/tags/api-documentation.json +0 -1
  283. package/embedded-knowledge/indexes/tags/api-endpoints.json +0 -1
  284. package/embedded-knowledge/indexes/tags/api-extensibility.json +0 -1
  285. package/embedded-knowledge/indexes/tags/api-fieldsets.json +0 -1
  286. package/embedded-knowledge/indexes/tags/api-integration.json +0 -1
  287. package/embedded-knowledge/indexes/tags/api-interfaces.json +0 -1
  288. package/embedded-knowledge/indexes/tags/api-optimization.json +0 -1
  289. package/embedded-knowledge/indexes/tags/api-pages.json +0 -1
  290. package/embedded-knowledge/indexes/tags/api-patterns.json +0 -1
  291. package/embedded-knowledge/indexes/tags/api-permissions.json +0 -1
  292. package/embedded-knowledge/indexes/tags/api-responses.json +0 -1
  293. package/embedded-knowledge/indexes/tags/api-simplification.json +0 -1
  294. package/embedded-knowledge/indexes/tags/api.json +0 -1
  295. package/embedded-knowledge/indexes/tags/architecture.json +0 -1
  296. package/embedded-knowledge/indexes/tags/async-patterns.json +0 -1
  297. package/embedded-knowledge/indexes/tags/async-processing.json +0 -1
  298. package/embedded-knowledge/indexes/tags/automatic-registration.json +0 -1
  299. package/embedded-knowledge/indexes/tags/batch-operations.json +0 -1
  300. package/embedded-knowledge/indexes/tags/bc24-migration.json +0 -1
  301. package/embedded-knowledge/indexes/tags/begin-blocks.json +0 -1
  302. package/embedded-knowledge/indexes/tags/begin-end.json +0 -1
  303. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +0 -1
  304. package/embedded-knowledge/indexes/tags/best-practices.json +0 -1
  305. package/embedded-knowledge/indexes/tags/binding.json +0 -1
  306. package/embedded-knowledge/indexes/tags/block-structure.json +0 -1
  307. package/embedded-knowledge/indexes/tags/blocks.json +0 -1
  308. package/embedded-knowledge/indexes/tags/boolean-expressions.json +0 -1
  309. package/embedded-knowledge/indexes/tags/branching.json +0 -1
  310. package/embedded-knowledge/indexes/tags/breaking-changes.json +0 -1
  311. package/embedded-knowledge/indexes/tags/breakpoints.json +0 -1
  312. package/embedded-knowledge/indexes/tags/business-foundation.json +0 -1
  313. package/embedded-knowledge/indexes/tags/business-infrastructure.json +0 -1
  314. package/embedded-knowledge/indexes/tags/business-process.json +0 -1
  315. package/embedded-knowledge/indexes/tags/business-rules.json +0 -1
  316. package/embedded-knowledge/indexes/tags/caching.json +0 -1
  317. package/embedded-knowledge/indexes/tags/case-statements.json +0 -1
  318. package/embedded-knowledge/indexes/tags/case.json +0 -1
  319. package/embedded-knowledge/indexes/tags/code-analysis.json +0 -1
  320. package/embedded-knowledge/indexes/tags/code-clarity.json +0 -1
  321. package/embedded-knowledge/indexes/tags/code-comprehension.json +0 -1
  322. package/embedded-knowledge/indexes/tags/code-conversion.json +0 -1
  323. package/embedded-knowledge/indexes/tags/code-formatting.json +0 -1
  324. package/embedded-knowledge/indexes/tags/code-organization.json +0 -1
  325. package/embedded-knowledge/indexes/tags/code-patterns.json +0 -1
  326. package/embedded-knowledge/indexes/tags/code-quality.json +0 -1
  327. package/embedded-knowledge/indexes/tags/code-reuse.json +0 -1
  328. package/embedded-knowledge/indexes/tags/code-simplification.json +0 -1
  329. package/embedded-knowledge/indexes/tags/code-standards.json +0 -1
  330. package/embedded-knowledge/indexes/tags/code-structure.json +0 -1
  331. package/embedded-knowledge/indexes/tags/code-style.json +0 -1
  332. package/embedded-knowledge/indexes/tags/codeunit-design.json +0 -1
  333. package/embedded-knowledge/indexes/tags/command-queue.json +0 -1
  334. package/embedded-knowledge/indexes/tags/comments.json +0 -1
  335. package/embedded-knowledge/indexes/tags/compile-time-validation.json +0 -1
  336. package/embedded-knowledge/indexes/tags/complex-facade.json +0 -1
  337. package/embedded-knowledge/indexes/tags/complexity-hiding.json +0 -1
  338. package/embedded-knowledge/indexes/tags/complexity-management.json +0 -1
  339. package/embedded-knowledge/indexes/tags/compound-statements.json +0 -1
  340. package/embedded-knowledge/indexes/tags/concurrency.json +0 -1
  341. package/embedded-knowledge/indexes/tags/conditional-logic.json +0 -1
  342. package/embedded-knowledge/indexes/tags/conditional.json +0 -1
  343. package/embedded-knowledge/indexes/tags/conflict-resolution.json +0 -1
  344. package/embedded-knowledge/indexes/tags/consistency.json +0 -1
  345. package/embedded-knowledge/indexes/tags/contract-design.json +0 -1
  346. package/embedded-knowledge/indexes/tags/control-flow.json +0 -1
  347. package/embedded-knowledge/indexes/tags/conversion-guide.json +0 -1
  348. package/embedded-knowledge/indexes/tags/correlation.json +0 -1
  349. package/embedded-knowledge/indexes/tags/custom-messages.json +0 -1
  350. package/embedded-knowledge/indexes/tags/data-access.json +0 -1
  351. package/embedded-knowledge/indexes/tags/data-exposure.json +0 -1
  352. package/embedded-knowledge/indexes/tags/data-integrity.json +0 -1
  353. package/embedded-knowledge/indexes/tags/data-loading.json +0 -1
  354. package/embedded-knowledge/indexes/tags/data-manipulation.json +0 -1
  355. package/embedded-knowledge/indexes/tags/data-modeling.json +0 -1
  356. package/embedded-knowledge/indexes/tags/data-patterns.json +0 -1
  357. package/embedded-knowledge/indexes/tags/data-protection.json +0 -1
  358. package/embedded-knowledge/indexes/tags/data-validation.json +0 -1
  359. package/embedded-knowledge/indexes/tags/database.json +0 -1
  360. package/embedded-knowledge/indexes/tags/debugging.json +0 -1
  361. package/embedded-knowledge/indexes/tags/decision-making.json +0 -1
  362. package/embedded-knowledge/indexes/tags/declaration.json +0 -1
  363. package/embedded-knowledge/indexes/tags/default-messages.json +0 -1
  364. package/embedded-knowledge/indexes/tags/defensive-programming.json +0 -1
  365. package/embedded-knowledge/indexes/tags/deleteall.json +0 -1
  366. package/embedded-knowledge/indexes/tags/dependencies.json +0 -1
  367. package/embedded-knowledge/indexes/tags/deployment.json +0 -1
  368. package/embedded-knowledge/indexes/tags/developer-productivity.json +0 -1
  369. package/embedded-knowledge/indexes/tags/development-workflow.json +0 -1
  370. package/embedded-knowledge/indexes/tags/diagnostics.json +0 -1
  371. package/embedded-knowledge/indexes/tags/dimensions.json +0 -1
  372. package/embedded-knowledge/indexes/tags/documentation.json +0 -1
  373. package/embedded-knowledge/indexes/tags/early-exit.json +0 -1
  374. package/embedded-knowledge/indexes/tags/else-clauses.json +0 -1
  375. package/embedded-knowledge/indexes/tags/end-statements.json +0 -1
  376. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +0 -1
  377. package/embedded-knowledge/indexes/tags/entity-relationships.json +0 -1
  378. package/embedded-knowledge/indexes/tags/error-handling.json +0 -1
  379. package/embedded-knowledge/indexes/tags/error-messages.json +0 -1
  380. package/embedded-knowledge/indexes/tags/error-prevention.json +0 -1
  381. package/embedded-knowledge/indexes/tags/error-text.json +0 -1
  382. package/embedded-knowledge/indexes/tags/etag.json +0 -1
  383. package/embedded-knowledge/indexes/tags/event-bridge.json +0 -1
  384. package/embedded-knowledge/indexes/tags/event-payload.json +0 -1
  385. package/embedded-knowledge/indexes/tags/event-routing.json +0 -1
  386. package/embedded-knowledge/indexes/tags/events.json +0 -1
  387. package/embedded-knowledge/indexes/tags/execution-flow.json +0 -1
  388. package/embedded-knowledge/indexes/tags/expressions.json +0 -1
  389. package/embedded-knowledge/indexes/tags/extensibility.json +0 -1
  390. package/embedded-knowledge/indexes/tags/extensions.json +0 -1
  391. package/embedded-knowledge/indexes/tags/facade-composition.json +0 -1
  392. package/embedded-knowledge/indexes/tags/facade-pattern.json +0 -1
  393. package/embedded-knowledge/indexes/tags/field-control.json +0 -1
  394. package/embedded-knowledge/indexes/tags/field-exclusion.json +0 -1
  395. package/embedded-knowledge/indexes/tags/field-registration.json +0 -1
  396. package/embedded-knowledge/indexes/tags/field-state.json +0 -1
  397. package/embedded-knowledge/indexes/tags/field-validation.json +0 -1
  398. package/embedded-knowledge/indexes/tags/fielderror.json +0 -1
  399. package/embedded-knowledge/indexes/tags/fields.json +0 -1
  400. package/embedded-knowledge/indexes/tags/filtering.json +0 -1
  401. package/embedded-knowledge/indexes/tags/filters.json +0 -1
  402. package/embedded-knowledge/indexes/tags/formatting.json +0 -1
  403. package/embedded-knowledge/indexes/tags/generic-methods.json +0 -1
  404. package/embedded-knowledge/indexes/tags/http-status.json +0 -1
  405. package/embedded-knowledge/indexes/tags/if-statements.json +0 -1
  406. package/embedded-knowledge/indexes/tags/implementation.json +0 -1
  407. package/embedded-knowledge/indexes/tags/indentation.json +0 -1
  408. package/embedded-knowledge/indexes/tags/index-summary.json +0 -277
  409. package/embedded-knowledge/indexes/tags/indexing.json +0 -1
  410. package/embedded-knowledge/indexes/tags/inheritance.json +0 -1
  411. package/embedded-knowledge/indexes/tags/integration.json +0 -1
  412. package/embedded-knowledge/indexes/tags/integrity-checking.json +0 -1
  413. package/embedded-knowledge/indexes/tags/intellisense.json +0 -1
  414. package/embedded-knowledge/indexes/tags/interface-design.json +0 -1
  415. package/embedded-knowledge/indexes/tags/interface-segregation.json +0 -1
  416. package/embedded-knowledge/indexes/tags/isolation.json +0 -1
  417. package/embedded-knowledge/indexes/tags/job-processing.json +0 -1
  418. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +0 -1
  419. package/embedded-knowledge/indexes/tags/keywords.json +0 -1
  420. package/embedded-knowledge/indexes/tags/legacy-modernization.json +0 -1
  421. package/embedded-knowledge/indexes/tags/line-breaks.json +0 -1
  422. package/embedded-knowledge/indexes/tags/line-organization.json +0 -1
  423. package/embedded-knowledge/indexes/tags/line-positioning.json +0 -1
  424. package/embedded-knowledge/indexes/tags/localization.json +0 -1
  425. package/embedded-knowledge/indexes/tags/logging.json +0 -1
  426. package/embedded-knowledge/indexes/tags/loose-coupling.json +0 -1
  427. package/embedded-knowledge/indexes/tags/maintainability.json +0 -1
  428. package/embedded-knowledge/indexes/tags/memory-management.json +0 -1
  429. package/embedded-knowledge/indexes/tags/memory-optimization.json +0 -1
  430. package/embedded-knowledge/indexes/tags/memory.json +0 -1
  431. package/embedded-knowledge/indexes/tags/message-design.json +0 -1
  432. package/embedded-knowledge/indexes/tags/message-formatting.json +0 -1
  433. package/embedded-knowledge/indexes/tags/message-patterns.json +0 -1
  434. package/embedded-knowledge/indexes/tags/metadata-driven.json +0 -1
  435. package/embedded-knowledge/indexes/tags/method-comparison.json +0 -1
  436. package/embedded-knowledge/indexes/tags/module-architecture.json +0 -1
  437. package/embedded-knowledge/indexes/tags/module-validation.json +0 -1
  438. package/embedded-knowledge/indexes/tags/monitoring.json +0 -1
  439. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +0 -1
  440. package/embedded-knowledge/indexes/tags/multi-tenancy.json +0 -1
  441. package/embedded-knowledge/indexes/tags/multiple-values.json +0 -1
  442. package/embedded-knowledge/indexes/tags/naming-conventions.json +0 -1
  443. package/embedded-knowledge/indexes/tags/naming.json +0 -1
  444. package/embedded-knowledge/indexes/tags/navigation.json +0 -1
  445. package/embedded-knowledge/indexes/tags/nested-statements.json +0 -1
  446. package/embedded-knowledge/indexes/tags/no-series-conversion.json +0 -1
  447. package/embedded-knowledge/indexes/tags/no-series-validation.json +0 -1
  448. package/embedded-knowledge/indexes/tags/no-series.json +0 -1
  449. package/embedded-knowledge/indexes/tags/number-generation.json +0 -1
  450. package/embedded-knowledge/indexes/tags/object-documentation.json +0 -1
  451. package/embedded-knowledge/indexes/tags/odata.json +0 -1
  452. package/embedded-knowledge/indexes/tags/ondelete.json +0 -1
  453. package/embedded-knowledge/indexes/tags/onvalidate.json +0 -1
  454. package/embedded-knowledge/indexes/tags/operation-delegation.json +0 -1
  455. package/embedded-knowledge/indexes/tags/operation-safety.json +0 -1
  456. package/embedded-knowledge/indexes/tags/operators.json +0 -1
  457. package/embedded-knowledge/indexes/tags/optimization.json +0 -1
  458. package/embedded-knowledge/indexes/tags/order.json +0 -1
  459. package/embedded-knowledge/indexes/tags/organization.json +0 -1
  460. package/embedded-knowledge/indexes/tags/pages.json +0 -1
  461. package/embedded-knowledge/indexes/tags/parameters.json +0 -1
  462. package/embedded-knowledge/indexes/tags/patterns.json +0 -1
  463. package/embedded-knowledge/indexes/tags/performance-optimization.json +0 -1
  464. package/embedded-knowledge/indexes/tags/performance.json +0 -1
  465. package/embedded-knowledge/indexes/tags/placement.json +0 -1
  466. package/embedded-knowledge/indexes/tags/posting-codeunits.json +0 -1
  467. package/embedded-knowledge/indexes/tags/posting.json +0 -1
  468. package/embedded-knowledge/indexes/tags/preconditions.json +0 -1
  469. package/embedded-knowledge/indexes/tags/primary-key.json +0 -1
  470. package/embedded-knowledge/indexes/tags/privacy.json +0 -1
  471. package/embedded-knowledge/indexes/tags/process-automation.json +0 -1
  472. package/embedded-knowledge/indexes/tags/production.json +0 -1
  473. package/embedded-knowledge/indexes/tags/productivity.json +0 -1
  474. package/embedded-knowledge/indexes/tags/query-performance.json +0 -1
  475. package/embedded-knowledge/indexes/tags/queue-management.json +0 -1
  476. package/embedded-knowledge/indexes/tags/ranges.json +0 -1
  477. package/embedded-knowledge/indexes/tags/readability.json +0 -1
  478. package/embedded-knowledge/indexes/tags/record-access.json +0 -1
  479. package/embedded-knowledge/indexes/tags/record-methods.json +0 -1
  480. package/embedded-knowledge/indexes/tags/refactoring.json +0 -1
  481. package/embedded-knowledge/indexes/tags/reference.json +0 -1
  482. package/embedded-knowledge/indexes/tags/repeat-loops.json +0 -1
  483. package/embedded-knowledge/indexes/tags/repeat-statement.json +0 -1
  484. package/embedded-knowledge/indexes/tags/runtime-errors.json +0 -1
  485. package/embedded-knowledge/indexes/tags/runtime.json +0 -1
  486. package/embedded-knowledge/indexes/tags/safeguards.json +0 -1
  487. package/embedded-knowledge/indexes/tags/security.json +0 -1
  488. package/embedded-knowledge/indexes/tags/sequence-management.json +0 -1
  489. package/embedded-knowledge/indexes/tags/serialization.json +0 -1
  490. package/embedded-knowledge/indexes/tags/session-logmessage.json +0 -1
  491. package/embedded-knowledge/indexes/tags/session.json +0 -1
  492. package/embedded-knowledge/indexes/tags/setloadfields.json +0 -1
  493. package/embedded-knowledge/indexes/tags/shortcuts.json +0 -1
  494. package/embedded-knowledge/indexes/tags/sift.json +0 -1
  495. package/embedded-knowledge/indexes/tags/singleinstance.json +0 -1
  496. package/embedded-knowledge/indexes/tags/spacing.json +0 -1
  497. package/embedded-knowledge/indexes/tags/sql-translation.json +0 -1
  498. package/embedded-knowledge/indexes/tags/standards.json +0 -1
  499. package/embedded-knowledge/indexes/tags/statements.json +0 -1
  500. package/embedded-knowledge/indexes/tags/streaming.json +0 -1
  501. package/embedded-knowledge/indexes/tags/strong-typing.json +0 -1
  502. package/embedded-knowledge/indexes/tags/structural-patterns.json +0 -1
  503. package/embedded-knowledge/indexes/tags/structure.json +0 -1
  504. package/embedded-knowledge/indexes/tags/subscribers.json +0 -1
  505. package/embedded-knowledge/indexes/tags/switch.json +0 -1
  506. package/embedded-knowledge/indexes/tags/symbol-search.json +0 -1
  507. package/embedded-knowledge/indexes/tags/syntax.json +0 -1
  508. package/embedded-knowledge/indexes/tags/systemid.json +0 -1
  509. package/embedded-knowledge/indexes/tags/table-configuration.json +0 -1
  510. package/embedded-knowledge/indexes/tags/table-events.json +0 -1
  511. package/embedded-knowledge/indexes/tags/table-keys.json +0 -1
  512. package/embedded-knowledge/indexes/tags/table-safety.json +0 -1
  513. package/embedded-knowledge/indexes/tags/task-scheduler.json +0 -1
  514. package/embedded-knowledge/indexes/tags/telemetry.json +0 -1
  515. package/embedded-knowledge/indexes/tags/template-method.json +0 -1
  516. package/embedded-knowledge/indexes/tags/temporary-tables.json +0 -1
  517. package/embedded-knowledge/indexes/tags/testfield.json +0 -1
  518. package/embedded-knowledge/indexes/tags/tradeoffs.json +0 -1
  519. package/embedded-knowledge/indexes/tags/triggers.json +0 -1
  520. package/embedded-knowledge/indexes/tags/troubleshooting.json +0 -1
  521. package/embedded-knowledge/indexes/tags/type-safety.json +0 -1
  522. package/embedded-knowledge/indexes/tags/url-structure.json +0 -1
  523. package/embedded-knowledge/indexes/tags/user-experience.json +0 -1
  524. package/embedded-knowledge/indexes/tags/user-feedback.json +0 -1
  525. package/embedded-knowledge/indexes/tags/user-interface.json +0 -1
  526. package/embedded-knowledge/indexes/tags/validation-feedback.json +0 -1
  527. package/embedded-knowledge/indexes/tags/validation.json +0 -1
  528. package/embedded-knowledge/indexes/tags/variables.json +0 -1
  529. package/embedded-knowledge/indexes/tags/verbosity.json +0 -1
  530. package/embedded-knowledge/indexes/tags/vs-code.json +0 -1
  531. package/embedded-knowledge/indexes/tags/web-services.json +0 -1
  532. package/embedded-knowledge/indexes/tags/workflow-management.json +0 -1
  533. package/embedded-knowledge/indexes/tags/workflow-optimization.json +0 -1
  534. package/embedded-knowledge/indexes/tags/workflow-templates.json +0 -1
  535. package/embedded-knowledge/indexes/tags/workspace.json +0 -1
  536. package/embedded-knowledge/indexes/tags/xml-documentation.json +0 -1
  537. package/embedded-knowledge/indexes/topic-relationships.json +0 -128
  538. package/embedded-knowledge/methodologies/index.json +0 -81
  539. package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
  540. package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
  541. package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
  542. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
  543. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
  544. package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
  545. package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
  546. package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
  547. package/embedded-knowledge/methodologies/phases/performance.md +0 -211
  548. package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
  549. package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
  550. package/embedded-knowledge/methodologies/phases/verification.md +0 -146
  551. package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
  552. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
  553. package/embedded-knowledge/specialists/alex-architect.md +0 -216
  554. package/embedded-knowledge/specialists/casey-copilot.md +0 -226
  555. package/embedded-knowledge/specialists/chris-config.md +0 -267
  556. package/embedded-knowledge/specialists/dean-debug.md +0 -222
  557. package/embedded-knowledge/specialists/eva-errors.md +0 -235
  558. package/embedded-knowledge/specialists/jordan-bridge.md +0 -235
  559. package/embedded-knowledge/specialists/logan-legacy.md +0 -209
  560. package/embedded-knowledge/specialists/maya-mentor.md +0 -211
  561. package/embedded-knowledge/specialists/morgan-market.md +0 -226
  562. package/embedded-knowledge/specialists/quinn-tester.md +0 -235
  563. package/embedded-knowledge/specialists/roger-reviewer.md +0 -234
  564. package/embedded-knowledge/specialists/sam-coder.md +0 -359
  565. package/embedded-knowledge/specialists/seth-security.md +0 -235
  566. package/embedded-knowledge/specialists/taylor-docs.md +0 -257
  567. package/embedded-knowledge/specialists/uma-ux.md +0 -235
@@ -1,889 +0,0 @@
1
- # Generic Method Patterns in AL - Code Examples
2
-
3
- This sample demonstrates implementing generic method patterns for type-safe, reusable operations in AL.
4
-
5
- ## Basic Generic Interface
6
-
7
- ```al
8
- // Generic interface for comparable operations
9
- interface IComparable
10
- {
11
- procedure CompareTo(Other: Interface IComparable): Integer;
12
- }
13
-
14
- // Generic interface for collection operations
15
- interface IGenericCollection
16
- {
17
- procedure Add(Item: Variant);
18
- procedure Remove(Item: Variant): Boolean;
19
- procedure Contains(Item: Variant): Boolean;
20
- procedure Count(): Integer;
21
- procedure Clear();
22
- procedure ToArray(): Array of [Variant];
23
- }
24
- ```
25
-
26
- ## Generic List Implementation
27
-
28
- ```al
29
- // Generic list implementation with type safety
30
- codeunit 50800 "Generic List Manager"
31
- {
32
- var
33
- Items: List of [Variant];
34
- ItemType: Text[50];
35
-
36
- procedure Initialize(ExpectedType: Text[50])
37
- begin
38
- Clear(Items);
39
- ItemType := ExpectedType;
40
- end;
41
-
42
- procedure Add(Item: Variant): Boolean
43
- begin
44
- if not ValidateItemType(Item) then
45
- exit(false);
46
-
47
- Items.Add(Item);
48
- exit(true);
49
- end;
50
-
51
- procedure AddRange(NewItems: List of [Variant]): Integer
52
- var
53
- Item: Variant;
54
- AddedCount: Integer;
55
- begin
56
- AddedCount := 0;
57
- foreach Item in NewItems do begin
58
- if Add(Item) then
59
- AddedCount += 1;
60
- end;
61
-
62
- exit(AddedCount);
63
- end;
64
-
65
- procedure Get(Index: Integer): Variant
66
- var
67
- EmptyVariant: Variant;
68
- begin
69
- if (Index < 1) or (Index > Items.Count) then
70
- exit(EmptyVariant);
71
-
72
- exit(Items.Get(Index));
73
- end;
74
-
75
- procedure Set(Index: Integer; Item: Variant): Boolean
76
- begin
77
- if not ValidateItemType(Item) then
78
- exit(false);
79
-
80
- if (Index < 1) or (Index > Items.Count) then
81
- exit(false);
82
-
83
- Items.Set(Index, Item);
84
- exit(true);
85
- end;
86
-
87
- procedure Remove(Item: Variant): Boolean
88
- var
89
- Index: Integer;
90
- begin
91
- Index := IndexOf(Item);
92
- if Index > 0 then begin
93
- Items.RemoveAt(Index);
94
- exit(true);
95
- end;
96
-
97
- exit(false);
98
- end;
99
-
100
- procedure RemoveAt(Index: Integer): Boolean
101
- begin
102
- if (Index < 1) or (Index > Items.Count) then
103
- exit(false);
104
-
105
- Items.RemoveAt(Index);
106
- exit(true);
107
- end;
108
-
109
- procedure IndexOf(Item: Variant): Integer
110
- var
111
- i: Integer;
112
- CurrentItem: Variant;
113
- begin
114
- for i := 1 to Items.Count do begin
115
- CurrentItem := Items.Get(i);
116
- if AreEqual(CurrentItem, Item) then
117
- exit(i);
118
- end;
119
-
120
- exit(0);
121
- end;
122
-
123
- procedure Contains(Item: Variant): Boolean
124
- begin
125
- exit(IndexOf(Item) > 0);
126
- end;
127
-
128
- procedure Count(): Integer
129
- begin
130
- exit(Items.Count);
131
- end;
132
-
133
- procedure Clear()
134
- begin
135
- Items.Clear();
136
- end;
137
-
138
- procedure ToArray(): List of [Variant]
139
- begin
140
- exit(Items);
141
- end;
142
-
143
- procedure Filter(FilterFunction: Text): List of [Variant]
144
- var
145
- FilteredItems: List of [Variant];
146
- Item: Variant;
147
- begin
148
- foreach Item in Items do begin
149
- if ApplyFilter(Item, FilterFunction) then
150
- FilteredItems.Add(Item);
151
- end;
152
-
153
- exit(FilteredItems);
154
- end;
155
-
156
- procedure Map(MapFunction: Text): List of [Variant]
157
- var
158
- MappedItems: List of [Variant];
159
- Item: Variant;
160
- MappedItem: Variant;
161
- begin
162
- foreach Item in Items do begin
163
- MappedItem := ApplyMap(Item, MapFunction);
164
- MappedItems.Add(MappedItem);
165
- end;
166
-
167
- exit(MappedItems);
168
- end;
169
-
170
- procedure Sort(): Boolean
171
- begin
172
- exit(SortItems(Items));
173
- end;
174
-
175
- procedure SortBy(CompareFunction: Text): Boolean
176
- begin
177
- exit(SortItemsBy(Items, CompareFunction));
178
- end;
179
-
180
- local procedure ValidateItemType(Item: Variant): Boolean
181
- var
182
- ActualType: Text[50];
183
- begin
184
- if ItemType = '' then
185
- exit(true); // No type constraint
186
-
187
- ActualType := GetVariantType(Item);
188
- exit(ActualType = ItemType);
189
- end;
190
-
191
- local procedure GetVariantType(Item: Variant): Text[50]
192
- begin
193
- case true of
194
- Item.IsText:
195
- exit('Text');
196
- Item.IsInteger:
197
- exit('Integer');
198
- Item.IsDecimal:
199
- exit('Decimal');
200
- Item.IsBoolean:
201
- exit('Boolean');
202
- Item.IsDate:
203
- exit('Date');
204
- Item.IsTime:
205
- exit('Time');
206
- Item.IsDateTime:
207
- exit('DateTime');
208
- Item.IsCode:
209
- exit('Code');
210
- else
211
- exit('Unknown');
212
- end;
213
- end;
214
-
215
- local procedure AreEqual(Item1: Variant; Item2: Variant): Boolean
216
- begin
217
- // Implement type-specific equality comparison
218
- if GetVariantType(Item1) <> GetVariantType(Item2) then
219
- exit(false);
220
-
221
- exit(Format(Item1) = Format(Item2));
222
- end;
223
-
224
- local procedure ApplyFilter(Item: Variant; FilterFunction: Text): Boolean
225
- begin
226
- // Simplified filter implementation
227
- case FilterFunction of
228
- 'NOT_EMPTY':
229
- exit(Format(Item) <> '');
230
- 'POSITIVE':
231
- begin
232
- if Item.IsInteger then
233
- exit(Item > 0);
234
- if Item.IsDecimal then
235
- exit(Item > 0);
236
- exit(false);
237
- end;
238
- 'NOT_ZERO':
239
- begin
240
- if Item.IsInteger then
241
- exit(Item <> 0);
242
- if Item.IsDecimal then
243
- exit(Item <> 0);
244
- exit(true);
245
- end;
246
- else
247
- exit(true);
248
- end;
249
- end;
250
-
251
- local procedure ApplyMap(Item: Variant; MapFunction: Text): Variant
252
- var
253
- MappedValue: Variant;
254
- TextValue: Text;
255
- IntValue: Integer;
256
- DecValue: Decimal;
257
- begin
258
- case MapFunction of
259
- 'TO_UPPER':
260
- begin
261
- if Item.IsText or Item.IsCode then begin
262
- TextValue := UpperCase(Format(Item));
263
- MappedValue := TextValue;
264
- end else
265
- MappedValue := Item;
266
- end;
267
- 'TO_LOWER':
268
- begin
269
- if Item.IsText or Item.IsCode then begin
270
- TextValue := LowerCase(Format(Item));
271
- MappedValue := TextValue;
272
- end else
273
- MappedValue := Item;
274
- end;
275
- 'DOUBLE':
276
- begin
277
- if Item.IsInteger then begin
278
- IntValue := Item * 2;
279
- MappedValue := IntValue;
280
- end else if Item.IsDecimal then begin
281
- DecValue := Item * 2;
282
- MappedValue := DecValue;
283
- end else
284
- MappedValue := Item;
285
- end;
286
- else
287
- MappedValue := Item;
288
- end;
289
-
290
- exit(MappedValue);
291
- end;
292
-
293
- local procedure SortItems(var ItemList: List of [Variant]): Boolean
294
- var
295
- i, j: Integer;
296
- temp: Variant;
297
- swapped: Boolean;
298
- begin
299
- try
300
- // Bubble sort implementation
301
- for i := 1 to ItemList.Count - 1 do begin
302
- swapped := false;
303
- for j := 1 to ItemList.Count - i do begin
304
- if CompareVariants(ItemList.Get(j), ItemList.Get(j + 1)) > 0 then begin
305
- temp := ItemList.Get(j);
306
- ItemList.Set(j, ItemList.Get(j + 1));
307
- ItemList.Set(j + 1, temp);
308
- swapped := true;
309
- end;
310
- end;
311
- if not swapped then
312
- break;
313
- end;
314
-
315
- exit(true);
316
-
317
- except
318
- exit(false);
319
- end;
320
- end;
321
-
322
- local procedure SortItemsBy(var ItemList: List of [Variant]; CompareFunction: Text): Boolean
323
- begin
324
- // Custom sorting based on compare function
325
- exit(SortItems(ItemList)); // Simplified
326
- end;
327
-
328
- local procedure CompareVariants(Item1: Variant; Item2: Variant): Integer
329
- var
330
- Type1, Type2: Text[50];
331
- Text1, Text2: Text;
332
- Int1, Int2: Integer;
333
- Dec1, Dec2: Decimal;
334
- Date1, Date2: Date;
335
- begin
336
- Type1 := GetVariantType(Item1);
337
- Type2 := GetVariantType(Item2);
338
-
339
- if Type1 <> Type2 then begin
340
- Text1 := Format(Item1);
341
- Text2 := Format(Item2);
342
- case true of
343
- Text1 < Text2:
344
- exit(-1);
345
- Text1 > Text2:
346
- exit(1);
347
- else
348
- exit(0);
349
- end;
350
- end;
351
-
352
- case Type1 of
353
- 'Integer':
354
- begin
355
- Int1 := Item1;
356
- Int2 := Item2;
357
- case true of
358
- Int1 < Int2:
359
- exit(-1);
360
- Int1 > Int2:
361
- exit(1);
362
- else
363
- exit(0);
364
- end;
365
- end;
366
- 'Decimal':
367
- begin
368
- Dec1 := Item1;
369
- Dec2 := Item2;
370
- case true of
371
- Dec1 < Dec2:
372
- exit(-1);
373
- Dec1 > Dec2:
374
- exit(1);
375
- else
376
- exit(0);
377
- end;
378
- end;
379
- 'Date':
380
- begin
381
- Date1 := Item1;
382
- Date2 := Item2;
383
- case true of
384
- Date1 < Date2:
385
- exit(-1);
386
- Date1 > Date2:
387
- exit(1);
388
- else
389
- exit(0);
390
- end;
391
- end;
392
- else
393
- begin
394
- Text1 := Format(Item1);
395
- Text2 := Format(Item2);
396
- case true of
397
- Text1 < Text2:
398
- exit(-1);
399
- Text1 > Text2:
400
- exit(1);
401
- else
402
- exit(0);
403
- end;
404
- end;
405
- end;
406
- end;
407
- }
408
- ```
409
-
410
- ## Generic Dictionary Implementation
411
-
412
- ```al
413
- // Generic dictionary with type-safe key-value operations
414
- codeunit 50801 "Generic Dictionary Manager"
415
- {
416
- var
417
- Keys: List of [Variant];
418
- Values: List of [Variant];
419
- KeyType: Text[50];
420
- ValueType: Text[50];
421
-
422
- procedure Initialize(ExpectedKeyType: Text[50]; ExpectedValueType: Text[50])
423
- begin
424
- Clear(Keys);
425
- Clear(Values);
426
- KeyType := ExpectedKeyType;
427
- ValueType := ExpectedValueType;
428
- end;
429
-
430
- procedure Set(Key: Variant; Value: Variant): Boolean
431
- var
432
- ExistingIndex: Integer;
433
- begin
434
- if not ValidateKeyType(Key) or not ValidateValueType(Value) then
435
- exit(false);
436
-
437
- ExistingIndex := FindKeyIndex(Key);
438
- if ExistingIndex > 0 then begin
439
- Values.Set(ExistingIndex, Value);
440
- end else begin
441
- Keys.Add(Key);
442
- Values.Add(Value);
443
- end;
444
-
445
- exit(true);
446
- end;
447
-
448
- procedure Get(Key: Variant; var Value: Variant): Boolean
449
- var
450
- KeyIndex: Integer;
451
- begin
452
- KeyIndex := FindKeyIndex(Key);
453
- if KeyIndex > 0 then begin
454
- Value := Values.Get(KeyIndex);
455
- exit(true);
456
- end;
457
-
458
- Clear(Value);
459
- exit(false);
460
- end;
461
-
462
- procedure TryGet(Key: Variant): Variant
463
- var
464
- Value: Variant;
465
- EmptyVariant: Variant;
466
- begin
467
- if Get(Key, Value) then
468
- exit(Value)
469
- else
470
- exit(EmptyVariant);
471
- end;
472
-
473
- procedure ContainsKey(Key: Variant): Boolean
474
- begin
475
- exit(FindKeyIndex(Key) > 0);
476
- end;
477
-
478
- procedure ContainsValue(Value: Variant): Boolean
479
- var
480
- StoredValue: Variant;
481
- i: Integer;
482
- begin
483
- for i := 1 to Values.Count do begin
484
- StoredValue := Values.Get(i);
485
- if AreEqual(StoredValue, Value) then
486
- exit(true);
487
- end;
488
-
489
- exit(false);
490
- end;
491
-
492
- procedure Remove(Key: Variant): Boolean
493
- var
494
- KeyIndex: Integer;
495
- begin
496
- KeyIndex := FindKeyIndex(Key);
497
- if KeyIndex > 0 then begin
498
- Keys.RemoveAt(KeyIndex);
499
- Values.RemoveAt(KeyIndex);
500
- exit(true);
501
- end;
502
-
503
- exit(false);
504
- end;
505
-
506
- procedure Clear()
507
- begin
508
- Keys.Clear();
509
- Values.Clear();
510
- end;
511
-
512
- procedure Count(): Integer
513
- begin
514
- exit(Keys.Count);
515
- end;
516
-
517
- procedure GetKeys(): List of [Variant]
518
- begin
519
- exit(Keys);
520
- end;
521
-
522
- procedure GetValues(): List of [Variant]
523
- begin
524
- exit(Values);
525
- end;
526
-
527
- procedure GetKeyValuePairs(): List of [Dictionary of [Text, Variant]]
528
- var
529
- Pairs: List of [Dictionary of [Text, Variant]];
530
- Pair: Dictionary of [Text, Variant];
531
- i: Integer;
532
- begin
533
- for i := 1 to Keys.Count do begin
534
- Clear(Pair);
535
- Pair.Set('Key', Keys.Get(i));
536
- Pair.Set('Value', Values.Get(i));
537
- Pairs.Add(Pair);
538
- end;
539
-
540
- exit(Pairs);
541
- end;
542
-
543
- local procedure FindKeyIndex(Key: Variant): Integer
544
- var
545
- i: Integer;
546
- StoredKey: Variant;
547
- begin
548
- for i := 1 to Keys.Count do begin
549
- StoredKey := Keys.Get(i);
550
- if AreEqual(StoredKey, Key) then
551
- exit(i);
552
- end;
553
-
554
- exit(0);
555
- end;
556
-
557
- local procedure ValidateKeyType(Key: Variant): Boolean
558
- var
559
- ActualType: Text[50];
560
- begin
561
- if KeyType = '' then
562
- exit(true);
563
-
564
- ActualType := GetVariantType(Key);
565
- exit(ActualType = KeyType);
566
- end;
567
-
568
- local procedure ValidateValueType(Value: Variant): Boolean
569
- var
570
- ActualType: Text[50];
571
- begin
572
- if ValueType = '' then
573
- exit(true);
574
-
575
- ActualType := GetVariantType(Value);
576
- exit(ActualType = ValueType);
577
- end;
578
-
579
- local procedure GetVariantType(Item: Variant): Text[50]
580
- begin
581
- case true of
582
- Item.IsText:
583
- exit('Text');
584
- Item.IsInteger:
585
- exit('Integer');
586
- Item.IsDecimal:
587
- exit('Decimal');
588
- Item.IsBoolean:
589
- exit('Boolean');
590
- Item.IsDate:
591
- exit('Date');
592
- Item.IsTime:
593
- exit('Time');
594
- Item.IsDateTime:
595
- exit('DateTime');
596
- Item.IsCode:
597
- exit('Code');
598
- else
599
- exit('Unknown');
600
- end;
601
- end;
602
-
603
- local procedure AreEqual(Item1: Variant; Item2: Variant): Boolean
604
- begin
605
- if GetVariantType(Item1) <> GetVariantType(Item2) then
606
- exit(false);
607
-
608
- exit(Format(Item1) = Format(Item2));
609
- end;
610
- }
611
- ```
612
-
613
- ## Generic Repository Pattern
614
-
615
- ```al
616
- // Generic repository interface
617
- interface IGenericRepository
618
- {
619
- procedure Create(Entity: Dictionary of [Text, Variant]): Variant;
620
- procedure Read(Id: Variant): Dictionary of [Text, Variant];
621
- procedure Update(Id: Variant; Entity: Dictionary of [Text, Variant]): Boolean;
622
- procedure Delete(Id: Variant): Boolean;
623
- procedure FindAll(): List of [Dictionary of [Text, Variant]];
624
- procedure FindWhere(Criteria: Dictionary of [Text, Variant]): List of [Dictionary of [Text, Variant]];
625
- }
626
-
627
- // Generic repository implementation for customers
628
- codeunit 50802 "Customer Repository" implements IGenericRepository
629
- {
630
- procedure Create(Entity: Dictionary of [Text, Variant]): Variant
631
- var
632
- Customer: Record Customer;
633
- CustomerNo: Code[20];
634
- Name: Text[100];
635
- Address: Text[100];
636
- begin
637
- Customer.Init();
638
- Customer."No." := '';
639
- Customer.Insert(true);
640
- CustomerNo := Customer."No.";
641
-
642
- if Entity.Get('Name', Name) then
643
- Customer.Validate(Name, Name);
644
-
645
- if Entity.Get('Address', Address) then
646
- Customer.Validate(Address, Address);
647
-
648
- Customer.Modify(true);
649
-
650
- exit(CustomerNo);
651
- end;
652
-
653
- procedure Read(Id: Variant): Dictionary of [Text, Variant]
654
- var
655
- Customer: Record Customer;
656
- CustomerData: Dictionary of [Text, Variant];
657
- CustomerNo: Code[20];
658
- begin
659
- CustomerNo := Id;
660
-
661
- if Customer.Get(CustomerNo) then begin
662
- CustomerData.Set('CustomerNo', Customer."No.");
663
- CustomerData.Set('Name', Customer.Name);
664
- CustomerData.Set('Address', Customer.Address);
665
- CustomerData.Set('City', Customer.City);
666
- CustomerData.Set('PostCode', Customer."Post Code");
667
- CustomerData.Set('PhoneNo', Customer."Phone No.");
668
- CustomerData.Set('Email', Customer."E-Mail");
669
- CustomerData.Set('CreditLimit', Customer."Credit Limit (LCY)");
670
- CustomerData.Set('Blocked', Customer.Blocked);
671
- end;
672
-
673
- exit(CustomerData);
674
- end;
675
-
676
- procedure Update(Id: Variant; Entity: Dictionary of [Text, Variant]): Boolean
677
- var
678
- Customer: Record Customer;
679
- CustomerNo: Code[20];
680
- Name: Text[100];
681
- Address: Text[100];
682
- City: Text[30];
683
- PhoneNo: Text[30];
684
- Email: Text[80];
685
- begin
686
- CustomerNo := Id;
687
-
688
- if not Customer.Get(CustomerNo) then
689
- exit(false);
690
-
691
- try
692
- if Entity.Get('Name', Name) then
693
- Customer.Validate(Name, Name);
694
-
695
- if Entity.Get('Address', Address) then
696
- Customer.Validate(Address, Address);
697
-
698
- if Entity.Get('City', City) then
699
- Customer.Validate(City, City);
700
-
701
- if Entity.Get('PhoneNo', PhoneNo) then
702
- Customer.Validate("Phone No.", PhoneNo);
703
-
704
- if Entity.Get('Email', Email) then
705
- Customer.Validate("E-Mail", Email);
706
-
707
- Customer.Modify(true);
708
- exit(true);
709
-
710
- except
711
- exit(false);
712
- end;
713
- end;
714
-
715
- procedure Delete(Id: Variant): Boolean
716
- var
717
- Customer: Record Customer;
718
- CustomerNo: Code[20];
719
- begin
720
- CustomerNo := Id;
721
-
722
- if Customer.Get(CustomerNo) then begin
723
- Customer.Delete(true);
724
- exit(true);
725
- end;
726
-
727
- exit(false);
728
- end;
729
-
730
- procedure FindAll(): List of [Dictionary of [Text, Variant]]
731
- var
732
- Customer: Record Customer;
733
- CustomerList: List of [Dictionary of [Text, Variant]];
734
- CustomerData: Dictionary of [Text, Variant];
735
- begin
736
- if Customer.FindSet() then
737
- repeat
738
- Clear(CustomerData);
739
- CustomerData.Set('CustomerNo', Customer."No.");
740
- CustomerData.Set('Name', Customer.Name);
741
- CustomerData.Set('Address', Customer.Address);
742
- CustomerData.Set('City', Customer.City);
743
- CustomerList.Add(CustomerData);
744
- until Customer.Next() = 0;
745
-
746
- exit(CustomerList);
747
- end;
748
-
749
- procedure FindWhere(Criteria: Dictionary of [Text, Variant]): List of [Dictionary of [Text, Variant]]
750
- var
751
- Customer: Record Customer;
752
- CustomerList: List of [Dictionary of [Text, Variant]];
753
- CustomerData: Dictionary of [Text, Variant];
754
- CityFilter: Text[30];
755
- BlockedFilter: Boolean;
756
- begin
757
- if Criteria.Get('City', CityFilter) then
758
- Customer.SetRange(City, CityFilter);
759
-
760
- if Criteria.Get('Blocked', BlockedFilter) then
761
- Customer.SetRange(Blocked, BlockedFilter);
762
-
763
- if Customer.FindSet() then
764
- repeat
765
- Clear(CustomerData);
766
- CustomerData.Set('CustomerNo', Customer."No.");
767
- CustomerData.Set('Name', Customer.Name);
768
- CustomerData.Set('Address', Customer.Address);
769
- CustomerData.Set('City', Customer.City);
770
- CustomerData.Set('Blocked', Customer.Blocked);
771
- CustomerList.Add(CustomerData);
772
- until Customer.Next() = 0;
773
-
774
- exit(CustomerList);
775
- end;
776
- }
777
- ```
778
-
779
- ## Usage Examples
780
-
781
- ```al
782
- // Example of using generic patterns
783
- codeunit 50803 "Generic Patterns Usage"
784
- {
785
- procedure DemonstrateGenericList()
786
- var
787
- StringList: Codeunit "Generic List Manager";
788
- NumberList: Codeunit "Generic List Manager";
789
- Items: List of [Variant];
790
- FilteredItems: List of [Variant];
791
- Item: Variant;
792
- Count: Integer;
793
- begin
794
- // String list example
795
- StringList.Initialize('Text');
796
- StringList.Add('Apple');
797
- StringList.Add('Banana');
798
- StringList.Add('Cherry');
799
-
800
- Message('String list count: %1', StringList.Count());
801
-
802
- // Filter and map operations
803
- FilteredItems := StringList.Filter('NOT_EMPTY');
804
- FilteredItems := StringList.Map('TO_UPPER');
805
-
806
- foreach Item in FilteredItems do
807
- Message('Filtered item: %1', Item);
808
-
809
- // Number list example
810
- NumberList.Initialize('Integer');
811
- NumberList.Add(10);
812
- NumberList.Add(5);
813
- NumberList.Add(15);
814
- NumberList.Add(3);
815
-
816
- NumberList.Sort();
817
- Items := NumberList.ToArray();
818
-
819
- foreach Item in Items do
820
- Message('Sorted number: %1', Item);
821
- end;
822
-
823
- procedure DemonstrateGenericDictionary()
824
- var
825
- CustomerIndex: Codeunit "Generic Dictionary Manager";
826
- CustomerName: Variant;
827
- CustomerKeys: List of [Variant];
828
- Key: Variant;
829
- begin
830
- // Initialize dictionary with type constraints
831
- CustomerIndex.Initialize('Code', 'Text');
832
-
833
- // Add customer mappings
834
- CustomerIndex.Set('CUST001', 'Acme Corporation');
835
- CustomerIndex.Set('CUST002', 'Beta Industries');
836
- CustomerIndex.Set('CUST003', 'Gamma Solutions');
837
-
838
- // Retrieve values
839
- if CustomerIndex.Get('CUST001', CustomerName) then
840
- Message('Customer CUST001 is: %1', CustomerName);
841
-
842
- // Iterate through all keys
843
- CustomerKeys := CustomerIndex.GetKeys();
844
- foreach Key in CustomerKeys do begin
845
- CustomerName := CustomerIndex.TryGet(Key);
846
- Message('Customer %1: %2', Key, CustomerName);
847
- end;
848
-
849
- Message('Dictionary contains %1 customers', CustomerIndex.Count());
850
- end;
851
-
852
- procedure DemonstrateGenericRepository()
853
- var
854
- CustomerRepo: Codeunit "Customer Repository";
855
- CustomerData: Dictionary of [Text, Variant];
856
- AllCustomers: List of [Dictionary of [Text, Variant]];
857
- FilterCriteria: Dictionary of [Text, Variant];
858
- NewCustomerId: Variant;
859
- Customer: Dictionary of [Text, Variant];
860
- begin
861
- // Create new customer
862
- CustomerData.Set('Name', 'Generic Customer Ltd.');
863
- CustomerData.Set('Address', '123 Generic Street');
864
- CustomerData.Set('City', 'Generic City');
865
-
866
- NewCustomerId := CustomerRepo.Create(CustomerData);
867
- Message('Created customer with ID: %1', NewCustomerId);
868
-
869
- // Read customer back
870
- Customer := CustomerRepo.Read(NewCustomerId);
871
- Message('Retrieved customer: %1', Customer.Get('Name'));
872
-
873
- // Update customer
874
- Clear(CustomerData);
875
- CustomerData.Set('Address', '456 Updated Avenue');
876
- CustomerData.Set('PhoneNo', '555-0123');
877
-
878
- if CustomerRepo.Update(NewCustomerId, CustomerData) then
879
- Message('Customer updated successfully');
880
-
881
- // Find customers by criteria
882
- FilterCriteria.Set('City', 'Generic City');
883
- AllCustomers := CustomerRepo.FindWhere(FilterCriteria);
884
- Message('Found %1 customers in Generic City', AllCustomers.Count);
885
- end;
886
- }
887
- ```
888
-
889
- This comprehensive implementation demonstrates generic programming patterns in AL, providing type-safe, reusable operations for collections, dictionaries, and repositories while maintaining AL's strong typing benefits.