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,758 +0,0 @@
1
- # No Series Validation Patterns - AL Code Examples
2
-
3
- This sample demonstrates implementing comprehensive validation patterns for number sequence integrity in Business Central.
4
-
5
- ## Basic Validation Framework
6
-
7
- ```al
8
- // Core validation interface for no series
9
- interface INoSeriesValidator
10
- {
11
- procedure ValidateFormat(SeriesCode: Code[20]; NumberValue: Code[20]): Boolean;
12
- procedure ValidateSequence(SeriesCode: Code[20]): Boolean;
13
- procedure ValidateIntegrity(SeriesCode: Code[20]): Boolean;
14
- procedure GetValidationErrors(): List of [Text];
15
- }
16
- ```
17
-
18
- ## Comprehensive No Series Validator
19
-
20
- ```al
21
- // Main validation implementation
22
- codeunit 50900 "No Series Validator" implements INoSeriesValidator
23
- {
24
- var
25
- ValidationErrors: List of [Text];
26
- ValidationWarnings: List of [Text];
27
-
28
- procedure ValidateFormat(SeriesCode: Code[20]; NumberValue: Code[20]): Boolean
29
- var
30
- NoSeriesLine: Record "No. Series Line";
31
- FormatValid: Boolean;
32
- begin
33
- Clear(ValidationErrors);
34
- FormatValid := true;
35
-
36
- if not FindNoSeriesLine(SeriesCode, NoSeriesLine) then begin
37
- AddValidationError(StrSubstNo('No. Series line not found for series %1', SeriesCode));
38
- exit(false);
39
- end;
40
-
41
- // Validate number format
42
- if not ValidateNumberFormat(NumberValue, NoSeriesLine) then
43
- FormatValid := false;
44
-
45
- // Validate number range
46
- if not ValidateNumberRange(NumberValue, NoSeriesLine) then
47
- FormatValid := false;
48
-
49
- // Validate increment pattern
50
- if not ValidateIncrementPattern(NumberValue, NoSeriesLine) then
51
- FormatValid := false;
52
-
53
- exit(FormatValid);
54
- end;
55
-
56
- procedure ValidateSequence(SeriesCode: Code[20]): Boolean
57
- var
58
- NoSeriesLine: Record "No. Series Line";
59
- NoSeriesLog: Record "No. Series Log";
60
- SequenceValid: Boolean;
61
- GapCount: Integer;
62
- DuplicateCount: Integer;
63
- begin
64
- Clear(ValidationErrors);
65
- Clear(ValidationWarnings);
66
- SequenceValid := true;
67
-
68
- if not FindNoSeriesLine(SeriesCode, NoSeriesLine) then begin
69
- AddValidationError(StrSubstNo('No. Series line not found for series %1', SeriesCode));
70
- exit(false);
71
- end;
72
-
73
- // Check for gaps in sequence
74
- GapCount := CheckForGaps(SeriesCode, NoSeriesLine);
75
- if GapCount > 0 then begin
76
- AddValidationWarning(StrSubstNo('%1 gaps found in sequence %2', GapCount, SeriesCode));
77
- end;
78
-
79
- // Check for duplicates
80
- DuplicateCount := CheckForDuplicates(SeriesCode);
81
- if DuplicateCount > 0 then begin
82
- AddValidationError(StrSubstNo('%1 duplicate numbers found in sequence %2', DuplicateCount, SeriesCode));
83
- SequenceValid := false;
84
- end;
85
-
86
- // Validate last used number
87
- if not ValidateLastUsedNumber(NoSeriesLine) then
88
- SequenceValid := false;
89
-
90
- // Check sequence boundaries
91
- if not ValidateSequenceBoundaries(NoSeriesLine) then
92
- SequenceValid := false;
93
-
94
- exit(SequenceValid);
95
- end;
96
-
97
- procedure ValidateIntegrity(SeriesCode: Code[20]): Boolean
98
- var
99
- IntegrityValid: Boolean;
100
- begin
101
- Clear(ValidationErrors);
102
- IntegrityValid := true;
103
-
104
- // Validate cross-table references
105
- if not ValidateCrossTableReferences(SeriesCode) then
106
- IntegrityValid := false;
107
-
108
- // Validate concurrency conflicts
109
- if not ValidateConcurrencyIntegrity(SeriesCode) then
110
- IntegrityValid := false;
111
-
112
- // Validate business rule compliance
113
- if not ValidateBusinessRules(SeriesCode) then
114
- IntegrityValid := false;
115
-
116
- // Validate system consistency
117
- if not ValidateSystemConsistency(SeriesCode) then
118
- IntegrityValid := false;
119
-
120
- exit(IntegrityValid);
121
- end;
122
-
123
- procedure GetValidationErrors(): List of [Text]
124
- begin
125
- exit(ValidationErrors);
126
- end;
127
-
128
- procedure GetValidationWarnings(): List of [Text]
129
- begin
130
- exit(ValidationWarnings);
131
- end;
132
-
133
- local procedure FindNoSeriesLine(SeriesCode: Code[20]; var NoSeriesLine: Record "No. Series Line"): Boolean
134
- begin
135
- NoSeriesLine.SetRange("Series Code", SeriesCode);
136
- NoSeriesLine.SetFilter("Starting Date", '<=%1', Today);
137
- NoSeriesLine.SetFilter("Ending Date", '%1|>=%2', 0D, Today);
138
-
139
- exit(NoSeriesLine.FindLast());
140
- end;
141
-
142
- local procedure ValidateNumberFormat(NumberValue: Code[20]; NoSeriesLine: Record "No. Series Line"): Boolean
143
- var
144
- ExpectedFormat: Text;
145
- ActualFormat: Text;
146
- FormatValid: Boolean;
147
- begin
148
- FormatValid := true;
149
-
150
- // Validate length
151
- if StrLen(NumberValue) > 20 then begin
152
- AddValidationError(StrSubstNo('Number %1 exceeds maximum length of 20 characters', NumberValue));
153
- FormatValid := false;
154
- end;
155
-
156
- // Validate prefix consistency
157
- if not ValidatePrefix(NumberValue, NoSeriesLine) then
158
- FormatValid := false;
159
-
160
- // Validate suffix consistency
161
- if not ValidateSuffix(NumberValue, NoSeriesLine) then
162
- FormatValid := false;
163
-
164
- // Validate numeric portion
165
- if not ValidateNumericPortion(NumberValue, NoSeriesLine) then
166
- FormatValid := false;
167
-
168
- exit(FormatValid);
169
- end;
170
-
171
- local procedure ValidateNumberRange(NumberValue: Code[20]; NoSeriesLine: Record "No. Series Line"): Boolean
172
- var
173
- RangeValid: Boolean;
174
- begin
175
- RangeValid := true;
176
-
177
- // Check if number is within starting range
178
- if (NoSeriesLine."Starting No." <> '') and (NumberValue < NoSeriesLine."Starting No.") then begin
179
- AddValidationError(StrSubstNo('Number %1 is below starting number %2', NumberValue, NoSeriesLine."Starting No."));
180
- RangeValid := false;
181
- end;
182
-
183
- // Check if number is within ending range
184
- if (NoSeriesLine."Ending No." <> '') and (NumberValue > NoSeriesLine."Ending No.") then begin
185
- AddValidationError(StrSubstNo('Number %1 exceeds ending number %2', NumberValue, NoSeriesLine."Ending No."));
186
- RangeValid := false;
187
- end;
188
-
189
- exit(RangeValid);
190
- end;
191
-
192
- local procedure ValidateIncrementPattern(NumberValue: Code[20]; NoSeriesLine: Record "No. Series Line"): Boolean
193
- var
194
- ExpectedIncrement: Integer;
195
- ActualIncrement: Integer;
196
- LastUsedNumber: Code[20];
197
- begin
198
- if NoSeriesLine."Last No. Used" = '' then
199
- exit(true); // First number, no increment to validate
200
-
201
- LastUsedNumber := NoSeriesLine."Last No. Used";
202
- ExpectedIncrement := NoSeriesLine."Increment-by No.";
203
-
204
- ActualIncrement := CalculateIncrement(LastUsedNumber, NumberValue);
205
-
206
- if ActualIncrement <> ExpectedIncrement then begin
207
- AddValidationError(StrSubstNo('Number %1 does not follow expected increment pattern. Expected: %2, Actual: %3',
208
- NumberValue, ExpectedIncrement, ActualIncrement));
209
- exit(false);
210
- end;
211
-
212
- exit(true);
213
- end;
214
-
215
- local procedure CheckForGaps(SeriesCode: Code[20]; NoSeriesLine: Record "No. Series Line"): Integer
216
- var
217
- NoSeriesLog: Record "No. Series Log";
218
- ExpectedNumber: Code[20];
219
- CurrentNumber: Code[20];
220
- GapCount: Integer;
221
- PreviousNumber: Code[20];
222
- begin
223
- GapCount := 0;
224
- PreviousNumber := NoSeriesLine."Starting No.";
225
-
226
- NoSeriesLog.SetRange("Series Code", SeriesCode);
227
- NoSeriesLog.SetCurrentKey("Generation Date", "Generation Time");
228
-
229
- if NoSeriesLog.FindSet() then
230
- repeat
231
- CurrentNumber := NoSeriesLog."Generated No.";
232
- ExpectedNumber := IncrementNumber(PreviousNumber, NoSeriesLine."Increment-by No.");
233
-
234
- if CurrentNumber <> ExpectedNumber then begin
235
- // Gap detected
236
- GapCount += 1;
237
- LogGap(SeriesCode, ExpectedNumber, CurrentNumber);
238
- end;
239
-
240
- PreviousNumber := CurrentNumber;
241
- until NoSeriesLog.Next() = 0;
242
-
243
- exit(GapCount);
244
- end;
245
-
246
- local procedure CheckForDuplicates(SeriesCode: Code[20]): Integer
247
- var
248
- NoSeriesLog: Record "No. Series Log";
249
- TempNoSeriesLog: Record "No. Series Log" temporary;
250
- DuplicateCount: Integer;
251
- begin
252
- DuplicateCount := 0;
253
-
254
- NoSeriesLog.SetRange("Series Code", SeriesCode);
255
-
256
- if NoSeriesLog.FindSet() then
257
- repeat
258
- TempNoSeriesLog.SetRange("Generated No.", NoSeriesLog."Generated No.");
259
- if TempNoSeriesLog.FindFirst() then begin
260
- // Duplicate found
261
- DuplicateCount += 1;
262
- LogDuplicate(SeriesCode, NoSeriesLog."Generated No.", NoSeriesLog."Generation Date", TempNoSeriesLog."Generation Date");
263
- end else begin
264
- TempNoSeriesLog.TransferFields(NoSeriesLog);
265
- TempNoSeriesLog.Insert();
266
- end;
267
- until NoSeriesLog.Next() = 0;
268
-
269
- exit(DuplicateCount);
270
- end;
271
-
272
- local procedure ValidateLastUsedNumber(NoSeriesLine: Record "No. Series Line"): Boolean
273
- var
274
- NoSeriesLog: Record "No. Series Log";
275
- LastLoggedNumber: Code[20];
276
- begin
277
- if NoSeriesLine."Last No. Used" = '' then
278
- exit(true);
279
-
280
- // Find the most recent logged number
281
- NoSeriesLog.SetRange("Series Code", NoSeriesLine."Series Code");
282
- if NoSeriesLog.FindLast() then begin
283
- LastLoggedNumber := NoSeriesLog."Generated No.";
284
-
285
- if LastLoggedNumber <> NoSeriesLine."Last No. Used" then begin
286
- AddValidationError(StrSubstNo('Last used number mismatch. Series Line: %1, Log: %2',
287
- NoSeriesLine."Last No. Used", LastLoggedNumber));
288
- exit(false);
289
- end;
290
- end;
291
-
292
- exit(true);
293
- end;
294
-
295
- local procedure ValidateSequenceBoundaries(NoSeriesLine: Record "No. Series Line"): Boolean
296
- var
297
- BoundariesValid: Boolean;
298
- begin
299
- BoundariesValid := true;
300
-
301
- // Validate that starting number is less than ending number
302
- if (NoSeriesLine."Starting No." <> '') and (NoSeriesLine."Ending No." <> '') then begin
303
- if NoSeriesLine."Starting No." >= NoSeriesLine."Ending No." then begin
304
- AddValidationError(StrSubstNo('Starting number %1 must be less than ending number %2',
305
- NoSeriesLine."Starting No.", NoSeriesLine."Ending No."));
306
- BoundariesValid := false;
307
- end;
308
- end;
309
-
310
- // Validate that last used number is within boundaries
311
- if NoSeriesLine."Last No. Used" <> '' then begin
312
- if (NoSeriesLine."Starting No." <> '') and (NoSeriesLine."Last No. Used" < NoSeriesLine."Starting No.") then begin
313
- AddValidationError(StrSubstNo('Last used number %1 is below starting number %2',
314
- NoSeriesLine."Last No. Used", NoSeriesLine."Starting No."));
315
- BoundariesValid := false;
316
- end;
317
-
318
- if (NoSeriesLine."Ending No." <> '') and (NoSeriesLine."Last No. Used" > NoSeriesLine."Ending No.") then begin
319
- AddValidationError(StrSubstNo('Last used number %1 exceeds ending number %2',
320
- NoSeriesLine."Last No. Used", NoSeriesLine."Ending No."));
321
- BoundariesValid := false;
322
- end;
323
- end;
324
-
325
- exit(BoundariesValid);
326
- end;
327
-
328
- local procedure ValidateCrossTableReferences(SeriesCode: Code[20]): Boolean
329
- var
330
- SalesHeader: Record "Sales Header";
331
- PurchaseHeader: Record "Purchase Header";
332
- ItemLedgerEntry: Record "Item Ledger Entry";
333
- ReferenceValid: Boolean;
334
- OrphanCount: Integer;
335
- begin
336
- ReferenceValid := true;
337
-
338
- // Check for orphaned numbers in sales documents
339
- OrphanCount := CheckOrphanedReferences(SeriesCode, Database::"Sales Header");
340
- if OrphanCount > 0 then begin
341
- AddValidationWarning(StrSubstNo('%1 orphaned references found in Sales Headers for series %2', OrphanCount, SeriesCode));
342
- end;
343
-
344
- // Check for orphaned numbers in purchase documents
345
- OrphanCount := CheckOrphanedReferences(SeriesCode, Database::"Purchase Header");
346
- if OrphanCount > 0 then begin
347
- AddValidationWarning(StrSubstNo('%1 orphaned references found in Purchase Headers for series %2', OrphanCount, SeriesCode));
348
- end;
349
-
350
- exit(ReferenceValid);
351
- end;
352
-
353
- local procedure ValidateConcurrencyIntegrity(SeriesCode: Code[20]): Boolean
354
- var
355
- NoSeriesLock: Record "No. Series Lock";
356
- ConcurrencyValid: Boolean;
357
- begin
358
- ConcurrencyValid := true;
359
-
360
- // Check for stale locks
361
- NoSeriesLock.SetRange("Series Code", SeriesCode);
362
- NoSeriesLock.SetFilter("Lock Time", '<%1', CurrentDateTime - 300000); // 5 minutes old
363
-
364
- if not NoSeriesLock.IsEmpty then begin
365
- AddValidationWarning(StrSubstNo('Stale locks found for series %1', SeriesCode));
366
- // Clean up stale locks
367
- NoSeriesLock.DeleteAll(true);
368
- end;
369
-
370
- exit(ConcurrencyValid);
371
- end;
372
-
373
- local procedure ValidateBusinessRules(SeriesCode: Code[20]): Boolean
374
- var
375
- NoSeries: Record "No. Series";
376
- BusinessRulesValid: Boolean;
377
- begin
378
- BusinessRulesValid := true;
379
-
380
- if not NoSeries.Get(SeriesCode) then begin
381
- AddValidationError(StrSubstNo('No. Series %1 not found', SeriesCode));
382
- exit(false);
383
- end;
384
-
385
- // Validate business rule: Manual vs. Automatic
386
- if NoSeries."Manual Nos." and NoSeries."Default Nos." then begin
387
- AddValidationError(StrSubstNo('Series %1 cannot have both Manual and Default numbering enabled', SeriesCode));
388
- BusinessRulesValid := false;
389
- end;
390
-
391
- // Validate date-based rules
392
- if not ValidateDateBasedRules(SeriesCode) then
393
- BusinessRulesValid := false;
394
-
395
- exit(BusinessRulesValid);
396
- end;
397
-
398
- local procedure ValidateSystemConsistency(SeriesCode: Code[20]): Boolean
399
- var
400
- NoSeriesLine: Record "No. Series Line";
401
- ConsistencyValid: Boolean;
402
- OverlapCount: Integer;
403
- begin
404
- ConsistencyValid := true;
405
-
406
- // Check for overlapping date ranges
407
- OverlapCount := CheckDateRangeOverlaps(SeriesCode);
408
- if OverlapCount > 0 then begin
409
- AddValidationError(StrSubstNo('%1 overlapping date ranges found for series %2', OverlapCount, SeriesCode));
410
- ConsistencyValid := false;
411
- end;
412
-
413
- // Check for missing date ranges
414
- if not ValidateDateRangeContinuity(SeriesCode) then
415
- ConsistencyValid := false;
416
-
417
- exit(ConsistencyValid);
418
- end;
419
-
420
- // Helper procedures...
421
- local procedure ValidatePrefix(NumberValue: Code[20]; NoSeriesLine: Record "No. Series Line"): Boolean
422
- begin
423
- // Implement prefix validation logic
424
- exit(true);
425
- end;
426
-
427
- local procedure ValidateSuffix(NumberValue: Code[20]; NoSeriesLine: Record "No. Series Line"): Boolean
428
- begin
429
- // Implement suffix validation logic
430
- exit(true);
431
- end;
432
-
433
- local procedure ValidateNumericPortion(NumberValue: Code[20]; NoSeriesLine: Record "No. Series Line"): Boolean
434
- begin
435
- // Implement numeric portion validation logic
436
- exit(true);
437
- end;
438
-
439
- local procedure CalculateIncrement(FromNumber: Code[20]; ToNumber: Code[20]): Integer
440
- begin
441
- // Implement increment calculation logic
442
- exit(1);
443
- end;
444
-
445
- local procedure IncrementNumber(Number: Code[20]; IncrementBy: Integer): Code[20]
446
- begin
447
- // Implement number increment logic
448
- exit(Number);
449
- end;
450
-
451
- local procedure CheckOrphanedReferences(SeriesCode: Code[20]; TableNo: Integer): Integer
452
- begin
453
- // Implement orphaned reference checking
454
- exit(0);
455
- end;
456
-
457
- local procedure CheckDateRangeOverlaps(SeriesCode: Code[20]): Integer
458
- begin
459
- // Implement date range overlap checking
460
- exit(0);
461
- end;
462
-
463
- local procedure ValidateDateRangeContinuity(SeriesCode: Code[20]): Boolean
464
- begin
465
- // Implement date range continuity validation
466
- exit(true);
467
- end;
468
-
469
- local procedure ValidateDateBasedRules(SeriesCode: Code[20]): Boolean
470
- begin
471
- // Implement date-based business rule validation
472
- exit(true);
473
- end;
474
-
475
- local procedure AddValidationError(ErrorText: Text)
476
- begin
477
- ValidationErrors.Add(ErrorText);
478
- end;
479
-
480
- local procedure AddValidationWarning(WarningText: Text)
481
- begin
482
- ValidationWarnings.Add(WarningText);
483
- end;
484
-
485
- local procedure LogGap(SeriesCode: Code[20]; ExpectedNumber: Code[20]; ActualNumber: Code[20])
486
- begin
487
- // Log gap detection for analysis
488
- end;
489
-
490
- local procedure LogDuplicate(SeriesCode: Code[20]; DuplicateNumber: Code[20]; Date1: Date; Date2: Date)
491
- begin
492
- // Log duplicate detection for analysis
493
- end;
494
- }
495
- ```
496
-
497
- ## Real-Time Validation Integration
498
-
499
- ```al
500
- // Real-time validation during number generation
501
- codeunit 50901 "Real-Time No Series Validator"
502
- {
503
- var
504
- Validator: Codeunit "No Series Validator";
505
-
506
- [EventSubscriber(ObjectType::Codeunit, Codeunit::"No. Series Management", 'OnBeforeGetNextNo', '', false, false)]
507
- local procedure OnBeforeGetNextNo(NoSeriesCode: Code[20]; SeriesDate: Date; var NoSeriesLine: Record "No. Series Line")
508
- begin
509
- ValidateBeforeGeneration(NoSeriesCode, NoSeriesLine);
510
- end;
511
-
512
- [EventSubscriber(ObjectType::Codeunit, Codeunit::"No. Series Management", 'OnAfterGetNextNo', '', false, false)]
513
- local procedure OnAfterGetNextNo(NoSeriesCode: Code[20]; SeriesDate: Date; var NoSeriesLine: Record "No. Series Line"; var NextNo: Code[20])
514
- begin
515
- ValidateAfterGeneration(NoSeriesCode, NextNo, NoSeriesLine);
516
- end;
517
-
518
- local procedure ValidateBeforeGeneration(NoSeriesCode: Code[20]; NoSeriesLine: Record "No. Series Line")
519
- var
520
- ValidationErrors: List of [Text];
521
- ErrorText: Text;
522
- begin
523
- if not Validator.ValidateSequence(NoSeriesCode) then begin
524
- ValidationErrors := Validator.GetValidationErrors();
525
- foreach ErrorText in ValidationErrors do
526
- Error('No. Series validation failed: %1', ErrorText);
527
- end;
528
- end;
529
-
530
- local procedure ValidateAfterGeneration(NoSeriesCode: Code[20]; NextNo: Code[20]; NoSeriesLine: Record "No. Series Line")
531
- var
532
- ValidationErrors: List of [Text];
533
- ErrorText: Text;
534
- begin
535
- if not Validator.ValidateFormat(NoSeriesCode, NextNo) then begin
536
- ValidationErrors := Validator.GetValidationErrors();
537
- foreach ErrorText in ValidationErrors do
538
- Error('Generated number validation failed: %1', ErrorText);
539
- end;
540
-
541
- // Log successful generation
542
- LogNumberGeneration(NoSeriesCode, NextNo);
543
- end;
544
-
545
- local procedure LogNumberGeneration(NoSeriesCode: Code[20]; GeneratedNo: Code[20])
546
- var
547
- NoSeriesLog: Record "No. Series Log";
548
- begin
549
- NoSeriesLog.Init();
550
- NoSeriesLog."Entry No." := GetNextLogEntryNo();
551
- NoSeriesLog."Series Code" := NoSeriesCode;
552
- NoSeriesLog."Generated No." := GeneratedNo;
553
- NoSeriesLog."Generation Date" := Today;
554
- NoSeriesLog."Generation Time" := Time;
555
- NoSeriesLog."User ID" := UserId;
556
- NoSeriesLog.Insert(true);
557
- end;
558
-
559
- local procedure GetNextLogEntryNo(): Integer
560
- var
561
- NoSeriesLog: Record "No. Series Log";
562
- begin
563
- if NoSeriesLog.FindLast() then
564
- exit(NoSeriesLog."Entry No." + 1)
565
- else
566
- exit(1);
567
- end;
568
- }
569
- ```
570
-
571
- ## Batch Validation Tool
572
-
573
- ```al
574
- // Comprehensive batch validation for all series
575
- codeunit 50902 "Batch No Series Validation"
576
- {
577
- var
578
- Validator: Codeunit "No Series Validator";
579
-
580
- procedure ValidateAllSeries(): Dictionary of [Code[20], List of [Text]]
581
- var
582
- NoSeries: Record "No. Series";
583
- ValidationResults: Dictionary of [Code[20], List of [Text]];
584
- SeriesErrors: List of [Text];
585
- begin
586
- if NoSeries.FindSet() then
587
- repeat
588
- Clear(SeriesErrors);
589
-
590
- // Run comprehensive validation
591
- if not Validator.ValidateSequence(NoSeries.Code) then
592
- AddErrors(SeriesErrors, Validator.GetValidationErrors());
593
-
594
- if not Validator.ValidateIntegrity(NoSeries.Code) then
595
- AddErrors(SeriesErrors, Validator.GetValidationErrors());
596
-
597
- ValidationResults.Set(NoSeries.Code, SeriesErrors);
598
-
599
- until NoSeries.Next() = 0;
600
-
601
- exit(ValidationResults);
602
- end;
603
-
604
- procedure GenerateValidationReport(): Text
605
- var
606
- ValidationResults: Dictionary of [Code[20], List of [Text]];
607
- ReportText: Text;
608
- SeriesCode: Code[20];
609
- SeriesErrors: List of [Text];
610
- ErrorText: Text;
611
- TotalSeries: Integer;
612
- SeriesWithErrors: Integer;
613
- begin
614
- ValidationResults := ValidateAllSeries();
615
- TotalSeries := ValidationResults.Count;
616
-
617
- ReportText := StrSubstNo('No. Series Validation Report - %1\n', CurrentDateTime);
618
- ReportText += StrSubstNo('Total Series Validated: %1\n\n', TotalSeries);
619
-
620
- foreach SeriesCode in ValidationResults.Keys do begin
621
- ValidationResults.Get(SeriesCode, SeriesErrors);
622
-
623
- if SeriesErrors.Count > 0 then begin
624
- SeriesWithErrors += 1;
625
- ReportText += StrSubstNo('Series: %1 (%2 errors)\n', SeriesCode, SeriesErrors.Count);
626
-
627
- foreach ErrorText in SeriesErrors do
628
- ReportText += StrSubstNo(' - %1\n', ErrorText);
629
-
630
- ReportText += '\n';
631
- end;
632
- end;
633
-
634
- ReportText += StrSubstNo('Summary: %1 of %2 series have validation errors.\n', SeriesWithErrors, TotalSeries);
635
-
636
- exit(ReportText);
637
- end;
638
-
639
- procedure FixCommonIssues(): Integer
640
- var
641
- ValidationResults: Dictionary of [Code[20], List of [Text]];
642
- SeriesCode: Code[20];
643
- SeriesErrors: List of [Text];
644
- FixedCount: Integer;
645
- begin
646
- ValidationResults := ValidateAllSeries();
647
-
648
- foreach SeriesCode in ValidationResults.Keys do begin
649
- ValidationResults.Get(SeriesCode, SeriesErrors);
650
-
651
- if SeriesErrors.Count > 0 then begin
652
- if FixSeriesIssues(SeriesCode, SeriesErrors) then
653
- FixedCount += 1;
654
- end;
655
- end;
656
-
657
- exit(FixedCount);
658
- end;
659
-
660
- local procedure FixSeriesIssues(SeriesCode: Code[20]; Errors: List of [Text]): Boolean
661
- var
662
- ErrorText: Text;
663
- FixedAny: Boolean;
664
- begin
665
- FixedAny := false;
666
-
667
- foreach ErrorText in Errors do begin
668
- case true of
669
- StrPos(ErrorText, 'Stale locks') > 0:
670
- begin
671
- CleanupStaleLocks(SeriesCode);
672
- FixedAny := true;
673
- end;
674
- StrPos(ErrorText, 'orphaned references') > 0:
675
- begin
676
- CleanupOrphanedReferences(SeriesCode);
677
- FixedAny := true;
678
- end;
679
- end;
680
- end;
681
-
682
- exit(FixedAny);
683
- end;
684
-
685
- local procedure AddErrors(var TargetList: List of [Text]; SourceList: List of [Text])
686
- var
687
- ErrorText: Text;
688
- begin
689
- foreach ErrorText in SourceList do
690
- TargetList.Add(ErrorText);
691
- end;
692
-
693
- local procedure CleanupStaleLocks(SeriesCode: Code[20])
694
- var
695
- NoSeriesLock: Record "No. Series Lock";
696
- begin
697
- NoSeriesLock.SetRange("Series Code", SeriesCode);
698
- NoSeriesLock.SetFilter("Lock Time", '<%1', CurrentDateTime - 300000);
699
- NoSeriesLock.DeleteAll(true);
700
- end;
701
-
702
- local procedure CleanupOrphanedReferences(SeriesCode: Code[20])
703
- begin
704
- // Implement orphaned reference cleanup
705
- end;
706
- }
707
- ```
708
-
709
- ## Usage Example
710
-
711
- ```al
712
- // Example of using validation patterns
713
- codeunit 50903 "Validation Usage Example"
714
- {
715
- procedure DemonstrateValidation()
716
- var
717
- Validator: Codeunit "No Series Validator";
718
- BatchValidator: Codeunit "Batch No Series Validation";
719
- ValidationReport: Text;
720
- SeriesCode: Code[20];
721
- TestNumber: Code[20];
722
- ValidationErrors: List of [Text];
723
- ErrorText: Text;
724
- FixedCount: Integer;
725
- begin
726
- SeriesCode := 'SALES-ORDER';
727
- TestNumber := 'SO-2024-001';
728
-
729
- // Validate specific number format
730
- if Validator.ValidateFormat(SeriesCode, TestNumber) then
731
- Message('Number format validation passed')
732
- else begin
733
- ValidationErrors := Validator.GetValidationErrors();
734
- foreach ErrorText in ValidationErrors do
735
- Message('Format error: %1', ErrorText);
736
- end;
737
-
738
- // Validate sequence integrity
739
- if Validator.ValidateSequence(SeriesCode) then
740
- Message('Sequence validation passed')
741
- else begin
742
- ValidationErrors := Validator.GetValidationErrors();
743
- foreach ErrorText in ValidationErrors do
744
- Message('Sequence error: %1', ErrorText);
745
- end;
746
-
747
- // Run batch validation
748
- ValidationReport := BatchValidator.GenerateValidationReport();
749
- Message('Validation Report:\n%1', ValidationReport);
750
-
751
- // Fix common issues
752
- FixedCount := BatchValidator.FixCommonIssues();
753
- Message('Fixed %1 series issues automatically', FixedCount);
754
- end;
755
- }
756
- ```
757
-
758
- This comprehensive validation implementation provides robust number sequence integrity checking with real-time validation, batch processing capabilities, and automatic issue remediation for Business Central number series management.