bc-code-intelligence-mcp 1.3.3 → 1.3.5

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 (552) 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/enhanced-prompt-service.d.ts +1 -12
  18. package/dist/services/enhanced-prompt-service.d.ts.map +1 -1
  19. package/dist/services/enhanced-prompt-service.js +27 -38
  20. package/dist/services/enhanced-prompt-service.js.map +1 -1
  21. package/dist/services/knowledge-service.d.ts +21 -10
  22. package/dist/services/knowledge-service.d.ts.map +1 -1
  23. package/dist/services/knowledge-service.js +71 -54
  24. package/dist/services/knowledge-service.js.map +1 -1
  25. package/dist/services/multi-content-layer-service.d.ts +90 -0
  26. package/dist/services/multi-content-layer-service.d.ts.map +1 -1
  27. package/dist/services/multi-content-layer-service.js +380 -0
  28. package/dist/services/multi-content-layer-service.js.map +1 -1
  29. package/dist/services/workflow-service.d.ts +11 -3
  30. package/dist/services/workflow-service.d.ts.map +1 -1
  31. package/dist/services/workflow-service.js +119 -78
  32. package/dist/services/workflow-service.js.map +1 -1
  33. package/dist/streamlined-handlers.d.ts +31 -2
  34. package/dist/streamlined-handlers.d.ts.map +1 -1
  35. package/dist/streamlined-handlers.js +151 -109
  36. package/dist/streamlined-handlers.js.map +1 -1
  37. package/dist/streamlined-tools.d.ts +12 -0
  38. package/dist/streamlined-tools.d.ts.map +1 -1
  39. package/dist/streamlined-tools.js +11 -6
  40. package/dist/streamlined-tools.js.map +1 -1
  41. package/package.json +13 -4
  42. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +0 -24
  43. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +0 -24
  44. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +0 -30
  45. package/embedded-knowledge/AGENTS.md +0 -178
  46. package/embedded-knowledge/CONTRIBUTING.md +0 -58
  47. package/embedded-knowledge/LICENSE +0 -21
  48. package/embedded-knowledge/README.md +0 -32
  49. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +0 -90
  50. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +0 -113
  51. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +0 -101
  52. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +0 -87
  53. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +0 -155
  54. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +0 -138
  55. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +0 -79
  56. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +0 -280
  57. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +0 -200
  58. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +0 -565
  59. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +0 -665
  60. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +0 -325
  61. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +0 -696
  62. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +0 -320
  63. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +0 -102
  64. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +0 -433
  65. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +0 -66
  66. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +0 -115
  67. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +0 -360
  68. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +0 -86
  69. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +0 -96
  70. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +0 -70
  71. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +0 -84
  72. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +0 -93
  73. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +0 -73
  74. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +0 -78
  75. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +0 -79
  76. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +0 -87
  77. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +0 -209
  78. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +0 -246
  79. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +0 -107
  80. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +0 -105
  81. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +0 -186
  82. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +0 -60
  83. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +0 -139
  84. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +0 -190
  85. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +0 -516
  86. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +0 -298
  87. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +0 -324
  88. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +0 -344
  89. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +0 -137
  90. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +0 -340
  91. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +0 -810
  92. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +0 -86
  93. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +0 -110
  94. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +0 -758
  95. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +0 -665
  96. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +0 -316
  97. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +0 -223
  98. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +0 -149
  99. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +0 -412
  100. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +0 -211
  101. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +0 -155
  102. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +0 -475
  103. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +0 -238
  104. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +0 -97
  105. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +0 -666
  106. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +0 -319
  107. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +0 -236
  108. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +0 -59
  109. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +0 -67
  110. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +0 -70
  111. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +0 -90
  112. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +0 -87
  113. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +0 -70
  114. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +0 -74
  115. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +0 -81
  116. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +0 -56
  117. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +0 -66
  118. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +0 -79
  119. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +0 -78
  120. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +0 -83
  121. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +0 -76
  122. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +0 -104
  123. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +0 -145
  124. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +0 -104
  125. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +0 -114
  126. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +0 -356
  127. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +0 -256
  128. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +0 -101
  129. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +0 -108
  130. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +0 -80
  131. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +0 -98
  132. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +0 -123
  133. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +0 -96
  134. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +0 -115
  135. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +0 -115
  136. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +0 -114
  137. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +0 -395
  138. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +0 -479
  139. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +0 -548
  140. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +0 -287
  141. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +0 -434
  142. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +0 -508
  143. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +0 -615
  144. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +0 -144
  145. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +0 -96
  146. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +0 -124
  147. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +0 -84
  148. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +0 -75
  149. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +0 -96
  150. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +0 -385
  151. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +0 -72
  152. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +0 -48
  153. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +0 -49
  154. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +0 -67
  155. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +0 -119
  156. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +0 -123
  157. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +0 -64
  158. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +0 -60
  159. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +0 -83
  160. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +0 -716
  161. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +0 -101
  162. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +0 -91
  163. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +0 -79
  164. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +0 -79
  165. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +0 -89
  166. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +0 -76
  167. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +0 -76
  168. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +0 -76
  169. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +0 -81
  170. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +0 -76
  171. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +0 -75
  172. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +0 -76
  173. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +0 -76
  174. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +0 -76
  175. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +0 -96
  176. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +0 -76
  177. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +0 -86
  178. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +0 -90
  179. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +0 -82
  180. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +0 -78
  181. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +0 -76
  182. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +0 -78
  183. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +0 -100
  184. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +0 -115
  185. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +0 -124
  186. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +0 -110
  187. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +0 -438
  188. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +0 -255
  189. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +0 -209
  190. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +0 -218
  191. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +0 -218
  192. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +0 -280
  193. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +0 -188
  194. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +0 -245
  195. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +0 -244
  196. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +0 -278
  197. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +0 -484
  198. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +0 -64
  199. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +0 -107
  200. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +0 -280
  201. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +0 -75
  202. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +0 -67
  203. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +0 -76
  204. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +0 -98
  205. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +0 -128
  206. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +0 -75
  207. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +0 -95
  208. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +0 -141
  209. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +0 -91
  210. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +0 -118
  211. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +0 -111
  212. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +0 -113
  213. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +0 -127
  214. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +0 -141
  215. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +0 -66
  216. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +0 -96
  217. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +0 -161
  218. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +0 -177
  219. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +0 -239
  220. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +0 -346
  221. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +0 -298
  222. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +0 -677
  223. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +0 -117
  224. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +0 -75
  225. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +0 -169
  226. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +0 -399
  227. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +0 -356
  228. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +0 -889
  229. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +0 -84
  230. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +0 -127
  231. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +0 -89
  232. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +0 -516
  233. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +0 -61
  234. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +0 -427
  235. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +0 -122
  236. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +0 -96
  237. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +0 -101
  238. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +0 -149
  239. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +0 -107
  240. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +0 -95
  241. package/embedded-knowledge/domains/seth-security/api-permission-model.md +0 -115
  242. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +0 -78
  243. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +0 -373
  244. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +0 -308
  245. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +0 -146
  246. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +0 -79
  247. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +0 -78
  248. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +0 -81
  249. package/embedded-knowledge/indexes/bc-version-matrix.json +0 -188
  250. package/embedded-knowledge/indexes/domain-catalog.json +0 -106
  251. package/embedded-knowledge/indexes/tags/abbreviations.json +0 -1
  252. package/embedded-knowledge/indexes/tags/abstraction.json +0 -1
  253. package/embedded-knowledge/indexes/tags/access-control.json +0 -1
  254. package/embedded-knowledge/indexes/tags/accessibility.json +0 -1
  255. package/embedded-knowledge/indexes/tags/actions.json +0 -1
  256. package/embedded-knowledge/indexes/tags/advanced-patterns.json +0 -1
  257. package/embedded-knowledge/indexes/tags/advanced.json +0 -1
  258. package/embedded-knowledge/indexes/tags/al-extension.json +0 -1
  259. package/embedded-knowledge/indexes/tags/al-generics.json +0 -1
  260. package/embedded-knowledge/indexes/tags/al-objects.json +0 -1
  261. package/embedded-knowledge/indexes/tags/al-syntax.json +0 -1
  262. package/embedded-knowledge/indexes/tags/algorithm-structure.json +0 -1
  263. package/embedded-knowledge/indexes/tags/alternatives.json +0 -1
  264. package/embedded-knowledge/indexes/tags/analytics.json +0 -1
  265. package/embedded-knowledge/indexes/tags/api-delegates.json +0 -1
  266. package/embedded-knowledge/indexes/tags/api-design.json +0 -1
  267. package/embedded-knowledge/indexes/tags/api-documentation.json +0 -1
  268. package/embedded-knowledge/indexes/tags/api-endpoints.json +0 -1
  269. package/embedded-knowledge/indexes/tags/api-extensibility.json +0 -1
  270. package/embedded-knowledge/indexes/tags/api-fieldsets.json +0 -1
  271. package/embedded-knowledge/indexes/tags/api-integration.json +0 -1
  272. package/embedded-knowledge/indexes/tags/api-interfaces.json +0 -1
  273. package/embedded-knowledge/indexes/tags/api-optimization.json +0 -1
  274. package/embedded-knowledge/indexes/tags/api-pages.json +0 -1
  275. package/embedded-knowledge/indexes/tags/api-patterns.json +0 -1
  276. package/embedded-knowledge/indexes/tags/api-permissions.json +0 -1
  277. package/embedded-knowledge/indexes/tags/api-responses.json +0 -1
  278. package/embedded-knowledge/indexes/tags/api-simplification.json +0 -1
  279. package/embedded-knowledge/indexes/tags/api.json +0 -1
  280. package/embedded-knowledge/indexes/tags/architecture.json +0 -1
  281. package/embedded-knowledge/indexes/tags/async-patterns.json +0 -1
  282. package/embedded-knowledge/indexes/tags/async-processing.json +0 -1
  283. package/embedded-knowledge/indexes/tags/automatic-registration.json +0 -1
  284. package/embedded-knowledge/indexes/tags/batch-operations.json +0 -1
  285. package/embedded-knowledge/indexes/tags/bc24-migration.json +0 -1
  286. package/embedded-knowledge/indexes/tags/begin-blocks.json +0 -1
  287. package/embedded-knowledge/indexes/tags/begin-end.json +0 -1
  288. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +0 -1
  289. package/embedded-knowledge/indexes/tags/best-practices.json +0 -1
  290. package/embedded-knowledge/indexes/tags/binding.json +0 -1
  291. package/embedded-knowledge/indexes/tags/block-structure.json +0 -1
  292. package/embedded-knowledge/indexes/tags/blocks.json +0 -1
  293. package/embedded-knowledge/indexes/tags/boolean-expressions.json +0 -1
  294. package/embedded-knowledge/indexes/tags/branching.json +0 -1
  295. package/embedded-knowledge/indexes/tags/breaking-changes.json +0 -1
  296. package/embedded-knowledge/indexes/tags/breakpoints.json +0 -1
  297. package/embedded-knowledge/indexes/tags/business-foundation.json +0 -1
  298. package/embedded-knowledge/indexes/tags/business-infrastructure.json +0 -1
  299. package/embedded-knowledge/indexes/tags/business-process.json +0 -1
  300. package/embedded-knowledge/indexes/tags/business-rules.json +0 -1
  301. package/embedded-knowledge/indexes/tags/caching.json +0 -1
  302. package/embedded-knowledge/indexes/tags/case-statements.json +0 -1
  303. package/embedded-knowledge/indexes/tags/case.json +0 -1
  304. package/embedded-knowledge/indexes/tags/code-analysis.json +0 -1
  305. package/embedded-knowledge/indexes/tags/code-clarity.json +0 -1
  306. package/embedded-knowledge/indexes/tags/code-comprehension.json +0 -1
  307. package/embedded-knowledge/indexes/tags/code-conversion.json +0 -1
  308. package/embedded-knowledge/indexes/tags/code-formatting.json +0 -1
  309. package/embedded-knowledge/indexes/tags/code-organization.json +0 -1
  310. package/embedded-knowledge/indexes/tags/code-patterns.json +0 -1
  311. package/embedded-knowledge/indexes/tags/code-quality.json +0 -1
  312. package/embedded-knowledge/indexes/tags/code-reuse.json +0 -1
  313. package/embedded-knowledge/indexes/tags/code-simplification.json +0 -1
  314. package/embedded-knowledge/indexes/tags/code-standards.json +0 -1
  315. package/embedded-knowledge/indexes/tags/code-structure.json +0 -1
  316. package/embedded-knowledge/indexes/tags/code-style.json +0 -1
  317. package/embedded-knowledge/indexes/tags/codeunit-design.json +0 -1
  318. package/embedded-knowledge/indexes/tags/command-queue.json +0 -1
  319. package/embedded-knowledge/indexes/tags/comments.json +0 -1
  320. package/embedded-knowledge/indexes/tags/compile-time-validation.json +0 -1
  321. package/embedded-knowledge/indexes/tags/complex-facade.json +0 -1
  322. package/embedded-knowledge/indexes/tags/complexity-hiding.json +0 -1
  323. package/embedded-knowledge/indexes/tags/complexity-management.json +0 -1
  324. package/embedded-knowledge/indexes/tags/compound-statements.json +0 -1
  325. package/embedded-knowledge/indexes/tags/concurrency.json +0 -1
  326. package/embedded-knowledge/indexes/tags/conditional-logic.json +0 -1
  327. package/embedded-knowledge/indexes/tags/conditional.json +0 -1
  328. package/embedded-knowledge/indexes/tags/conflict-resolution.json +0 -1
  329. package/embedded-knowledge/indexes/tags/consistency.json +0 -1
  330. package/embedded-knowledge/indexes/tags/contract-design.json +0 -1
  331. package/embedded-knowledge/indexes/tags/control-flow.json +0 -1
  332. package/embedded-knowledge/indexes/tags/conversion-guide.json +0 -1
  333. package/embedded-knowledge/indexes/tags/correlation.json +0 -1
  334. package/embedded-knowledge/indexes/tags/custom-messages.json +0 -1
  335. package/embedded-knowledge/indexes/tags/data-access.json +0 -1
  336. package/embedded-knowledge/indexes/tags/data-exposure.json +0 -1
  337. package/embedded-knowledge/indexes/tags/data-integrity.json +0 -1
  338. package/embedded-knowledge/indexes/tags/data-loading.json +0 -1
  339. package/embedded-knowledge/indexes/tags/data-manipulation.json +0 -1
  340. package/embedded-knowledge/indexes/tags/data-modeling.json +0 -1
  341. package/embedded-knowledge/indexes/tags/data-patterns.json +0 -1
  342. package/embedded-knowledge/indexes/tags/data-protection.json +0 -1
  343. package/embedded-knowledge/indexes/tags/data-validation.json +0 -1
  344. package/embedded-knowledge/indexes/tags/database.json +0 -1
  345. package/embedded-knowledge/indexes/tags/debugging.json +0 -1
  346. package/embedded-knowledge/indexes/tags/decision-making.json +0 -1
  347. package/embedded-knowledge/indexes/tags/declaration.json +0 -1
  348. package/embedded-knowledge/indexes/tags/default-messages.json +0 -1
  349. package/embedded-knowledge/indexes/tags/defensive-programming.json +0 -1
  350. package/embedded-knowledge/indexes/tags/deleteall.json +0 -1
  351. package/embedded-knowledge/indexes/tags/dependencies.json +0 -1
  352. package/embedded-knowledge/indexes/tags/deployment.json +0 -1
  353. package/embedded-knowledge/indexes/tags/developer-productivity.json +0 -1
  354. package/embedded-knowledge/indexes/tags/development-workflow.json +0 -1
  355. package/embedded-knowledge/indexes/tags/diagnostics.json +0 -1
  356. package/embedded-knowledge/indexes/tags/dimensions.json +0 -1
  357. package/embedded-knowledge/indexes/tags/documentation.json +0 -1
  358. package/embedded-knowledge/indexes/tags/early-exit.json +0 -1
  359. package/embedded-knowledge/indexes/tags/else-clauses.json +0 -1
  360. package/embedded-knowledge/indexes/tags/end-statements.json +0 -1
  361. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +0 -1
  362. package/embedded-knowledge/indexes/tags/entity-relationships.json +0 -1
  363. package/embedded-knowledge/indexes/tags/error-handling.json +0 -1
  364. package/embedded-knowledge/indexes/tags/error-messages.json +0 -1
  365. package/embedded-knowledge/indexes/tags/error-prevention.json +0 -1
  366. package/embedded-knowledge/indexes/tags/error-text.json +0 -1
  367. package/embedded-knowledge/indexes/tags/etag.json +0 -1
  368. package/embedded-knowledge/indexes/tags/event-bridge.json +0 -1
  369. package/embedded-knowledge/indexes/tags/event-payload.json +0 -1
  370. package/embedded-knowledge/indexes/tags/event-routing.json +0 -1
  371. package/embedded-knowledge/indexes/tags/events.json +0 -1
  372. package/embedded-knowledge/indexes/tags/execution-flow.json +0 -1
  373. package/embedded-knowledge/indexes/tags/expressions.json +0 -1
  374. package/embedded-knowledge/indexes/tags/extensibility.json +0 -1
  375. package/embedded-knowledge/indexes/tags/extensions.json +0 -1
  376. package/embedded-knowledge/indexes/tags/facade-composition.json +0 -1
  377. package/embedded-knowledge/indexes/tags/facade-pattern.json +0 -1
  378. package/embedded-knowledge/indexes/tags/field-control.json +0 -1
  379. package/embedded-knowledge/indexes/tags/field-exclusion.json +0 -1
  380. package/embedded-knowledge/indexes/tags/field-registration.json +0 -1
  381. package/embedded-knowledge/indexes/tags/field-state.json +0 -1
  382. package/embedded-knowledge/indexes/tags/field-validation.json +0 -1
  383. package/embedded-knowledge/indexes/tags/fielderror.json +0 -1
  384. package/embedded-knowledge/indexes/tags/fields.json +0 -1
  385. package/embedded-knowledge/indexes/tags/filtering.json +0 -1
  386. package/embedded-knowledge/indexes/tags/filters.json +0 -1
  387. package/embedded-knowledge/indexes/tags/formatting.json +0 -1
  388. package/embedded-knowledge/indexes/tags/generic-methods.json +0 -1
  389. package/embedded-knowledge/indexes/tags/http-status.json +0 -1
  390. package/embedded-knowledge/indexes/tags/if-statements.json +0 -1
  391. package/embedded-knowledge/indexes/tags/implementation.json +0 -1
  392. package/embedded-knowledge/indexes/tags/indentation.json +0 -1
  393. package/embedded-knowledge/indexes/tags/index-summary.json +0 -277
  394. package/embedded-knowledge/indexes/tags/indexing.json +0 -1
  395. package/embedded-knowledge/indexes/tags/inheritance.json +0 -1
  396. package/embedded-knowledge/indexes/tags/integration.json +0 -1
  397. package/embedded-knowledge/indexes/tags/integrity-checking.json +0 -1
  398. package/embedded-knowledge/indexes/tags/intellisense.json +0 -1
  399. package/embedded-knowledge/indexes/tags/interface-design.json +0 -1
  400. package/embedded-knowledge/indexes/tags/interface-segregation.json +0 -1
  401. package/embedded-knowledge/indexes/tags/isolation.json +0 -1
  402. package/embedded-knowledge/indexes/tags/job-processing.json +0 -1
  403. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +0 -1
  404. package/embedded-knowledge/indexes/tags/keywords.json +0 -1
  405. package/embedded-knowledge/indexes/tags/legacy-modernization.json +0 -1
  406. package/embedded-knowledge/indexes/tags/line-breaks.json +0 -1
  407. package/embedded-knowledge/indexes/tags/line-organization.json +0 -1
  408. package/embedded-knowledge/indexes/tags/line-positioning.json +0 -1
  409. package/embedded-knowledge/indexes/tags/localization.json +0 -1
  410. package/embedded-knowledge/indexes/tags/logging.json +0 -1
  411. package/embedded-knowledge/indexes/tags/loose-coupling.json +0 -1
  412. package/embedded-knowledge/indexes/tags/maintainability.json +0 -1
  413. package/embedded-knowledge/indexes/tags/memory-management.json +0 -1
  414. package/embedded-knowledge/indexes/tags/memory-optimization.json +0 -1
  415. package/embedded-knowledge/indexes/tags/memory.json +0 -1
  416. package/embedded-knowledge/indexes/tags/message-design.json +0 -1
  417. package/embedded-knowledge/indexes/tags/message-formatting.json +0 -1
  418. package/embedded-knowledge/indexes/tags/message-patterns.json +0 -1
  419. package/embedded-knowledge/indexes/tags/metadata-driven.json +0 -1
  420. package/embedded-knowledge/indexes/tags/method-comparison.json +0 -1
  421. package/embedded-knowledge/indexes/tags/module-architecture.json +0 -1
  422. package/embedded-knowledge/indexes/tags/module-validation.json +0 -1
  423. package/embedded-knowledge/indexes/tags/monitoring.json +0 -1
  424. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +0 -1
  425. package/embedded-knowledge/indexes/tags/multi-tenancy.json +0 -1
  426. package/embedded-knowledge/indexes/tags/multiple-values.json +0 -1
  427. package/embedded-knowledge/indexes/tags/naming-conventions.json +0 -1
  428. package/embedded-knowledge/indexes/tags/naming.json +0 -1
  429. package/embedded-knowledge/indexes/tags/navigation.json +0 -1
  430. package/embedded-knowledge/indexes/tags/nested-statements.json +0 -1
  431. package/embedded-knowledge/indexes/tags/no-series-conversion.json +0 -1
  432. package/embedded-knowledge/indexes/tags/no-series-validation.json +0 -1
  433. package/embedded-knowledge/indexes/tags/no-series.json +0 -1
  434. package/embedded-knowledge/indexes/tags/number-generation.json +0 -1
  435. package/embedded-knowledge/indexes/tags/object-documentation.json +0 -1
  436. package/embedded-knowledge/indexes/tags/odata.json +0 -1
  437. package/embedded-knowledge/indexes/tags/ondelete.json +0 -1
  438. package/embedded-knowledge/indexes/tags/onvalidate.json +0 -1
  439. package/embedded-knowledge/indexes/tags/operation-delegation.json +0 -1
  440. package/embedded-knowledge/indexes/tags/operation-safety.json +0 -1
  441. package/embedded-knowledge/indexes/tags/operators.json +0 -1
  442. package/embedded-knowledge/indexes/tags/optimization.json +0 -1
  443. package/embedded-knowledge/indexes/tags/order.json +0 -1
  444. package/embedded-knowledge/indexes/tags/organization.json +0 -1
  445. package/embedded-knowledge/indexes/tags/pages.json +0 -1
  446. package/embedded-knowledge/indexes/tags/parameters.json +0 -1
  447. package/embedded-knowledge/indexes/tags/patterns.json +0 -1
  448. package/embedded-knowledge/indexes/tags/performance-optimization.json +0 -1
  449. package/embedded-knowledge/indexes/tags/performance.json +0 -1
  450. package/embedded-knowledge/indexes/tags/placement.json +0 -1
  451. package/embedded-knowledge/indexes/tags/posting-codeunits.json +0 -1
  452. package/embedded-knowledge/indexes/tags/posting.json +0 -1
  453. package/embedded-knowledge/indexes/tags/preconditions.json +0 -1
  454. package/embedded-knowledge/indexes/tags/primary-key.json +0 -1
  455. package/embedded-knowledge/indexes/tags/privacy.json +0 -1
  456. package/embedded-knowledge/indexes/tags/process-automation.json +0 -1
  457. package/embedded-knowledge/indexes/tags/production.json +0 -1
  458. package/embedded-knowledge/indexes/tags/productivity.json +0 -1
  459. package/embedded-knowledge/indexes/tags/query-performance.json +0 -1
  460. package/embedded-knowledge/indexes/tags/queue-management.json +0 -1
  461. package/embedded-knowledge/indexes/tags/ranges.json +0 -1
  462. package/embedded-knowledge/indexes/tags/readability.json +0 -1
  463. package/embedded-knowledge/indexes/tags/record-access.json +0 -1
  464. package/embedded-knowledge/indexes/tags/record-methods.json +0 -1
  465. package/embedded-knowledge/indexes/tags/refactoring.json +0 -1
  466. package/embedded-knowledge/indexes/tags/reference.json +0 -1
  467. package/embedded-knowledge/indexes/tags/repeat-loops.json +0 -1
  468. package/embedded-knowledge/indexes/tags/repeat-statement.json +0 -1
  469. package/embedded-knowledge/indexes/tags/runtime-errors.json +0 -1
  470. package/embedded-knowledge/indexes/tags/runtime.json +0 -1
  471. package/embedded-knowledge/indexes/tags/safeguards.json +0 -1
  472. package/embedded-knowledge/indexes/tags/security.json +0 -1
  473. package/embedded-knowledge/indexes/tags/sequence-management.json +0 -1
  474. package/embedded-knowledge/indexes/tags/serialization.json +0 -1
  475. package/embedded-knowledge/indexes/tags/session-logmessage.json +0 -1
  476. package/embedded-knowledge/indexes/tags/session.json +0 -1
  477. package/embedded-knowledge/indexes/tags/setloadfields.json +0 -1
  478. package/embedded-knowledge/indexes/tags/shortcuts.json +0 -1
  479. package/embedded-knowledge/indexes/tags/sift.json +0 -1
  480. package/embedded-knowledge/indexes/tags/singleinstance.json +0 -1
  481. package/embedded-knowledge/indexes/tags/spacing.json +0 -1
  482. package/embedded-knowledge/indexes/tags/sql-translation.json +0 -1
  483. package/embedded-knowledge/indexes/tags/standards.json +0 -1
  484. package/embedded-knowledge/indexes/tags/statements.json +0 -1
  485. package/embedded-knowledge/indexes/tags/streaming.json +0 -1
  486. package/embedded-knowledge/indexes/tags/strong-typing.json +0 -1
  487. package/embedded-knowledge/indexes/tags/structural-patterns.json +0 -1
  488. package/embedded-knowledge/indexes/tags/structure.json +0 -1
  489. package/embedded-knowledge/indexes/tags/subscribers.json +0 -1
  490. package/embedded-knowledge/indexes/tags/switch.json +0 -1
  491. package/embedded-knowledge/indexes/tags/symbol-search.json +0 -1
  492. package/embedded-knowledge/indexes/tags/syntax.json +0 -1
  493. package/embedded-knowledge/indexes/tags/systemid.json +0 -1
  494. package/embedded-knowledge/indexes/tags/table-configuration.json +0 -1
  495. package/embedded-knowledge/indexes/tags/table-events.json +0 -1
  496. package/embedded-knowledge/indexes/tags/table-keys.json +0 -1
  497. package/embedded-knowledge/indexes/tags/table-safety.json +0 -1
  498. package/embedded-knowledge/indexes/tags/task-scheduler.json +0 -1
  499. package/embedded-knowledge/indexes/tags/telemetry.json +0 -1
  500. package/embedded-knowledge/indexes/tags/template-method.json +0 -1
  501. package/embedded-knowledge/indexes/tags/temporary-tables.json +0 -1
  502. package/embedded-knowledge/indexes/tags/testfield.json +0 -1
  503. package/embedded-knowledge/indexes/tags/tradeoffs.json +0 -1
  504. package/embedded-knowledge/indexes/tags/triggers.json +0 -1
  505. package/embedded-knowledge/indexes/tags/troubleshooting.json +0 -1
  506. package/embedded-knowledge/indexes/tags/type-safety.json +0 -1
  507. package/embedded-knowledge/indexes/tags/url-structure.json +0 -1
  508. package/embedded-knowledge/indexes/tags/user-experience.json +0 -1
  509. package/embedded-knowledge/indexes/tags/user-feedback.json +0 -1
  510. package/embedded-knowledge/indexes/tags/user-interface.json +0 -1
  511. package/embedded-knowledge/indexes/tags/validation-feedback.json +0 -1
  512. package/embedded-knowledge/indexes/tags/validation.json +0 -1
  513. package/embedded-knowledge/indexes/tags/variables.json +0 -1
  514. package/embedded-knowledge/indexes/tags/verbosity.json +0 -1
  515. package/embedded-knowledge/indexes/tags/vs-code.json +0 -1
  516. package/embedded-knowledge/indexes/tags/web-services.json +0 -1
  517. package/embedded-knowledge/indexes/tags/workflow-management.json +0 -1
  518. package/embedded-knowledge/indexes/tags/workflow-optimization.json +0 -1
  519. package/embedded-knowledge/indexes/tags/workflow-templates.json +0 -1
  520. package/embedded-knowledge/indexes/tags/workspace.json +0 -1
  521. package/embedded-knowledge/indexes/tags/xml-documentation.json +0 -1
  522. package/embedded-knowledge/indexes/topic-relationships.json +0 -128
  523. package/embedded-knowledge/methodologies/index.json +0 -81
  524. package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
  525. package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
  526. package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
  527. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
  528. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
  529. package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
  530. package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
  531. package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
  532. package/embedded-knowledge/methodologies/phases/performance.md +0 -211
  533. package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
  534. package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
  535. package/embedded-knowledge/methodologies/phases/verification.md +0 -146
  536. package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
  537. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
  538. package/embedded-knowledge/specialists/alex-architect.md +0 -216
  539. package/embedded-knowledge/specialists/casey-copilot.md +0 -226
  540. package/embedded-knowledge/specialists/chris-config.md +0 -267
  541. package/embedded-knowledge/specialists/dean-debug.md +0 -222
  542. package/embedded-knowledge/specialists/eva-errors.md +0 -235
  543. package/embedded-knowledge/specialists/jordan-bridge.md +0 -235
  544. package/embedded-knowledge/specialists/logan-legacy.md +0 -209
  545. package/embedded-knowledge/specialists/maya-mentor.md +0 -211
  546. package/embedded-knowledge/specialists/morgan-market.md +0 -226
  547. package/embedded-knowledge/specialists/quinn-tester.md +0 -235
  548. package/embedded-knowledge/specialists/roger-reviewer.md +0 -234
  549. package/embedded-knowledge/specialists/sam-coder.md +0 -359
  550. package/embedded-knowledge/specialists/seth-security.md +0 -235
  551. package/embedded-knowledge/specialists/taylor-docs.md +0 -257
  552. 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.