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,665 +0,0 @@
1
- # API Page Implementation - AL Code Examples
2
-
3
- ## Basic API Page Structure
4
-
5
- ```al
6
- page 50100 "Customer API"
7
- {
8
- APIPublisher = 'contoso';
9
- APIGroup = 'business';
10
- APIVersion = 'v1.0';
11
- EntityName = 'customer';
12
- EntitySetName = 'customers';
13
- PageType = API;
14
- Caption = 'Customer API';
15
- SourceTable = Customer;
16
- DelayedInsert = true;
17
- ODataKeyFields = SystemId;
18
-
19
- layout
20
- {
21
- area(Content)
22
- {
23
- repeater(GroupName)
24
- {
25
- field(id; Rec.SystemId)
26
- {
27
- Caption = 'Id';
28
- Editable = false;
29
- }
30
- field(number; Rec."No.")
31
- {
32
- Caption = 'Number';
33
- }
34
- field(displayName; Rec.Name)
35
- {
36
- Caption = 'Display Name';
37
- }
38
- field(type; Rec."Customer Posting Group")
39
- {
40
- Caption = 'Type';
41
- }
42
- field(blocked; Rec.Blocked)
43
- {
44
- Caption = 'Blocked';
45
- }
46
- field(lastModifiedDateTime; Rec.SystemModifiedAt)
47
- {
48
- Caption = 'Last Modified Date Time';
49
- Editable = false;
50
- }
51
- }
52
- }
53
- }
54
- }
55
- ```
56
-
57
- ## Business Entity Relationships
58
-
59
- ```al
60
- page 50101 "Sales Order API"
61
- {
62
- APIPublisher = 'contoso';
63
- APIGroup = 'sales';
64
- APIVersion = 'v2.0';
65
- EntityName = 'salesOrder';
66
- EntitySetName = 'salesOrders';
67
- PageType = API;
68
- Caption = 'Sales Order API';
69
- SourceTable = "Sales Header";
70
- DelayedInsert = true;
71
- ODataKeyFields = SystemId;
72
-
73
- layout
74
- {
75
- area(Content)
76
- {
77
- repeater(GroupName)
78
- {
79
- field(id; Rec.SystemId)
80
- {
81
- Caption = 'Id';
82
- Editable = false;
83
- }
84
- field(number; Rec."No.")
85
- {
86
- Caption = 'Number';
87
- }
88
- field(orderDate; Rec."Order Date")
89
- {
90
- Caption = 'Order Date';
91
- }
92
- // Customer relationship - expose related entity
93
- field(customerId; Rec."Sell-to Customer No.")
94
- {
95
- Caption = 'Customer Id';
96
- }
97
- field(customerName; Rec."Sell-to Customer Name")
98
- {
99
- Caption = 'Customer Name';
100
- Editable = false;
101
- }
102
- // Currency handling with proper OData exposure
103
- field(currencyCode; CurrencyCodeText)
104
- {
105
- Caption = 'Currency Code';
106
- trigger OnValidate()
107
- begin
108
- if CurrencyCodeText = '' then
109
- Rec."Currency Code" := ''
110
- else
111
- Rec."Currency Code" := CopyStr(CurrencyCodeText, 1, MaxStrLen(Rec."Currency Code"));
112
- end;
113
-
114
- trigger OnAfterValidate()
115
- begin
116
- CurrencyCodeText := Rec."Currency Code";
117
- end;
118
- }
119
- // Calculated fields for API consumption
120
- field(totalAmountExcludingTax; TotalAmountExclTax)
121
- {
122
- Caption = 'Total Amount Excluding Tax';
123
- Editable = false;
124
- }
125
- field(totalAmountIncludingTax; TotalAmountInclTax)
126
- {
127
- Caption = 'Total Amount Including Tax';
128
- Editable = false;
129
- }
130
- // Status enum exposure
131
- field(status; Rec.Status)
132
- {
133
- Caption = 'Status';
134
- }
135
- // Navigation properties for related entities
136
- part(salesOrderLines; "Sales Order Line API")
137
- {
138
- Caption = 'Lines';
139
- EntityName = 'salesOrderLine';
140
- EntitySetName = 'salesOrderLines';
141
- SubPageLink = "Document No." = field("No."), "Document Type" = field("Document Type");
142
- }
143
- }
144
- }
145
- }
146
-
147
- var
148
- CurrencyCodeText: Text[10];
149
- TotalAmountExclTax: Decimal;
150
- TotalAmountInclTax: Decimal;
151
-
152
- trigger OnAfterGetRecord()
153
- begin
154
- CurrencyCodeText := Rec."Currency Code";
155
- CalculateTotals();
156
- end;
157
-
158
- local procedure CalculateTotals()
159
- var
160
- SalesLine: Record "Sales Line";
161
- begin
162
- SalesLine.SetRange("Document Type", Rec."Document Type");
163
- SalesLine.SetRange("Document No.", Rec."No.");
164
- SalesLine.CalcSums("Line Amount", "Amount Including VAT");
165
- TotalAmountExclTax := SalesLine."Line Amount";
166
- TotalAmountInclTax := SalesLine."Amount Including VAT";
167
- end;
168
- }
169
- ```
170
-
171
- ## Security and Permission Integration
172
-
173
- ```al
174
- page 50102 "Secure Customer API"
175
- {
176
- APIPublisher = 'contoso';
177
- APIGroup = 'business';
178
- APIVersion = 'v1.0';
179
- EntityName = 'secureCustomer';
180
- EntitySetName = 'secureCustomers';
181
- PageType = API;
182
- Caption = 'Secure Customer API';
183
- SourceTable = Customer;
184
- DelayedInsert = true;
185
- ODataKeyFields = SystemId;
186
- // API-specific permissions
187
- Permissions = tabledata Customer = RIMD;
188
-
189
- layout
190
- {
191
- area(Content)
192
- {
193
- repeater(GroupName)
194
- {
195
- field(id; Rec.SystemId)
196
- {
197
- Caption = 'Id';
198
- Editable = false;
199
- }
200
- field(number; Rec."No.")
201
- {
202
- Caption = 'Number';
203
- }
204
- field(displayName; Rec.Name)
205
- {
206
- Caption = 'Display Name';
207
- }
208
- // Conditional field exposure based on permissions
209
- field(creditLimit; CreditLimitValue)
210
- {
211
- Caption = 'Credit Limit';
212
- trigger OnValidate()
213
- begin
214
- CheckCreditLimitPermission();
215
- Rec."Credit Limit (LCY)" := CreditLimitValue;
216
- end;
217
- }
218
- // Sensitive data with read-only access control
219
- field(balance; BalanceValue)
220
- {
221
- Caption = 'Balance';
222
- Editable = false;
223
- }
224
- }
225
- }
226
- }
227
-
228
- var
229
- CreditLimitValue: Decimal;
230
- BalanceValue: Decimal;
231
-
232
- trigger OnAfterGetRecord()
233
- begin
234
- // Apply security filters and data masking
235
- ApplySecurityFilters();
236
- LoadConditionalData();
237
- end;
238
-
239
- trigger OnInsertRecord(BelowxRec: Boolean): Boolean
240
- begin
241
- CheckInsertPermission();
242
- exit(true);
243
- end;
244
-
245
- trigger OnModifyRecord(): Boolean
246
- begin
247
- CheckModifyPermission();
248
- exit(true);
249
- end;
250
-
251
- trigger OnDeleteRecord(): Boolean
252
- begin
253
- CheckDeletePermission();
254
- exit(true);
255
- end;
256
-
257
- local procedure ApplySecurityFilters()
258
- var
259
- UserSetup: Record "User Setup";
260
- begin
261
- // Apply user-specific filtering
262
- if UserSetup.Get(UserId) then begin
263
- if UserSetup."Salespers./Purch. Code" <> '' then
264
- Rec.SetRange("Salesperson Code", UserSetup."Salespers./Purch. Code");
265
- end;
266
- end;
267
-
268
- local procedure LoadConditionalData()
269
- var
270
- UserPermissions: Codeunit "User Permissions";
271
- begin
272
- // Load sensitive data based on permissions
273
- if UserPermissions.IsSuper(UserSecurityId()) then begin
274
- CreditLimitValue := Rec."Credit Limit (LCY)";
275
- Rec.CalcFields(Balance);
276
- BalanceValue := Rec.Balance;
277
- end else begin
278
- CreditLimitValue := 0;
279
- BalanceValue := 0;
280
- end;
281
- end;
282
-
283
- local procedure CheckCreditLimitPermission()
284
- var
285
- UserPermissions: Codeunit "User Permissions";
286
- begin
287
- if not UserPermissions.IsSuper(UserSecurityId()) then
288
- Error('Insufficient permissions to modify credit limit');
289
- end;
290
-
291
- local procedure CheckInsertPermission()
292
- begin
293
- if not CheckTablePermission(Database::Customer, TablePermission::Insert) then
294
- Error('Insufficient permissions to create customers');
295
- end;
296
-
297
- local procedure CheckModifyPermission()
298
- begin
299
- if not CheckTablePermission(Database::Customer, TablePermission::Modify) then
300
- Error('Insufficient permissions to modify customers');
301
- end;
302
-
303
- local procedure CheckDeletePermission()
304
- begin
305
- if not CheckTablePermission(Database::Customer, TablePermission::Delete) then
306
- Error('Insufficient permissions to delete customers');
307
- end;
308
-
309
- local procedure CheckTablePermission(TableNo: Integer; Permission: TablePermission): Boolean
310
- var
311
- RecordRef: RecordRef;
312
- begin
313
- RecordRef.Open(TableNo);
314
- exit(RecordRef.ReadPermission() and
315
- ((Permission = TablePermission::Insert) and RecordRef.WritePermission()) or
316
- ((Permission = TablePermission::Modify) and RecordRef.WritePermission()) or
317
- ((Permission = TablePermission::Delete) and RecordRef.WritePermission()));
318
- end;
319
- }
320
-
321
- enum 50100 TablePermission
322
- {
323
- Extensible = true;
324
-
325
- value(0; Read) { Caption = 'Read'; }
326
- value(1; Insert) { Caption = 'Insert'; }
327
- value(2; Modify) { Caption = 'Modify'; }
328
- value(3; Delete) { Caption = 'Delete'; }
329
- }
330
- ```
331
-
332
- ## Performance Optimization Patterns
333
-
334
- ```al
335
- page 50103 "Optimized Item API"
336
- {
337
- APIPublisher = 'contoso';
338
- APIGroup = 'inventory';
339
- APIVersion = 'v1.0';
340
- EntityName = 'item';
341
- EntitySetName = 'items';
342
- PageType = API;
343
- Caption = 'Optimized Item API';
344
- SourceTable = Item;
345
- DelayedInsert = true;
346
- ODataKeyFields = SystemId;
347
- // Performance optimization: Define source table view
348
- SourceTableView = where(Blocked = const(false), Type = filter(<> "Non-Inventory"));
349
-
350
- layout
351
- {
352
- area(Content)
353
- {
354
- repeater(GroupName)
355
- {
356
- field(id; Rec.SystemId)
357
- {
358
- Caption = 'Id';
359
- Editable = false;
360
- }
361
- field(number; Rec."No.")
362
- {
363
- Caption = 'Number';
364
- }
365
- field(displayName; Rec.Description)
366
- {
367
- Caption = 'Display Name';
368
- }
369
- field(unitPrice; Rec."Unit Price")
370
- {
371
- Caption = 'Unit Price';
372
- }
373
- // Efficient inventory calculation
374
- field(inventory; InventoryValue)
375
- {
376
- Caption = 'Inventory';
377
- Editable = false;
378
- }
379
- // Pre-calculated unit of measure relationship
380
- field(baseUnitOfMeasureCode; Rec."Base Unit of Measure")
381
- {
382
- Caption = 'Base Unit Of Measure Code';
383
- Editable = false;
384
- }
385
- field(lastModifiedDateTime; Rec.SystemModifiedAt)
386
- {
387
- Caption = 'Last Modified Date Time';
388
- Editable = false;
389
- }
390
- }
391
- }
392
- }
393
-
394
- var
395
- InventoryValue: Decimal;
396
-
397
- trigger OnAfterGetRecord()
398
- begin
399
- LoadOptimizedData();
400
- end;
401
-
402
- trigger OnOpenPage()
403
- begin
404
- SetOptimalFilters();
405
- end;
406
-
407
- local procedure LoadOptimizedData()
408
- begin
409
- // Efficient inventory calculation - avoid FlowField if possible
410
- if ShouldCalculateInventory() then begin
411
- Rec.CalcFields(Inventory);
412
- InventoryValue := Rec.Inventory;
413
- end else
414
- InventoryValue := 0;
415
- end;
416
-
417
- local procedure ShouldCalculateInventory(): Boolean
418
- begin
419
- // Conditional expensive calculations based on context
420
- exit(Rec.Type = Rec.Type::Inventory);
421
- end;
422
-
423
- local procedure SetOptimalFilters()
424
- begin
425
- // Performance optimization: Apply efficient filters
426
- Rec.SetFilter(Type, '<>%1', Rec.Type::"Non-Inventory");
427
- Rec.SetRange(Blocked, false);
428
- end;
429
- }
430
- ```
431
-
432
- ## Anti-Pattern Examples (What NOT to Do)
433
-
434
- ```al
435
- // ❌ ANTI-PATTERN: Poor field exposure and mapping
436
- page 50199 "Bad Field Mapping API"
437
- {
438
- APIPublisher = 'contoso';
439
- APIGroup = 'business';
440
- APIVersion = 'v1.0';
441
- EntityName = 'badCustomer';
442
- EntitySetName = 'badCustomers';
443
- PageType = API;
444
- SourceTable = Customer;
445
- // ❌ Missing: DelayedInsert = true for better performance
446
- // ❌ Missing: ODataKeyFields specification
447
-
448
- layout
449
- {
450
- area(Content)
451
- {
452
- repeater(Group)
453
- {
454
- // ❌ Wrong: Using database field names as API field names
455
- field("No."; Rec."No.") { }
456
- field("Customer Posting Group"; Rec."Customer Posting Group") { }
457
-
458
- // ❌ Wrong: No relationship handling for lookups
459
- field("Currency Code"; Rec."Currency Code")
460
- {
461
- // ❌ Missing: Proper relationship mapping to Currency entity
462
- }
463
-
464
- // ❌ Wrong: Exposing sensitive data without security checks
465
- field("Credit Limit (LCY)"; Rec."Credit Limit (LCY)") { }
466
-
467
- // ❌ Wrong: Exposing FlowFields without consideration for performance
468
- field(Balance; Rec.Balance) { }
469
-
470
- // ❌ Wrong: No proper validation or error handling
471
- field("Payment Terms Code"; Rec."Payment Terms Code")
472
- {
473
- trigger OnValidate()
474
- begin
475
- // ❌ No validation - could cause data integrity issues
476
- end;
477
- }
478
- }
479
- }
480
- }
481
-
482
- // ❌ Missing: Proper trigger implementations
483
- // ❌ Missing: Security and permission checks
484
- // ❌ Missing: Error handling and validation
485
- }
486
-
487
- // ❌ ANTI-PATTERN: Performance-killing implementation
488
- page 50198 "Performance Bad API"
489
- {
490
- APIPublisher = 'contoso';
491
- APIGroup = 'business';
492
- APIVersion = 'v1.0';
493
- EntityName = 'slowCustomer';
494
- EntitySetName = 'slowCustomers';
495
- PageType = API;
496
- SourceTable = Customer;
497
- ODataKeyFields = SystemId;
498
-
499
- layout
500
- {
501
- area(Content)
502
- {
503
- repeater(Group)
504
- {
505
- field(id; Rec.SystemId) { }
506
- field(number; Rec."No.") { }
507
- field(name; Rec.Name) { }
508
-
509
- // ❌ Performance killer: Calculating complex data on every record
510
- field(totalSales; GetTotalSales())
511
- {
512
- Caption = 'Total Sales';
513
- }
514
-
515
- // ❌ Performance killer: Multiple FlowFields
516
- field(balance; Rec.Balance) { }
517
- field(balanceLCY; Rec."Balance (LCY)") { }
518
- field(salesLCY; Rec."Sales (LCY)") { }
519
-
520
- // ❌ Performance killer: Related table lookups in field triggers
521
- field(salesPersonName; GetSalesPersonName())
522
- {
523
- Caption = 'Sales Person Name';
524
- }
525
- }
526
- }
527
- }
528
-
529
- // ❌ Performance killers: Heavy calculations in field methods
530
- local procedure GetTotalSales(): Decimal
531
- var
532
- CustLedgerEntry: Record "Cust. Ledger Entry";
533
- TotalAmount: Decimal;
534
- begin
535
- // ❌ Expensive calculation on every record load
536
- CustLedgerEntry.SetRange("Customer No.", Rec."No.");
537
- CustLedgerEntry.CalcSums("Sales (LCY)");
538
- exit(CustLedgerEntry."Sales (LCY)");
539
- end;
540
-
541
- local procedure GetSalesPersonName(): Text
542
- var
543
- SalespersonPurchaser: Record "Salesperson/Purchaser";
544
- begin
545
- // ❌ Database lookup on every record display
546
- if SalespersonPurchaser.Get(Rec."Salesperson Code") then
547
- exit(SalespersonPurchaser.Name)
548
- else
549
- exit('');
550
- end;
551
- }
552
- ```
553
-
554
- ## Correct Implementation Patterns
555
-
556
- ```al
557
- // ✅ CORRECT: Optimized API with proper structure
558
- page 50197 "Optimized Customer API"
559
- {
560
- APIPublisher = 'contoso';
561
- APIGroup = 'business';
562
- APIVersion = 'v1.0';
563
- EntityName = 'customer';
564
- EntitySetName = 'customers';
565
- PageType = API;
566
- Caption = 'Customer API';
567
- SourceTable = Customer;
568
- DelayedInsert = true;
569
- ODataKeyFields = SystemId;
570
-
571
- layout
572
- {
573
- area(Content)
574
- {
575
- repeater(GroupName)
576
- {
577
- field(id; Rec.SystemId)
578
- {
579
- Caption = 'Id';
580
- Editable = false;
581
- }
582
- field(number; Rec."No.")
583
- {
584
- Caption = 'Number';
585
- }
586
- field(displayName; Rec.Name)
587
- {
588
- Caption = 'Display Name';
589
- }
590
- field(email; Rec."E-Mail")
591
- {
592
- Caption = 'Email';
593
- }
594
- field(phoneNumber; Rec."Phone No.")
595
- {
596
- Caption = 'Phone Number';
597
- }
598
- field(blocked; Rec.Blocked)
599
- {
600
- Caption = 'Blocked';
601
- }
602
- // ✅ Calculated field with efficient loading
603
- field(salesPersonName; SalesPersonNameVar)
604
- {
605
- Caption = 'Sales Person Name';
606
- Editable = false;
607
- }
608
- field(lastModifiedDateTime; Rec.SystemModifiedAt)
609
- {
610
- Caption = 'Last Modified Date Time';
611
- Editable = false;
612
- }
613
- }
614
- }
615
- }
616
-
617
- var
618
- SalesPersonNameVar: Text[50];
619
-
620
- trigger OnAfterGetRecord()
621
- begin
622
- LoadRelatedData();
623
- end;
624
-
625
- local procedure LoadRelatedData()
626
- var
627
- SalespersonPurchaser: Record "Salesperson/Purchaser";
628
- begin
629
- // ✅ Efficient: Single lookup per record
630
- if Rec."Salesperson Code" <> '' then begin
631
- if SalespersonPurchaser.Get(Rec."Salesperson Code") then
632
- SalesPersonNameVar := SalespersonPurchaser.Name
633
- else
634
- SalesPersonNameVar := '';
635
- end else
636
- SalesPersonNameVar := '';
637
- end;
638
- }
639
- ```
640
-
641
- ## API Implementation Guidelines
642
-
643
- ### Essential API Page Configuration
644
- 1. **Required Properties**: APIPublisher, APIGroup, APIVersion, EntityName, EntitySetName, PageType = API
645
- 2. **Performance Settings**: DelayedInsert = true, ODataKeyFields = SystemId
646
- 3. **Field Naming**: Use camelCase for API field names, provide meaningful captions
647
- 4. **Relationship Handling**: Use SystemId for entity relationships, implement proper validation
648
-
649
- ### Security Best Practices
650
- 1. **Permission Integration**: Use Permissions property and implement trigger-based permission checks
651
- 2. **Data Filtering**: Apply user-specific filters in OnAfterGetRecord trigger
652
- 3. **Sensitive Data**: Implement conditional loading based on user permissions
653
- 4. **Validation**: Add proper validation in field triggers and record triggers
654
-
655
- ### Performance Optimization
656
- 1. **Avoid FlowFields**: Calculate values in triggers instead of using FlowFields directly
657
- 2. **Efficient Queries**: Use SourceTableView to apply optimal filters
658
- 3. **Batch Loading**: Load related data efficiently in OnAfterGetRecord
659
- 4. **Conditional Processing**: Only perform expensive operations when necessary
660
-
661
- ### Error Handling
662
- 1. **Validation Errors**: Provide clear, actionable error messages
663
- 2. **Permission Errors**: Return appropriate HTTP status codes for authorization issues
664
- 3. **Business Logic**: Respect Business Central validation rules and constraints
665
- 4. **Data Integrity**: Ensure API operations maintain data consistency