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,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.