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,716 +0,0 @@
1
- # API Page Validation Rule Execution - AL Code Sample
2
-
3
- ## Basic Validation Rule Implementation
4
-
5
- ```al
6
- page 50500 "Validated Customer API"
7
- {
8
- PageType = API;
9
- APIPublisher = 'contoso';
10
- APIGroup = 'customers';
11
- APIVersion = 'v1.0';
12
- EntityName = 'customer';
13
- EntitySetName = 'customers';
14
- SourceTable = Customer;
15
- DelayedInsert = true;
16
- ODataKeyFields = SystemId;
17
-
18
- layout
19
- {
20
- area(Content)
21
- {
22
- repeater(GroupName)
23
- {
24
- field(id; Rec.SystemId)
25
- {
26
- Caption = 'Id';
27
- Editable = false;
28
- }
29
- field(number; Rec."No.")
30
- {
31
- Caption = 'Number';
32
- // Field validation automatically triggered by BC
33
- }
34
- field(displayName; Rec.Name)
35
- {
36
- Caption = 'Display Name';
37
- // Required field validation
38
- }
39
- field(email; Rec."E-Mail")
40
- {
41
- Caption = 'Email';
42
- // Email format validation through table field definition
43
- }
44
- field(creditLimit; Rec."Credit Limit (LCY)")
45
- {
46
- Caption = 'Credit Limit';
47
- // Numeric validation and business rules
48
- }
49
- field(customerPostingGroup; Rec."Customer Posting Group")
50
- {
51
- Caption = 'Customer Posting Group';
52
- // TableRelation validation
53
- }
54
- }
55
- }
56
- }
57
-
58
- // Business validation rules executed during API operations
59
- trigger OnInsertRecord(BelowxRec: Boolean): Boolean
60
- var
61
- CustomerValidation: Codeunit "Customer Validation Rules";
62
- begin
63
- // Execute comprehensive business validation
64
- if not CustomerValidation.ValidateNewCustomer(Rec) then
65
- exit(false);
66
-
67
- // Additional API-specific validations
68
- ValidateAPISpecificRules();
69
-
70
- exit(true);
71
- end;
72
-
73
- trigger OnModifyRecord(): Boolean
74
- var
75
- CustomerValidation: Codeunit "Customer Validation Rules";
76
- begin
77
- // Execute modification validation rules
78
- if not CustomerValidation.ValidateCustomerModification(Rec, xRec) then
79
- exit(false);
80
-
81
- ValidateAPISpecificRules();
82
-
83
- exit(true);
84
- end;
85
-
86
- trigger OnDeleteRecord(): Boolean
87
- var
88
- CustomerValidation: Codeunit "Customer Validation Rules";
89
- begin
90
- // Validate deletion is allowed
91
- if not CustomerValidation.ValidateCustomerDeletion(Rec) then
92
- exit(false);
93
-
94
- exit(true);
95
- end;
96
-
97
- local procedure ValidateAPISpecificRules()
98
- begin
99
- // API-specific validation rules
100
- if Rec.Name = '' then
101
- Error('Display name is required for API operations');
102
-
103
- if Rec."E-Mail" <> '' then
104
- if not IsValidEmail(Rec."E-Mail") then
105
- Error('Invalid email format: %1', Rec."E-Mail");
106
-
107
- // Credit limit validation
108
- if Rec."Credit Limit (LCY)" < 0 then
109
- Error('Credit limit cannot be negative');
110
- end;
111
-
112
- local procedure IsValidEmail(Email: Text): Boolean
113
- var
114
- EmailPattern: Text;
115
- begin
116
- EmailPattern := '*@*.*';
117
- exit(Email.Contains('@') and (StrLen(Email) > 5));
118
- end;
119
- }
120
-
121
- // Comprehensive validation rules codeunit
122
- codeunit 50500 "Customer Validation Rules"
123
- {
124
- // Validate new customer creation
125
- procedure ValidateNewCustomer(var Customer: Record Customer): Boolean
126
- begin
127
- // Required field validations
128
- if not ValidateRequiredFields(Customer) then
129
- exit(false);
130
-
131
- // Business rule validations
132
- if not ValidateBusinessRules(Customer) then
133
- exit(false);
134
-
135
- // Data integrity validations
136
- if not ValidateDataIntegrity(Customer) then
137
- exit(false);
138
-
139
- exit(true);
140
- end;
141
-
142
- // Validate customer modifications
143
- procedure ValidateCustomerModification(var Customer: Record Customer; OldCustomer: Record Customer): Boolean
144
- begin
145
- // Check if critical fields are being modified
146
- if Customer."No." <> OldCustomer."No." then
147
- Error('Customer number cannot be modified');
148
-
149
- // Validate changes don't violate business rules
150
- if Customer."Customer Posting Group" <> OldCustomer."Customer Posting Group" then
151
- if not ValidatePostingGroupChange(Customer, OldCustomer) then
152
- exit(false);
153
-
154
- // Validate credit limit changes
155
- if Customer."Credit Limit (LCY)" <> OldCustomer."Credit Limit (LCY)" then
156
- if not ValidateCreditLimitChange(Customer, OldCustomer) then
157
- exit(false);
158
-
159
- exit(ValidateNewCustomer(Customer));
160
- end;
161
-
162
- // Validate customer deletion
163
- procedure ValidateCustomerDeletion(var Customer: Record Customer): Boolean
164
- var
165
- SalesLine: Record "Sales Line";
166
- CustLedgerEntry: Record "Cust. Ledger Entry";
167
- begin
168
- // Check for existing transactions
169
- CustLedgerEntry.SetRange("Customer No.", Customer."No.");
170
- if not CustLedgerEntry.IsEmpty() then
171
- Error('Cannot delete customer %1. Customer has ledger entries.', Customer."No.");
172
-
173
- // Check for open sales documents
174
- SalesLine.SetRange("Sell-to Customer No.", Customer."No.");
175
- if not SalesLine.IsEmpty() then
176
- Error('Cannot delete customer %1. Customer has open sales documents.', Customer."No.");
177
-
178
- exit(true);
179
- end;
180
-
181
- local procedure ValidateRequiredFields(var Customer: Record Customer): Boolean
182
- begin
183
- if Customer."No." = '' then
184
- Error('Customer number is required');
185
-
186
- if Customer.Name = '' then
187
- Error('Customer name is required');
188
-
189
- if Customer."Customer Posting Group" = '' then
190
- Error('Customer posting group is required');
191
-
192
- exit(true);
193
- end;
194
-
195
- local procedure ValidateBusinessRules(var Customer: Record Customer): Boolean
196
- var
197
- CustomerPostingGroup: Record "Customer Posting Group";
198
- PaymentTerms: Record "Payment Terms";
199
- begin
200
- // Validate posting group exists
201
- if not CustomerPostingGroup.Get(Customer."Customer Posting Group") then
202
- Error('Customer posting group %1 does not exist', Customer."Customer Posting Group");
203
-
204
- // Validate payment terms if specified
205
- if Customer."Payment Terms Code" <> '' then
206
- if not PaymentTerms.Get(Customer."Payment Terms Code") then
207
- Error('Payment terms %1 do not exist', Customer."Payment Terms Code");
208
-
209
- // Validate credit limit is reasonable
210
- if Customer."Credit Limit (LCY)" > 1000000 then
211
- Error('Credit limit exceeds maximum allowed amount of 1,000,000');
212
-
213
- exit(true);
214
- end;
215
-
216
- local procedure ValidateDataIntegrity(var Customer: Record Customer): Boolean
217
- var
218
- ExistingCustomer: Record Customer;
219
- begin
220
- // Check for duplicate customer numbers
221
- ExistingCustomer.SetRange("No.", Customer."No.");
222
- ExistingCustomer.SetFilter(SystemId, '<>%1', Customer.SystemId);
223
- if not ExistingCustomer.IsEmpty() then
224
- Error('Customer number %1 already exists', Customer."No.");
225
-
226
- // Validate email uniqueness if configured
227
- if Customer."E-Mail" <> '' then
228
- if not ValidateEmailUniqueness(Customer) then
229
- exit(false);
230
-
231
- exit(true);
232
- end;
233
-
234
- local procedure ValidatePostingGroupChange(var Customer: Record Customer; OldCustomer: Record Customer): Boolean
235
- var
236
- CustLedgerEntry: Record "Cust. Ledger Entry";
237
- begin
238
- // Prevent posting group change if customer has open entries
239
- CustLedgerEntry.SetRange("Customer No.", Customer."No.");
240
- CustLedgerEntry.SetRange(Open, true);
241
- if not CustLedgerEntry.IsEmpty() then
242
- Error('Cannot change posting group for customer %1. Customer has open ledger entries.', Customer."No.");
243
-
244
- exit(true);
245
- end;
246
-
247
- local procedure ValidateCreditLimitChange(var Customer: Record Customer; OldCustomer: Record Customer): Boolean
248
- var
249
- SalesHeader: Record "Sales Header";
250
- OutstandingAmount: Decimal;
251
- begin
252
- // If credit limit is being reduced, check outstanding orders
253
- if Customer."Credit Limit (LCY)" < OldCustomer."Credit Limit (LCY)" then begin
254
- SalesHeader.SetRange("Sell-to Customer No.", Customer."No.");
255
- SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
256
- if SalesHeader.FindSet() then
257
- repeat
258
- SalesHeader.CalcFields("Amount Including VAT");
259
- OutstandingAmount += SalesHeader."Amount Including VAT";
260
- until SalesHeader.Next() = 0;
261
-
262
- if OutstandingAmount > Customer."Credit Limit (LCY)" then
263
- Error('Cannot reduce credit limit below outstanding order amount of %1', OutstandingAmount);
264
- end;
265
-
266
- exit(true);
267
- end;
268
-
269
- local procedure ValidateEmailUniqueness(var Customer: Record Customer): Boolean
270
- var
271
- ExistingCustomer: Record Customer;
272
- begin
273
- ExistingCustomer.SetRange("E-Mail", Customer."E-Mail");
274
- ExistingCustomer.SetFilter(SystemId, '<>%1', Customer.SystemId);
275
- if not ExistingCustomer.IsEmpty() then
276
- Error('Email address %1 is already assigned to another customer', Customer."E-Mail");
277
-
278
- exit(true);
279
- end;
280
- }
281
- ```
282
-
283
- ## Advanced Field-Level Validation
284
-
285
- ```al
286
- page 50501 "Item Advanced Validation API"
287
- {
288
- PageType = API;
289
- APIPublisher = 'contoso';
290
- APIGroup = 'inventory';
291
- APIVersion = 'v1.0';
292
- EntityName = 'item';
293
- EntitySetName = 'items';
294
- SourceTable = Item;
295
- DelayedInsert = true;
296
- ODataKeyFields = SystemId;
297
-
298
- layout
299
- {
300
- area(Content)
301
- {
302
- repeater(GroupName)
303
- {
304
- field(id; Rec.SystemId)
305
- {
306
- Caption = 'Id';
307
- Editable = false;
308
- }
309
- field(number; Rec."No.")
310
- {
311
- Caption = 'Number';
312
-
313
- trigger OnValidate()
314
- begin
315
- ValidateItemNumber();
316
- end;
317
- }
318
- field(description; Rec.Description)
319
- {
320
- Caption = 'Description';
321
-
322
- trigger OnValidate()
323
- begin
324
- ValidateDescription();
325
- end;
326
- }
327
- field(unitPrice; Rec."Unit Price")
328
- {
329
- Caption = 'Unit Price';
330
-
331
- trigger OnValidate()
332
- begin
333
- ValidateUnitPrice();
334
- end;
335
- }
336
- field(unitCost; Rec."Unit Cost")
337
- {
338
- Caption = 'Unit Cost';
339
-
340
- trigger OnValidate()
341
- begin
342
- ValidateUnitCost();
343
- end;
344
- }
345
- field(inventoryPostingGroup; Rec."Inventory Posting Group")
346
- {
347
- Caption = 'Inventory Posting Group';
348
-
349
- trigger OnValidate()
350
- begin
351
- ValidateInventoryPostingGroup();
352
- end;
353
- }
354
- }
355
- }
356
- }
357
-
358
- local procedure ValidateItemNumber()
359
- var
360
- ItemNumberPattern: Text;
361
- NoSeriesManagement: Codeunit NoSeriesManagement;
362
- begin
363
- if Rec."No." = '' then
364
- Error('Item number cannot be empty');
365
-
366
- // Validate item number format
367
- ItemNumberPattern := GetItemNumberPattern();
368
- if ItemNumberPattern <> '' then
369
- if not MatchesPattern(Rec."No.", ItemNumberPattern) then
370
- Error('Item number %1 does not match required pattern %2', Rec."No.", ItemNumberPattern);
371
-
372
- // Check for duplicate item numbers
373
- if ItemNumberExists(Rec."No.", Rec.SystemId) then
374
- Error('Item number %1 already exists', Rec."No.");
375
- end;
376
-
377
- local procedure ValidateDescription()
378
- begin
379
- if Rec.Description = '' then
380
- Error('Item description is required');
381
-
382
- if StrLen(Rec.Description) < 3 then
383
- Error('Item description must be at least 3 characters long');
384
-
385
- // Check for prohibited words
386
- if ContainsProhibitedWords(Rec.Description) then
387
- Error('Item description contains prohibited content');
388
- end;
389
-
390
- local procedure ValidateUnitPrice()
391
- begin
392
- if Rec."Unit Price" < 0 then
393
- Error('Unit price cannot be negative');
394
-
395
- // Validate against unit cost for margin checking
396
- if (Rec."Unit Cost" > 0) and (Rec."Unit Price" < Rec."Unit Cost") then
397
- if not Confirm('Unit price is below unit cost. Continue?') then
398
- Error('Unit price validation failed');
399
-
400
- // Check for unrealistic pricing
401
- if Rec."Unit Price" > 1000000 then
402
- Error('Unit price exceeds maximum allowed amount');
403
- end;
404
-
405
- local procedure ValidateUnitCost()
406
- begin
407
- if Rec."Unit Cost" < 0 then
408
- Error('Unit cost cannot be negative');
409
-
410
- // Validate cost against existing inventory value
411
- ValidateCostAgainstInventory();
412
- end;
413
-
414
- local procedure ValidateInventoryPostingGroup()
415
- var
416
- InventoryPostingGroup: Record "Inventory Posting Group";
417
- begin
418
- if Rec."Inventory Posting Group" = '' then
419
- Error('Inventory posting group is required');
420
-
421
- if not InventoryPostingGroup.Get(Rec."Inventory Posting Group") then
422
- Error('Inventory posting group %1 does not exist', Rec."Inventory Posting Group");
423
- end;
424
-
425
- local procedure GetItemNumberPattern(): Text
426
- var
427
- InventorySetup: Record "Inventory Setup";
428
- begin
429
- if InventorySetup.Get() then
430
- exit(InventorySetup."Item Nos."); // Use number series as pattern
431
- exit('');
432
- end;
433
-
434
- local procedure MatchesPattern(Value: Text; Pattern: Text): Boolean
435
- var
436
- NoSeriesLine: Record "No. Series Line";
437
- begin
438
- // Simplified pattern matching for demo
439
- // In real implementation, use proper number series validation
440
- exit(StrLen(Value) >= 4);
441
- end;
442
-
443
- local procedure ItemNumberExists(ItemNo: Code[20]; ExcludeSystemId: Guid): Boolean
444
- var
445
- Item: Record Item;
446
- begin
447
- Item.SetRange("No.", ItemNo);
448
- Item.SetFilter(SystemId, '<>%1', ExcludeSystemId);
449
- exit(not Item.IsEmpty());
450
- end;
451
-
452
- local procedure ContainsProhibitedWords(Description: Text): Boolean
453
- var
454
- ProhibitedWords: List of [Text];
455
- Word: Text;
456
- begin
457
- // Define prohibited words for item descriptions
458
- ProhibitedWords.Add('TEMP');
459
- ProhibitedWords.Add('TEST');
460
- ProhibitedWords.Add('DELETE');
461
-
462
- foreach Word in ProhibitedWords do
463
- if Description.ToUpper().Contains(Word) then
464
- exit(true);
465
-
466
- exit(false);
467
- end;
468
-
469
- local procedure ValidateCostAgainstInventory()
470
- var
471
- ItemLedgerEntry: Record "Item Ledger Entry";
472
- AverageCost: Decimal;
473
- Variance: Decimal;
474
- begin
475
- // Calculate current average cost
476
- ItemLedgerEntry.SetRange("Item No.", Rec."No.");
477
- ItemLedgerEntry.CalcSums(Quantity, "Cost Amount (Actual)");
478
-
479
- if ItemLedgerEntry.Quantity <> 0 then begin
480
- AverageCost := ItemLedgerEntry."Cost Amount (Actual)" / ItemLedgerEntry.Quantity;
481
- Variance := Abs(Rec."Unit Cost" - AverageCost) / AverageCost * 100;
482
-
483
- // Warn if cost variance exceeds threshold
484
- if Variance > 25 then // 25% variance threshold
485
- if not Confirm('Unit cost varies %1% from average inventory cost. Continue?', false, Round(Variance, 1)) then
486
- Error('Cost validation failed');
487
- end;
488
- end;
489
- }
490
- ```
491
-
492
- ## Cross-Field and Business Logic Validation
493
-
494
- ```al
495
- // Complex validation codeunit for sales orders
496
- codeunit 50501 "Sales Order Validation API"
497
- {
498
- // Comprehensive sales order validation
499
- procedure ValidateSalesOrder(var SalesHeader: Record "Sales Header"): Boolean
500
- begin
501
- // Execute all validation rules in sequence
502
- if not ValidateOrderHeader(SalesHeader) then
503
- exit(false);
504
-
505
- if not ValidateCustomerRelationship(SalesHeader) then
506
- exit(false);
507
-
508
- if not ValidateOrderTotals(SalesHeader) then
509
- exit(false);
510
-
511
- if not ValidateInventoryAvailability(SalesHeader) then
512
- exit(false);
513
-
514
- exit(true);
515
- end;
516
-
517
- local procedure ValidateOrderHeader(var SalesHeader: Record "Sales Header"): Boolean
518
- begin
519
- // Date validations
520
- if SalesHeader."Order Date" = 0D then
521
- Error('Order date is required');
522
-
523
- if SalesHeader."Order Date" < WorkDate() - 30 then
524
- Error('Order date cannot be more than 30 days in the past');
525
-
526
- if SalesHeader."Requested Delivery Date" < SalesHeader."Order Date" then
527
- Error('Requested delivery date cannot be before order date');
528
-
529
- // Document status validation
530
- if SalesHeader."Document Type" <> SalesHeader."Document Type"::Order then
531
- Error('Only sales orders can be processed through this API');
532
-
533
- exit(true);
534
- end;
535
-
536
- local procedure ValidateCustomerRelationship(var SalesHeader: Record "Sales Header"): Boolean
537
- var
538
- Customer: Record Customer;
539
- CustLedgerEntry: Record "Cust. Ledger Entry";
540
- OutstandingAmount: Decimal;
541
- begin
542
- // Validate customer exists and is active
543
- if not Customer.Get(SalesHeader."Sell-to Customer No.") then
544
- Error('Customer %1 does not exist', SalesHeader."Sell-to Customer No.");
545
-
546
- if Customer.Blocked <> Customer.Blocked::" " then
547
- Error('Customer %1 is blocked for %2', Customer."No.", Customer.Blocked);
548
-
549
- // Check credit limit
550
- if Customer."Credit Limit (LCY)" > 0 then begin
551
- CustLedgerEntry.SetRange("Customer No.", Customer."No.");
552
- CustLedgerEntry.SetRange(Open, true);
553
- CustLedgerEntry.CalcSums("Remaining Amt. (LCY)");
554
- OutstandingAmount := CustLedgerEntry."Remaining Amt. (LCY)";
555
-
556
- SalesHeader.CalcFields("Amount Including VAT");
557
- if (OutstandingAmount + SalesHeader."Amount Including VAT") > Customer."Credit Limit (LCY)" then
558
- Error('Order would exceed customer credit limit. Outstanding: %1, Order: %2, Limit: %3',
559
- OutstandingAmount, SalesHeader."Amount Including VAT", Customer."Credit Limit (LCY)");
560
- end;
561
-
562
- exit(true);
563
- end;
564
-
565
- local procedure ValidateOrderTotals(var SalesHeader: Record "Sales Header"): Boolean
566
- var
567
- SalesLine: Record "Sales Line";
568
- TotalAmount: Decimal;
569
- LineCount: Integer;
570
- begin
571
- // Validate order has lines
572
- SalesLine.SetRange("Document Type", SalesHeader."Document Type");
573
- SalesLine.SetRange("Document No.", SalesHeader."No.");
574
- LineCount := SalesLine.Count();
575
-
576
- if LineCount = 0 then
577
- Error('Sales order must have at least one line');
578
-
579
- if LineCount > 100 then
580
- Error('Sales order cannot have more than 100 lines');
581
-
582
- // Validate minimum order amount
583
- SalesHeader.CalcFields("Amount Including VAT");
584
- if SalesHeader."Amount Including VAT" < 10 then
585
- Error('Minimum order amount is 10.00');
586
-
587
- exit(true);
588
- end;
589
-
590
- local procedure ValidateInventoryAvailability(var SalesHeader: Record "Sales Header"): Boolean
591
- var
592
- SalesLine: Record "Sales Line";
593
- Item: Record Item;
594
- AvailableInventory: Decimal;
595
- begin
596
- SalesLine.SetRange("Document Type", SalesHeader."Document Type");
597
- SalesLine.SetRange("Document No.", SalesHeader."No.");
598
- SalesLine.SetRange(Type, SalesLine.Type::Item);
599
-
600
- if SalesLine.FindSet() then
601
- repeat
602
- if Item.Get(SalesLine."No.") then begin
603
- Item.CalcFields(Inventory, "Qty. on Sales Order");
604
- AvailableInventory := Item.Inventory - Item."Qty. on Sales Order";
605
-
606
- if SalesLine.Quantity > AvailableInventory then
607
- Error('Insufficient inventory for item %1. Requested: %2, Available: %3',
608
- Item."No.", SalesLine.Quantity, AvailableInventory);
609
- end;
610
- until SalesLine.Next() = 0;
611
-
612
- exit(true);
613
- end;
614
- }
615
-
616
- // API page with comprehensive validation
617
- page 50502 "Sales Order Validation API"
618
- {
619
- PageType = API;
620
- APIPublisher = 'contoso';
621
- APIGroup = 'sales';
622
- APIVersion = 'v1.0';
623
- EntityName = 'salesOrder';
624
- EntitySetName = 'salesOrders';
625
- SourceTable = "Sales Header";
626
- DelayedInsert = true;
627
- ODataKeyFields = SystemId;
628
- SourceTableView = WHERE("Document Type" = CONST(Order));
629
-
630
- layout
631
- {
632
- area(Content)
633
- {
634
- repeater(GroupName)
635
- {
636
- field(id; Rec.SystemId)
637
- {
638
- Caption = 'Id';
639
- Editable = false;
640
- }
641
- field(number; Rec."No.")
642
- {
643
- Caption = 'Number';
644
- }
645
- field(customerNumber; Rec."Sell-to Customer No.")
646
- {
647
- Caption = 'Customer Number';
648
- }
649
- field(orderDate; Rec."Order Date")
650
- {
651
- Caption = 'Order Date';
652
- }
653
- field(requestedDeliveryDate; Rec."Requested Delivery Date")
654
- {
655
- Caption = 'Requested Delivery Date';
656
- }
657
- field(totalAmount; TotalAmount)
658
- {
659
- Caption = 'Total Amount';
660
- Editable = false;
661
- }
662
- }
663
- }
664
- }
665
-
666
- var
667
- TotalAmount: Decimal;
668
- SalesOrderValidation: Codeunit "Sales Order Validation API";
669
-
670
- trigger OnAfterGetRecord()
671
- begin
672
- Rec.CalcFields("Amount Including VAT");
673
- TotalAmount := Rec."Amount Including VAT";
674
- end;
675
-
676
- trigger OnInsertRecord(BelowxRec: Boolean): Boolean
677
- begin
678
- // Execute comprehensive validation before insert
679
- exit(SalesOrderValidation.ValidateSalesOrder(Rec));
680
- end;
681
-
682
- trigger OnModifyRecord(): Boolean
683
- begin
684
- // Execute validation before modification
685
- exit(SalesOrderValidation.ValidateSalesOrder(Rec));
686
- end;
687
- }
688
- ```
689
-
690
- ## Implementation Notes
691
-
692
- **Validation Rule Execution Best Practices:**
693
-
694
- 1. **Validation Strategy:**
695
- - Implement field-level validation for immediate feedback
696
- - Use record-level validation for business logic enforcement
697
- - Combine BC standard validation with custom business rules
698
- - Provide clear, actionable error messages
699
-
700
- 2. **Performance Optimization:**
701
- - Execute lightweight validations first (required fields, formats)
702
- - Defer expensive validations (database lookups) until necessary
703
- - Cache validation results when possible
704
- - Use filtered queries to minimize database access
705
-
706
- 3. **Error Handling:**
707
- - Return specific error messages indicating the validation failure
708
- - Include relevant data in error messages for troubleshooting
709
- - Use consistent error message formats across API endpoints
710
- - Log validation failures for monitoring and improvement
711
-
712
- 4. **Business Rule Integration:**
713
- - Leverage existing BC table validation where possible
714
- - Implement custom validation for API-specific requirements
715
- - Ensure validation rules align with UI behavior
716
- - Document validation rules for API consumers