bc-code-intelligence-mcp 1.1.1

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 (638) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +107 -0
  3. package/dist/cache/cache-manager.d.ts +95 -0
  4. package/dist/cache/cache-manager.d.ts.map +1 -0
  5. package/dist/cache/cache-manager.js +328 -0
  6. package/dist/cache/cache-manager.js.map +1 -0
  7. package/dist/cli/bc-code-intel-cli.d.ts +9 -0
  8. package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
  9. package/dist/cli/bc-code-intel-cli.js +441 -0
  10. package/dist/cli/bc-code-intel-cli.js.map +1 -0
  11. package/dist/config/config-loader.d.ts +21 -0
  12. package/dist/config/config-loader.d.ts.map +1 -0
  13. package/dist/config/config-loader.js +402 -0
  14. package/dist/config/config-loader.js.map +1 -0
  15. package/dist/config/config-validator.d.ts +84 -0
  16. package/dist/config/config-validator.d.ts.map +1 -0
  17. package/dist/config/config-validator.js +604 -0
  18. package/dist/config/config-validator.js.map +1 -0
  19. package/dist/config/test-config-loader.d.ts +10 -0
  20. package/dist/config/test-config-loader.d.ts.map +1 -0
  21. package/dist/config/test-config-loader.js +135 -0
  22. package/dist/config/test-config-loader.js.map +1 -0
  23. package/dist/config/test-enhanced-layer-service.d.ts +7 -0
  24. package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
  25. package/dist/config/test-enhanced-layer-service.js +104 -0
  26. package/dist/config/test-enhanced-layer-service.js.map +1 -0
  27. package/dist/config/test-git-layer.d.ts +7 -0
  28. package/dist/config/test-git-layer.d.ts.map +1 -0
  29. package/dist/config/test-git-layer.js +68 -0
  30. package/dist/config/test-git-layer.js.map +1 -0
  31. package/dist/dev/hot-reload.d.ts +91 -0
  32. package/dist/dev/hot-reload.d.ts.map +1 -0
  33. package/dist/dev/hot-reload.js +358 -0
  34. package/dist/dev/hot-reload.js.map +1 -0
  35. package/dist/index.d.ts +57 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +673 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/layers/base-layer.d.ts +83 -0
  40. package/dist/layers/base-layer.d.ts.map +1 -0
  41. package/dist/layers/base-layer.js +166 -0
  42. package/dist/layers/base-layer.js.map +1 -0
  43. package/dist/layers/embedded-layer.d.ts +53 -0
  44. package/dist/layers/embedded-layer.d.ts.map +1 -0
  45. package/dist/layers/embedded-layer.js +238 -0
  46. package/dist/layers/embedded-layer.js.map +1 -0
  47. package/dist/layers/git-layer.d.ts +54 -0
  48. package/dist/layers/git-layer.d.ts.map +1 -0
  49. package/dist/layers/git-layer.js +369 -0
  50. package/dist/layers/git-layer.js.map +1 -0
  51. package/dist/layers/index.d.ts +12 -0
  52. package/dist/layers/index.d.ts.map +1 -0
  53. package/dist/layers/index.js +11 -0
  54. package/dist/layers/index.js.map +1 -0
  55. package/dist/layers/layer-service.d.ts +129 -0
  56. package/dist/layers/layer-service.d.ts.map +1 -0
  57. package/dist/layers/layer-service.js +570 -0
  58. package/dist/layers/layer-service.js.map +1 -0
  59. package/dist/layers/project-layer.d.ts +50 -0
  60. package/dist/layers/project-layer.d.ts.map +1 -0
  61. package/dist/layers/project-layer.js +256 -0
  62. package/dist/layers/project-layer.js.map +1 -0
  63. package/dist/monitoring/production-monitor.d.ts +148 -0
  64. package/dist/monitoring/production-monitor.d.ts.map +1 -0
  65. package/dist/monitoring/production-monitor.js +463 -0
  66. package/dist/monitoring/production-monitor.js.map +1 -0
  67. package/dist/performance/performance-monitor.d.ts +99 -0
  68. package/dist/performance/performance-monitor.d.ts.map +1 -0
  69. package/dist/performance/performance-monitor.js +253 -0
  70. package/dist/performance/performance-monitor.js.map +1 -0
  71. package/dist/sdk/bc-code-intel-client.d.ts +175 -0
  72. package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
  73. package/dist/sdk/bc-code-intel-client.js +380 -0
  74. package/dist/sdk/bc-code-intel-client.js.map +1 -0
  75. package/dist/search/intelligent-search.d.ts +97 -0
  76. package/dist/search/intelligent-search.d.ts.map +1 -0
  77. package/dist/search/intelligent-search.js +355 -0
  78. package/dist/search/intelligent-search.js.map +1 -0
  79. package/dist/security/access-control.d.ts +110 -0
  80. package/dist/security/access-control.d.ts.map +1 -0
  81. package/dist/security/access-control.js +353 -0
  82. package/dist/security/access-control.js.map +1 -0
  83. package/dist/services/code-analysis-service.d.ts +72 -0
  84. package/dist/services/code-analysis-service.d.ts.map +1 -0
  85. package/dist/services/code-analysis-service.js +811 -0
  86. package/dist/services/code-analysis-service.js.map +1 -0
  87. package/dist/services/knowledge-service.d.ts +91 -0
  88. package/dist/services/knowledge-service.d.ts.map +1 -0
  89. package/dist/services/knowledge-service.js +370 -0
  90. package/dist/services/knowledge-service.js.map +1 -0
  91. package/dist/services/methodology-service.d.ts +91 -0
  92. package/dist/services/methodology-service.d.ts.map +1 -0
  93. package/dist/services/methodology-service.js +408 -0
  94. package/dist/services/methodology-service.js.map +1 -0
  95. package/dist/services/workflow-service.d.ts +132 -0
  96. package/dist/services/workflow-service.d.ts.map +1 -0
  97. package/dist/services/workflow-service.js +277 -0
  98. package/dist/services/workflow-service.js.map +1 -0
  99. package/dist/setup/post-install.d.ts +12 -0
  100. package/dist/setup/post-install.d.ts.map +1 -0
  101. package/dist/setup/post-install.js +81 -0
  102. package/dist/setup/post-install.js.map +1 -0
  103. package/dist/streamlined-handlers.d.ts +51 -0
  104. package/dist/streamlined-handlers.d.ts.map +1 -0
  105. package/dist/streamlined-handlers.js +287 -0
  106. package/dist/streamlined-handlers.js.map +1 -0
  107. package/dist/streamlined-tools.d.ts +316 -0
  108. package/dist/streamlined-tools.d.ts.map +1 -0
  109. package/dist/streamlined-tools.js +189 -0
  110. package/dist/streamlined-tools.js.map +1 -0
  111. package/dist/test-enhanced-mcp-server.d.ts +7 -0
  112. package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
  113. package/dist/test-enhanced-mcp-server.js +177 -0
  114. package/dist/test-enhanced-mcp-server.js.map +1 -0
  115. package/dist/types/bc-knowledge.d.ts +294 -0
  116. package/dist/types/bc-knowledge.d.ts.map +1 -0
  117. package/dist/types/bc-knowledge.js +44 -0
  118. package/dist/types/bc-knowledge.js.map +1 -0
  119. package/dist/types/config-types.d.ts +180 -0
  120. package/dist/types/config-types.d.ts.map +1 -0
  121. package/dist/types/config-types.js +104 -0
  122. package/dist/types/config-types.js.map +1 -0
  123. package/dist/types/index.d.ts +5 -0
  124. package/dist/types/index.d.ts.map +1 -0
  125. package/dist/types/index.js +7 -0
  126. package/dist/types/index.js.map +1 -0
  127. package/dist/types/layer-types.d.ts +171 -0
  128. package/dist/types/layer-types.d.ts.map +1 -0
  129. package/dist/types/layer-types.js +27 -0
  130. package/dist/types/layer-types.js.map +1 -0
  131. package/dist/types/persona-types.d.ts +77 -0
  132. package/dist/types/persona-types.d.ts.map +1 -0
  133. package/dist/types/persona-types.js +341 -0
  134. package/dist/types/persona-types.js.map +1 -0
  135. package/dist/utils/path-utils.d.ts +5 -0
  136. package/dist/utils/path-utils.d.ts.map +1 -0
  137. package/dist/utils/path-utils.js +14 -0
  138. package/dist/utils/path-utils.js.map +1 -0
  139. package/dist/workflows/domain-workflows.d.ts +8 -0
  140. package/dist/workflows/domain-workflows.d.ts.map +1 -0
  141. package/dist/workflows/domain-workflows.js +360 -0
  142. package/dist/workflows/domain-workflows.js.map +1 -0
  143. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
  144. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
  145. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
  146. package/embedded-knowledge/AGENTS.md +69 -0
  147. package/embedded-knowledge/CONTRIBUTING.md +58 -0
  148. package/embedded-knowledge/LICENSE +21 -0
  149. package/embedded-knowledge/README.md +15 -0
  150. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
  151. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
  152. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
  153. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
  154. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
  155. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
  156. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
  157. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
  158. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
  159. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
  160. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
  161. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
  162. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
  163. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
  164. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
  165. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
  166. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
  167. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
  168. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +295 -0
  169. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
  170. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
  171. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
  172. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
  173. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
  174. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
  175. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
  176. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
  177. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
  178. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
  179. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
  180. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
  181. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
  182. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
  183. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
  184. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
  185. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
  186. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
  187. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
  188. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
  189. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
  190. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
  191. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
  192. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
  193. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
  194. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
  195. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
  196. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
  197. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
  198. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
  199. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
  200. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
  201. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
  202. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
  203. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
  204. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
  205. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
  206. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
  207. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
  208. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
  209. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
  210. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
  211. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
  212. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
  213. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
  214. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
  215. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
  216. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
  217. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
  218. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
  219. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
  220. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
  221. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
  222. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
  223. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
  224. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
  225. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
  226. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
  227. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
  228. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
  229. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
  230. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
  231. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
  232. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
  233. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
  234. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
  235. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
  236. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
  237. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
  238. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
  239. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
  240. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
  241. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
  242. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
  243. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
  244. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
  245. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
  246. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
  247. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
  248. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
  249. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
  250. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
  251. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
  252. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
  253. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
  254. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
  255. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
  256. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
  257. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
  258. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
  259. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
  260. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
  261. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
  262. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
  263. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
  264. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
  265. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
  266. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
  267. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
  268. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
  269. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
  270. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
  271. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
  272. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
  273. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
  274. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
  275. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
  276. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
  277. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
  278. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
  279. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
  280. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
  281. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
  282. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
  283. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
  284. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
  285. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
  286. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
  287. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
  288. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
  289. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
  290. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
  291. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
  292. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
  293. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
  294. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
  295. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
  296. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
  297. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
  298. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
  299. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
  300. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
  301. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
  302. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
  303. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
  304. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
  305. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
  306. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
  307. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
  308. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
  309. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
  310. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
  311. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
  312. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
  313. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
  314. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
  315. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
  316. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
  317. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
  318. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
  319. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
  320. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
  321. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
  322. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
  323. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
  324. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
  325. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
  326. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
  327. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
  328. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
  329. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
  330. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
  331. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
  332. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
  333. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
  334. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
  335. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
  336. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
  337. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
  338. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
  339. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
  340. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
  341. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
  342. package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
  343. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
  344. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
  345. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
  346. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
  347. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
  348. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
  349. package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
  350. package/embedded-knowledge/indexes/domain-catalog.json +106 -0
  351. package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
  352. package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
  353. package/embedded-knowledge/indexes/tags/access-control.json +1 -0
  354. package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
  355. package/embedded-knowledge/indexes/tags/actions.json +1 -0
  356. package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
  357. package/embedded-knowledge/indexes/tags/advanced.json +1 -0
  358. package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
  359. package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
  360. package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
  361. package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
  362. package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
  363. package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
  364. package/embedded-knowledge/indexes/tags/analytics.json +1 -0
  365. package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
  366. package/embedded-knowledge/indexes/tags/api-design.json +1 -0
  367. package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
  368. package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
  369. package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
  370. package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
  371. package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
  372. package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
  373. package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
  374. package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
  375. package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
  376. package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
  377. package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
  378. package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
  379. package/embedded-knowledge/indexes/tags/api.json +1 -0
  380. package/embedded-knowledge/indexes/tags/architecture.json +1 -0
  381. package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
  382. package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
  383. package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
  384. package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
  385. package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
  386. package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
  387. package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
  388. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
  389. package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
  390. package/embedded-knowledge/indexes/tags/binding.json +1 -0
  391. package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
  392. package/embedded-knowledge/indexes/tags/blocks.json +1 -0
  393. package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
  394. package/embedded-knowledge/indexes/tags/branching.json +1 -0
  395. package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
  396. package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
  397. package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
  398. package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
  399. package/embedded-knowledge/indexes/tags/business-process.json +1 -0
  400. package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
  401. package/embedded-knowledge/indexes/tags/caching.json +1 -0
  402. package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
  403. package/embedded-knowledge/indexes/tags/case.json +1 -0
  404. package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
  405. package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
  406. package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
  407. package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
  408. package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
  409. package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
  410. package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
  411. package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
  412. package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
  413. package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
  414. package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
  415. package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
  416. package/embedded-knowledge/indexes/tags/code-style.json +1 -0
  417. package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
  418. package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
  419. package/embedded-knowledge/indexes/tags/comments.json +1 -0
  420. package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
  421. package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
  422. package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
  423. package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
  424. package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
  425. package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
  426. package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
  427. package/embedded-knowledge/indexes/tags/conditional.json +1 -0
  428. package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
  429. package/embedded-knowledge/indexes/tags/consistency.json +1 -0
  430. package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
  431. package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
  432. package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
  433. package/embedded-knowledge/indexes/tags/correlation.json +1 -0
  434. package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
  435. package/embedded-knowledge/indexes/tags/data-access.json +1 -0
  436. package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
  437. package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
  438. package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
  439. package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
  440. package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
  441. package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
  442. package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
  443. package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
  444. package/embedded-knowledge/indexes/tags/database.json +1 -0
  445. package/embedded-knowledge/indexes/tags/debugging.json +1 -0
  446. package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
  447. package/embedded-knowledge/indexes/tags/declaration.json +1 -0
  448. package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
  449. package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
  450. package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
  451. package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
  452. package/embedded-knowledge/indexes/tags/deployment.json +1 -0
  453. package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
  454. package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
  455. package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
  456. package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
  457. package/embedded-knowledge/indexes/tags/documentation.json +1 -0
  458. package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
  459. package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
  460. package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
  461. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
  462. package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
  463. package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
  464. package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
  465. package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
  466. package/embedded-knowledge/indexes/tags/error-text.json +1 -0
  467. package/embedded-knowledge/indexes/tags/etag.json +1 -0
  468. package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
  469. package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
  470. package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
  471. package/embedded-knowledge/indexes/tags/events.json +1 -0
  472. package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
  473. package/embedded-knowledge/indexes/tags/expressions.json +1 -0
  474. package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
  475. package/embedded-knowledge/indexes/tags/extensions.json +1 -0
  476. package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
  477. package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
  478. package/embedded-knowledge/indexes/tags/field-control.json +1 -0
  479. package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
  480. package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
  481. package/embedded-knowledge/indexes/tags/field-state.json +1 -0
  482. package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
  483. package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
  484. package/embedded-knowledge/indexes/tags/fields.json +1 -0
  485. package/embedded-knowledge/indexes/tags/filtering.json +1 -0
  486. package/embedded-knowledge/indexes/tags/filters.json +1 -0
  487. package/embedded-knowledge/indexes/tags/formatting.json +1 -0
  488. package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
  489. package/embedded-knowledge/indexes/tags/http-status.json +1 -0
  490. package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
  491. package/embedded-knowledge/indexes/tags/implementation.json +1 -0
  492. package/embedded-knowledge/indexes/tags/indentation.json +1 -0
  493. package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
  494. package/embedded-knowledge/indexes/tags/indexing.json +1 -0
  495. package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
  496. package/embedded-knowledge/indexes/tags/integration.json +1 -0
  497. package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
  498. package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
  499. package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
  500. package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
  501. package/embedded-knowledge/indexes/tags/isolation.json +1 -0
  502. package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
  503. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
  504. package/embedded-knowledge/indexes/tags/keywords.json +1 -0
  505. package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
  506. package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
  507. package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
  508. package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
  509. package/embedded-knowledge/indexes/tags/localization.json +1 -0
  510. package/embedded-knowledge/indexes/tags/logging.json +1 -0
  511. package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
  512. package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
  513. package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
  514. package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
  515. package/embedded-knowledge/indexes/tags/memory.json +1 -0
  516. package/embedded-knowledge/indexes/tags/message-design.json +1 -0
  517. package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
  518. package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
  519. package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
  520. package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
  521. package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
  522. package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
  523. package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
  524. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
  525. package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
  526. package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
  527. package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
  528. package/embedded-knowledge/indexes/tags/naming.json +1 -0
  529. package/embedded-knowledge/indexes/tags/navigation.json +1 -0
  530. package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
  531. package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
  532. package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
  533. package/embedded-knowledge/indexes/tags/no-series.json +1 -0
  534. package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
  535. package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
  536. package/embedded-knowledge/indexes/tags/odata.json +1 -0
  537. package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
  538. package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
  539. package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
  540. package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
  541. package/embedded-knowledge/indexes/tags/operators.json +1 -0
  542. package/embedded-knowledge/indexes/tags/optimization.json +1 -0
  543. package/embedded-knowledge/indexes/tags/order.json +1 -0
  544. package/embedded-knowledge/indexes/tags/organization.json +1 -0
  545. package/embedded-knowledge/indexes/tags/pages.json +1 -0
  546. package/embedded-knowledge/indexes/tags/parameters.json +1 -0
  547. package/embedded-knowledge/indexes/tags/patterns.json +1 -0
  548. package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
  549. package/embedded-knowledge/indexes/tags/performance.json +1 -0
  550. package/embedded-knowledge/indexes/tags/placement.json +1 -0
  551. package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
  552. package/embedded-knowledge/indexes/tags/posting.json +1 -0
  553. package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
  554. package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
  555. package/embedded-knowledge/indexes/tags/privacy.json +1 -0
  556. package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
  557. package/embedded-knowledge/indexes/tags/production.json +1 -0
  558. package/embedded-knowledge/indexes/tags/productivity.json +1 -0
  559. package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
  560. package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
  561. package/embedded-knowledge/indexes/tags/ranges.json +1 -0
  562. package/embedded-knowledge/indexes/tags/readability.json +1 -0
  563. package/embedded-knowledge/indexes/tags/record-access.json +1 -0
  564. package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
  565. package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
  566. package/embedded-knowledge/indexes/tags/reference.json +1 -0
  567. package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
  568. package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
  569. package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
  570. package/embedded-knowledge/indexes/tags/runtime.json +1 -0
  571. package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
  572. package/embedded-knowledge/indexes/tags/security.json +1 -0
  573. package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
  574. package/embedded-knowledge/indexes/tags/serialization.json +1 -0
  575. package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
  576. package/embedded-knowledge/indexes/tags/session.json +1 -0
  577. package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
  578. package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
  579. package/embedded-knowledge/indexes/tags/sift.json +1 -0
  580. package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
  581. package/embedded-knowledge/indexes/tags/spacing.json +1 -0
  582. package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
  583. package/embedded-knowledge/indexes/tags/standards.json +1 -0
  584. package/embedded-knowledge/indexes/tags/statements.json +1 -0
  585. package/embedded-knowledge/indexes/tags/streaming.json +1 -0
  586. package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
  587. package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
  588. package/embedded-knowledge/indexes/tags/structure.json +1 -0
  589. package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
  590. package/embedded-knowledge/indexes/tags/switch.json +1 -0
  591. package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
  592. package/embedded-knowledge/indexes/tags/syntax.json +1 -0
  593. package/embedded-knowledge/indexes/tags/systemid.json +1 -0
  594. package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
  595. package/embedded-knowledge/indexes/tags/table-events.json +1 -0
  596. package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
  597. package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
  598. package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
  599. package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
  600. package/embedded-knowledge/indexes/tags/template-method.json +1 -0
  601. package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
  602. package/embedded-knowledge/indexes/tags/testfield.json +1 -0
  603. package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
  604. package/embedded-knowledge/indexes/tags/triggers.json +1 -0
  605. package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
  606. package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
  607. package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
  608. package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
  609. package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
  610. package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
  611. package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
  612. package/embedded-knowledge/indexes/tags/validation.json +1 -0
  613. package/embedded-knowledge/indexes/tags/variables.json +1 -0
  614. package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
  615. package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
  616. package/embedded-knowledge/indexes/tags/web-services.json +1 -0
  617. package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
  618. package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
  619. package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
  620. package/embedded-knowledge/indexes/tags/workspace.json +1 -0
  621. package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
  622. package/embedded-knowledge/indexes/topic-relationships.json +128 -0
  623. package/embedded-knowledge/methodologies/index.json +81 -0
  624. package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
  625. package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
  626. package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
  627. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
  628. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
  629. package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
  630. package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
  631. package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
  632. package/embedded-knowledge/methodologies/phases/performance.md +211 -0
  633. package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
  634. package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
  635. package/embedded-knowledge/methodologies/phases/verification.md +146 -0
  636. package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
  637. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
  638. package/package.json +74 -0
@@ -0,0 +1,138 @@
1
+ ---
2
+ title: "Facade Pattern AL Implementation"
3
+ domain: "alex-architect"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["facade-pattern", "structural-patterns", "api-simplification", "complexity-hiding"]
7
+ prerequisites: ["object-orientation-al", "interface-basics", "module-design"]
8
+ samples: "samples/facade-pattern-al.md"
9
+ related_topics: ["complex-facade-patterns", "adapter-pattern-al"]
10
+ ---
11
+
12
+ # Facade Pattern AL Implementation
13
+
14
+ ## Overview
15
+
16
+ The Facade Pattern provides a simplified interface to a complex subsystem, hiding the complexity of multiple interacting objects behind a single, easy-to-use interface. In AL development, facades are essential for creating clean APIs and managing complex business logic interactions.
17
+
18
+ **Key Benefit**: Simplifies client code by providing a unified interface to complex subsystems while maintaining loose coupling and flexibility.
19
+
20
+ ## Core Facade Architecture
21
+
22
+ ### Unified Interface Design
23
+ Create single interfaces that encapsulate complex operations across multiple AL objects, procedures, and business logic components.
24
+
25
+ ### Complexity Encapsulation
26
+ Hide implementation details of complex subsystems behind simple, focused facade methods that handle coordination and orchestration.
27
+
28
+ ### Dependency Management
29
+ Manage dependencies between multiple subsystem components within the facade, preventing clients from needing to understand complex relationships.
30
+
31
+ ## Implementation Strategies
32
+
33
+ ### Business Process Facades
34
+ Design facades that encapsulate complete business processes, coordinating multiple tables, pages, and codeunits to provide single-operation interfaces.
35
+
36
+ ### Data Access Facades
37
+ Implement facades that simplify complex data access patterns, hiding join operations, filtering logic, and data transformation from client code.
38
+
39
+ ### Integration Facades
40
+ Create facades for external system integration that hide protocol details, authentication, and error handling behind simple method calls.
41
+
42
+ ## AL-Specific Patterns
43
+
44
+ ### Codeunit Facade Implementation
45
+ Use codeunits as facade implementations that coordinate multiple AL objects while providing clean, procedure-based interfaces.
46
+
47
+ ### Table Facade Extensions
48
+ Extend table objects with facade methods that encapsulate complex business logic while maintaining data integrity and validation rules.
49
+
50
+ ### Page Integration Facades
51
+ Design page-level facades that coordinate multiple page elements and actions to provide simplified user interaction patterns.
52
+
53
+ ## Advanced Facade Techniques
54
+
55
+ ### Layered Facade Architecture
56
+ Implement multiple facade layers that provide different levels of abstraction for different types of clients and usage scenarios.
57
+
58
+ ### Context-Aware Facades
59
+ Design facades that adapt their behavior based on user context, permissions, or system configuration while maintaining consistent interfaces.
60
+
61
+ ### Event-Integrated Facades
62
+ Integrate facade operations with AL event systems to provide notifications and enable extensibility without facade modification.
63
+
64
+ ## Performance Considerations
65
+
66
+ ### Operation Optimization
67
+ Optimize facade operations to minimize unnecessary object instantiation and method calls while maintaining interface simplicity.
68
+
69
+ ### Caching Integration
70
+ Implement intelligent caching within facades to improve performance for frequently accessed complex operations.
71
+
72
+ ### Resource Management
73
+ Design facades to efficiently manage resources and connections, especially for integration and external system access scenarios.
74
+
75
+ ## Error Handling and Validation
76
+
77
+ ### Unified Error Management
78
+ - Implement consistent error handling across all facade operations
79
+ - Provide meaningful error messages that abstract subsystem complexity
80
+ - Support error recovery and retry mechanisms within facade logic
81
+ - Maintain error logging and diagnostics for troubleshooting
82
+
83
+ ### Input Validation
84
+ - Centralize validation logic within facade methods
85
+ - Provide comprehensive parameter validation before subsystem operations
86
+ - Support business rule validation across multiple subsystem components
87
+ - Enable early error detection to prevent inconsistent states
88
+
89
+ ## Best Practices
90
+
91
+ ### Design Principles
92
+ - Keep facade interfaces focused and cohesive
93
+ - Implement facades at appropriate abstraction levels for target clients
94
+ - Maintain clear separation between facade logic and subsystem implementation
95
+ - Design for both simplicity and extensibility
96
+
97
+ ### Documentation Standards
98
+ - Provide clear documentation for facade capabilities and limitations
99
+ - Include examples of common usage patterns and scenarios
100
+ - Document any performance characteristics or constraints
101
+ - Maintain clear guidance for when to use facade versus direct subsystem access
102
+
103
+ ## Integration Patterns
104
+
105
+ ### Service Layer Integration
106
+ Integrate facades with service layer patterns to provide business service interfaces that coordinate multiple business capabilities.
107
+
108
+ ### API Gateway Patterns
109
+ Use facades as API gateways that provide external access to internal Business Central capabilities with appropriate security and validation.
110
+
111
+ ### Microservice Coordination
112
+ Design facades that coordinate microservice interactions while providing unified interfaces for complex business operations.
113
+
114
+ ## Testing Strategies
115
+
116
+ ### Facade Testing
117
+ - Implement comprehensive testing for facade operations and edge cases
118
+ - Mock subsystem dependencies to enable isolated facade testing
119
+ - Test error handling and recovery scenarios thoroughly
120
+ - Validate facade performance under different load conditions
121
+
122
+ ### Integration Testing
123
+ - Test complete end-to-end scenarios through facade interfaces
124
+ - Validate subsystem coordination and data consistency
125
+ - Test facade behavior under various system conditions and configurations
126
+ - Ensure facade operations maintain transactional integrity
127
+
128
+ ## Common Pitfalls
129
+
130
+ ### Over-Simplification
131
+ Avoid over-simplifying facades to the point where necessary functionality becomes inaccessible to clients requiring more control.
132
+
133
+ ### Facade Bloat
134
+ Prevent facades from becoming bloated with too many responsibilities that reduce their effectiveness and maintainability.
135
+
136
+ *Complete facade implementation examples: samples/facade-pattern-al.md*
137
+ *Complex facade patterns: complex-facade-patterns.md*
138
+ *Related structural patterns: adapter-pattern-al.md*
@@ -0,0 +1,79 @@
1
+ ---
2
+ title: "AL Facade Pattern for External API Integration"
3
+ domain: "alex-architect"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["facade-pattern", "api-integration", "abstraction", "maintainability"]
7
+ samples: "samples/facade-pattern.md"
8
+ type: improvement-pattern
9
+ category: "architectural-patterns"
10
+ pattern_type: good
11
+ severity: medium
12
+ impact_level: medium
13
+ improvement_suggestion: "Use facade pattern to simplify external API integration"
14
+ implementation_steps: ["create-facade-codeunit", "abstract-api-calls", "centralize-error-handling"]
15
+ validation_criteria: ["single-entry-point", "hidden-complexity", "clean-interfaces"]
16
+ technical_areas: ["al-code", "integration"]
17
+ ---
18
+
19
+ # AL Facade Pattern for External API Integration
20
+
21
+ ## Overview
22
+
23
+ The facade pattern creates a unified, simplified interface to complex external API systems. Instead of exposing raw API complexity throughout your AL codebase, the facade provides a clean business-focused entry point that handles all technical implementation details internally.
24
+
25
+ **Core Principle**: One dedicated codeunit acts as the single gateway to external systems, abstracting authentication, error handling, retry logic, and data transformation.
26
+
27
+ ## Strategic Framework
28
+
29
+ ### When to Apply Facade Pattern
30
+ - **Multiple API endpoints** required for single business operation
31
+ - **Complex authentication flows** (OAuth, JWT, multi-step auth)
32
+ - **Inconsistent external API responses** requiring normalization
33
+ - **Rate limiting and retry logic** needed across multiple calls
34
+ - **Future API changes** anticipated requiring isolation from business logic
35
+
36
+ ### Architecture Benefits
37
+ - **Dependency Isolation**: External system changes don't cascade through codebase
38
+ - **Simplified Testing**: Clear boundaries for mocking external dependencies
39
+ - **Centralized Logic**: Authentication, error handling, and retry patterns in one place
40
+ - **Business Focus**: Consuming objects work with business concepts, not technical APIs
41
+
42
+ ## Architecture Focus
43
+
44
+ ### Facade Structure
45
+ Create a dedicated codeunit containing:
46
+ - **Public Methods**: Business-focused operations (GetCustomerData, SyncOrderStatus)
47
+ - **Private Methods**: Technical API calls, authentication, error handling
48
+ - **Internal State**: Connection management, token caching, configuration
49
+
50
+ ### Interface Design Principles
51
+ - **Business Language**: Method names reflect business operations, not API endpoints
52
+ - **Simplified Parameters**: Hide complex API parameter mapping from consumers
53
+ - **Consistent Returns**: Standardized response patterns regardless of underlying API variations
54
+ - **Error Abstraction**: Convert technical errors to business-meaningful messages
55
+
56
+ ## Best Practices
57
+
58
+ ### Implementation Guidelines
59
+ - **Single Responsibility**: Each facade handles one external system or related service group
60
+ - **Stateless Design**: Avoid maintaining connection state between method calls
61
+ - **Configuration Driven**: Use setup tables for URLs, credentials, and API versions
62
+ - **Comprehensive Logging**: Log all external interactions for troubleshooting
63
+
64
+ ### Error Handling Strategy
65
+ - **Graceful Degradation**: Provide fallback behaviors when external systems unavailable
66
+ - **Retry Logic**: Implement exponential backoff for transient failures
67
+ - **Circuit Breaker**: Prevent cascading failures when external system is down
68
+ - **User-Friendly Messages**: Translate technical errors to actionable business guidance
69
+
70
+ ## Anti-Patterns
71
+
72
+ ### Avoid These Approaches
73
+ - **Direct API Calls** scattered throughout business logic objects
74
+ - **Shared HTTP Client** instances without proper abstraction layer
75
+ - **Exposed Technical Details** like HTTP status codes in business methods
76
+ - **Mixed Responsibilities** combining business logic with API communication
77
+
78
+ **Implementation Reference**: see samples/facade-pattern.md
79
+ **Related Patterns**: error-handling-patterns.md, api-authentication-patterns.md
@@ -0,0 +1,280 @@
1
+ # API Delegate Operation Pattern - AL Code Examples
2
+
3
+ This sample demonstrates implementing delegate operations for extensible APIs in Business Central.
4
+
5
+ ## Basic Delegate Interface
6
+
7
+ ```al
8
+ // Define delegate operation interface
9
+ interface IDelegateOperation
10
+ {
11
+ procedure Execute(var Parameters: Dictionary of [Text, Variant]): Boolean;
12
+ procedure GetName(): Text[50];
13
+ procedure GetDescription(): Text[250];
14
+ }
15
+ ```
16
+
17
+ ## Simple Delegate Implementation
18
+
19
+ ```al
20
+ // Customer validation delegate example
21
+ codeunit 50100 "Customer Validation Delegate" implements IDelegateOperation
22
+ {
23
+ procedure Execute(var Parameters: Dictionary of [Text, Variant]): Boolean
24
+ var
25
+ Customer: Record Customer;
26
+ CustomerNo: Code[20];
27
+ ValidationResult: Boolean;
28
+ begin
29
+ // Extract parameters
30
+ if not Parameters.Get('CustomerNo', CustomerNo) then
31
+ exit(false);
32
+
33
+ if not Customer.Get(CustomerNo) then
34
+ exit(false);
35
+
36
+ // Custom validation logic
37
+ ValidationResult := ValidateCustomerForOperation(Customer);
38
+ Parameters.Set('IsValid', ValidationResult);
39
+
40
+ exit(ValidationResult);
41
+ end;
42
+
43
+ procedure GetName(): Text[50]
44
+ begin
45
+ exit('CUSTOMER_VALIDATION');
46
+ end;
47
+
48
+ procedure GetDescription(): Text[250]
49
+ begin
50
+ exit('Validates customer eligibility for business operations');
51
+ end;
52
+
53
+ local procedure ValidateCustomerForOperation(Customer: Record Customer): Boolean
54
+ begin
55
+ // Business logic for customer validation
56
+ exit((Customer.Blocked = Customer.Blocked::" ") and (Customer."Credit Limit (LCY)" > 0));
57
+ end;
58
+ }
59
+ ```
60
+
61
+ ## Delegate Registry System
62
+
63
+ ```al
64
+ // Central delegate registry for operation management
65
+ codeunit 50101 "Delegate Registry"
66
+ {
67
+ var
68
+ DelegateOperations: Dictionary of [Text, Interface IDelegateOperation];
69
+
70
+ procedure RegisterDelegate(OperationType: Text[50]; DelegateOperation: Interface IDelegateOperation)
71
+ begin
72
+ DelegateOperations.Set(OperationType, DelegateOperation);
73
+ end;
74
+
75
+ procedure ExecuteDelegate(OperationType: Text[50]; var Parameters: Dictionary of [Text, Variant]): Boolean
76
+ var
77
+ DelegateOperation: Interface IDelegateOperation;
78
+ begin
79
+ if not DelegateOperations.Get(OperationType, DelegateOperation) then
80
+ exit(false);
81
+
82
+ exit(DelegateOperation.Execute(Parameters));
83
+ end;
84
+
85
+ procedure GetAvailableDelegates(): List of [Text]
86
+ var
87
+ AvailableTypes: List of [Text];
88
+ OperationType: Text;
89
+ begin
90
+ foreach OperationType in DelegateOperations.Keys do
91
+ AvailableTypes.Add(OperationType);
92
+
93
+ exit(AvailableTypes);
94
+ end;
95
+ }
96
+ ```
97
+
98
+ ## API with Delegate Operations
99
+
100
+ ```al
101
+ // Sales API that uses delegate operations for extensibility
102
+ page 50100 "Sales API"
103
+ {
104
+ PageType = API;
105
+ APIPublisher = 'mycompany';
106
+ APIGroup = 'sales';
107
+ APIVersion = 'v1.0';
108
+ EntityName = 'salesOrder';
109
+ EntitySetName = 'salesOrders';
110
+ SourceTable = "Sales Header";
111
+
112
+ layout
113
+ {
114
+ area(Content)
115
+ {
116
+ repeater(Group)
117
+ {
118
+ field(documentNo; Rec."No.")
119
+ {
120
+ ApplicationArea = All;
121
+ }
122
+ field(customerNo; Rec."Sell-to Customer No.")
123
+ {
124
+ ApplicationArea = All;
125
+ }
126
+ field(status; Rec.Status)
127
+ {
128
+ ApplicationArea = All;
129
+ }
130
+ }
131
+ }
132
+ }
133
+
134
+ trigger OnInsertRecord(BelowxRec: Boolean): Boolean
135
+ var
136
+ DelegateRegistry: Codeunit "Delegate Registry";
137
+ Parameters: Dictionary of [Text, Variant];
138
+ ValidationResult: Boolean;
139
+ begin
140
+ // Use delegate for customer validation
141
+ Parameters.Set('CustomerNo', Rec."Sell-to Customer No.");
142
+ ValidationResult := DelegateRegistry.ExecuteDelegate('CUSTOMER_VALIDATION', Parameters);
143
+
144
+ if not ValidationResult then
145
+ Error('Customer validation failed through delegate operation');
146
+
147
+ exit(true);
148
+ end;
149
+ }
150
+ ```
151
+
152
+ ## Advanced Delegate Chain
153
+
154
+ ```al
155
+ // Chain multiple delegates for complex operations
156
+ codeunit 50102 "Multi-Step Delegate Chain"
157
+ {
158
+ var
159
+ DelegateRegistry: Codeunit "Delegate Registry";
160
+
161
+ procedure ExecuteChain(ChainName: Text[50]; var Parameters: Dictionary of [Text, Variant]): Boolean
162
+ var
163
+ ChainSteps: List of [Text];
164
+ StepName: Text;
165
+ StepResult: Boolean;
166
+ begin
167
+ ChainSteps := GetChainSteps(ChainName);
168
+
169
+ foreach StepName in ChainSteps do begin
170
+ StepResult := DelegateRegistry.ExecuteDelegate(StepName, Parameters);
171
+ if not StepResult then begin
172
+ Parameters.Set('FailedStep', StepName);
173
+ exit(false);
174
+ end;
175
+ end;
176
+
177
+ exit(true);
178
+ end;
179
+
180
+ local procedure GetChainSteps(ChainName: Text[50]): List of [Text]
181
+ var
182
+ Steps: List of [Text];
183
+ begin
184
+ case ChainName of
185
+ 'SALES_VALIDATION':
186
+ begin
187
+ Steps.Add('CUSTOMER_VALIDATION');
188
+ Steps.Add('INVENTORY_CHECK');
189
+ Steps.Add('CREDIT_APPROVAL');
190
+ end;
191
+ 'PURCHASE_VALIDATION':
192
+ begin
193
+ Steps.Add('VENDOR_VALIDATION');
194
+ Steps.Add('BUDGET_CHECK');
195
+ Steps.Add('APPROVAL_WORKFLOW');
196
+ end;
197
+ end;
198
+
199
+ exit(Steps);
200
+ end;
201
+ }
202
+ ```
203
+
204
+ ## Error Handling Delegate
205
+
206
+ ```al
207
+ // Delegate with comprehensive error handling
208
+ codeunit 50103 "Error Handling Delegate" implements IDelegateOperation
209
+ {
210
+ procedure Execute(var Parameters: Dictionary of [Text, Variant]): Boolean
211
+ var
212
+ ErrorMessages: List of [Text];
213
+ HasErrors: Boolean;
214
+ begin
215
+ HasErrors := false;
216
+ Clear(ErrorMessages);
217
+
218
+ // Perform validation with error collection
219
+ if not ValidateRequiredParameters(Parameters, ErrorMessages) then
220
+ HasErrors := true;
221
+
222
+ if not ValidateBusinessRules(Parameters, ErrorMessages) then
223
+ HasErrors := true;
224
+
225
+ // Set error information in parameters
226
+ Parameters.Set('HasErrors', HasErrors);
227
+ Parameters.Set('ErrorMessages', ErrorMessages);
228
+
229
+ exit(not HasErrors);
230
+ end;
231
+
232
+ procedure GetName(): Text[50]
233
+ begin
234
+ exit('ERROR_HANDLING');
235
+ end;
236
+
237
+ procedure GetDescription(): Text[250]
238
+ begin
239
+ exit('Comprehensive error handling and validation delegate');
240
+ end;
241
+
242
+ local procedure ValidateRequiredParameters(Parameters: Dictionary of [Text, Variant]; var ErrorMessages: List of [Text]): Boolean
243
+ var
244
+ IsValid: Boolean;
245
+ begin
246
+ IsValid := true;
247
+
248
+ if not Parameters.ContainsKey('CustomerNo') then begin
249
+ ErrorMessages.Add('Missing required parameter: CustomerNo');
250
+ IsValid := false;
251
+ end;
252
+
253
+ if not Parameters.ContainsKey('Amount') then begin
254
+ ErrorMessages.Add('Missing required parameter: Amount');
255
+ IsValid := false;
256
+ end;
257
+
258
+ exit(IsValid);
259
+ end;
260
+
261
+ local procedure ValidateBusinessRules(Parameters: Dictionary of [Text, Variant]; var ErrorMessages: List of [Text]): Boolean
262
+ var
263
+ Amount: Decimal;
264
+ IsValid: Boolean;
265
+ begin
266
+ IsValid := true;
267
+
268
+ if Parameters.Get('Amount', Amount) then begin
269
+ if Amount <= 0 then begin
270
+ ErrorMessages.Add('Amount must be greater than zero');
271
+ IsValid := false;
272
+ end;
273
+ end;
274
+
275
+ exit(IsValid);
276
+ end;
277
+ }
278
+ ```
279
+
280
+ This implementation shows how delegate operations enable flexible, extensible APIs in Business Central while maintaining clean separation of concerns and supporting runtime configuration of business logic.
@@ -0,0 +1,200 @@
1
+ # API Fieldset Registration Sample
2
+
3
+ ## Overview
4
+ This sample demonstrates how to implement fieldset registration patterns for dynamic API field management and metadata-driven field selection.
5
+
6
+ ## Basic Fieldset Registration
7
+
8
+ ```al
9
+ codeunit 50100 "API Fieldset Registration"
10
+ {
11
+ procedure RegisterCustomerFieldset()
12
+ var
13
+ FieldsetRegistry: Codeunit "Fieldset Registry";
14
+ CustomerFieldset: Record "API Fieldset";
15
+ begin
16
+ // Register basic customer fieldset
17
+ CustomerFieldset.Init();
18
+ CustomerFieldset."Table ID" := Database::Customer;
19
+ CustomerFieldset."Fieldset Name" := 'BASIC';
20
+ CustomerFieldset."Field No." := Customer.FieldNo("No.");
21
+ CustomerFieldset.Insert();
22
+
23
+ CustomerFieldset."Field No." := Customer.FieldNo(Name);
24
+ CustomerFieldset.Insert();
25
+
26
+ CustomerFieldset."Field No." := Customer.FieldNo("Phone No.");
27
+ CustomerFieldset.Insert();
28
+
29
+ // Register extended customer fieldset
30
+ CustomerFieldset."Fieldset Name" := 'EXTENDED';
31
+ CustomerFieldset."Field No." := Customer.FieldNo("Credit Limit (LCY)");
32
+ CustomerFieldset.Insert();
33
+
34
+ CustomerFieldset."Field No." := Customer.FieldNo("Balance (LCY)");
35
+ CustomerFieldset.Insert();
36
+ end;
37
+ }
38
+ ```
39
+
40
+ ## Dynamic Field Selection
41
+
42
+ ```al
43
+ codeunit 50101 "Dynamic Field Selection"
44
+ {
45
+ procedure GetCustomerFields(FieldsetName: Text): List of [Integer]
46
+ var
47
+ APIFieldset: Record "API Fieldset";
48
+ FieldList: List of [Integer];
49
+ begin
50
+ APIFieldset.SetRange("Table ID", Database::Customer);
51
+ APIFieldset.SetRange("Fieldset Name", FieldsetName);
52
+ if APIFieldset.FindSet() then
53
+ repeat
54
+ FieldList.Add(APIFieldset."Field No.");
55
+ until APIFieldset.Next() = 0;
56
+
57
+ exit(FieldList);
58
+ end;
59
+
60
+ procedure ApplyFieldset(var CustomerRec: Record Customer; FieldsetName: Text)
61
+ var
62
+ FieldList: List of [Integer];
63
+ FieldNo: Integer;
64
+ begin
65
+ FieldList := GetCustomerFields(FieldsetName);
66
+ CustomerRec.SetLoadFields();
67
+
68
+ foreach FieldNo in FieldList do
69
+ CustomerRec.AddLoadFields(FieldNo);
70
+ end;
71
+ }
72
+ ```
73
+
74
+ ## Conditional Registration
75
+
76
+ ```al
77
+ codeunit 50102 "Conditional Fieldset Reg"
78
+ {
79
+ procedure RegisterConditionalFieldset(TableID: Integer; Condition: Text)
80
+ var
81
+ ConditionalFieldset: Record "Conditional API Fieldset";
82
+ begin
83
+ ConditionalFieldset.Init();
84
+ ConditionalFieldset."Table ID" := TableID;
85
+ ConditionalFieldset.Condition := Condition;
86
+ ConditionalFieldset."Field Selection" := GetFieldsForCondition(TableID, Condition);
87
+ ConditionalFieldset.Insert();
88
+ end;
89
+
90
+ local procedure GetFieldsForCondition(TableID: Integer; Condition: Text): Text
91
+ var
92
+ FieldSelection: Text;
93
+ begin
94
+ case Condition of
95
+ 'MINIMAL':
96
+ FieldSelection := 'No.,Name';
97
+ 'STANDARD':
98
+ FieldSelection := 'No.,Name,Phone No.,E-Mail';
99
+ 'COMPLETE':
100
+ FieldSelection := '*';
101
+ end;
102
+
103
+ exit(FieldSelection);
104
+ end;
105
+ }
106
+ ```
107
+
108
+ ## API Integration
109
+
110
+ ```al
111
+ page 50100 "Customer API with Fieldsets"
112
+ {
113
+ APIPublisher = 'contoso';
114
+ APIGroup = 'sample';
115
+ APIVersion = 'v1.0';
116
+ EntityName = 'customer';
117
+ EntitySetName = 'customers';
118
+ SourceTable = Customer;
119
+
120
+ trigger OnOpenPage()
121
+ var
122
+ FieldsetManager: Codeunit "Dynamic Field Selection";
123
+ RequestedFieldset: Text;
124
+ begin
125
+ // Get fieldset from query parameter
126
+ RequestedFieldset := GetFieldsetFromRequest();
127
+ if RequestedFieldset <> '' then
128
+ FieldsetManager.ApplyFieldset(Rec, RequestedFieldset);
129
+ end;
130
+
131
+ local procedure GetFieldsetFromRequest(): Text
132
+ var
133
+ RequestHeaders: HttpHeaders;
134
+ FieldsetHeader: Text;
135
+ begin
136
+ // Extract fieldset preference from request
137
+ if RequestHeaders.Contains('X-Fieldset') then begin
138
+ RequestHeaders.GetValues('X-Fieldset', FieldsetHeader);
139
+ exit(FieldsetHeader);
140
+ end;
141
+
142
+ exit('STANDARD');
143
+ end;
144
+ }
145
+ ```
146
+
147
+ ## Metadata-Driven Configuration
148
+
149
+ ```al
150
+ table 50100 "API Fieldset"
151
+ {
152
+ fields
153
+ {
154
+ field(1; "Table ID"; Integer) { }
155
+ field(2; "Fieldset Name"; Code[20]) { }
156
+ field(3; "Field No."; Integer) { }
157
+ field(4; "Field Name"; Text[100]) { }
158
+ field(5; Required; Boolean) { }
159
+ field(6; "Display Order"; Integer) { }
160
+ }
161
+
162
+ keys
163
+ {
164
+ key(PK; "Table ID", "Fieldset Name", "Field No.") { Clustered = true; }
165
+ }
166
+ }
167
+ ```
168
+
169
+ ## Performance Considerations
170
+
171
+ ```al
172
+ codeunit 50103 "Fieldset Performance Mgmt"
173
+ {
174
+ var
175
+ FieldsetCache: Dictionary of [Text, List of [Integer]];
176
+
177
+ procedure GetCachedFieldset(TableID: Integer; FieldsetName: Text): List of [Integer]
178
+ var
179
+ CacheKey: Text;
180
+ FieldList: List of [Integer];
181
+ begin
182
+ CacheKey := StrSubstNo('%1_%2', TableID, FieldsetName);
183
+
184
+ if FieldsetCache.ContainsKey(CacheKey) then
185
+ exit(FieldsetCache.Get(CacheKey));
186
+
187
+ FieldList := LoadFieldsetFromDatabase(TableID, FieldsetName);
188
+ FieldsetCache.Set(CacheKey, FieldList);
189
+
190
+ exit(FieldList);
191
+ end;
192
+
193
+ procedure ClearCache()
194
+ begin
195
+ Clear(FieldsetCache);
196
+ end;
197
+ }
198
+ ```
199
+
200
+ This sample demonstrates comprehensive fieldset registration patterns including basic registration, dynamic selection, conditional logic, API integration, and performance optimization through caching.