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,433 @@
1
+ # SystemId Integration in API Pages - AL Code Sample
2
+
3
+ ## Basic SystemId Usage as Primary Key
4
+
5
+ ```al
6
+ page 50200 "Customer SystemId API"
7
+ {
8
+ PageType = API;
9
+ APIPublisher = 'contoso';
10
+ APIGroup = 'customers';
11
+ APIVersion = 'v1.0';
12
+ EntityName = 'customer';
13
+ EntitySetName = 'customers';
14
+ SourceTable = Customer;
15
+ DelayedInsert = true;
16
+ ODataKeyFields = SystemId; // Use SystemId as primary OData key
17
+
18
+ layout
19
+ {
20
+ area(Content)
21
+ {
22
+ repeater(GroupName)
23
+ {
24
+ // SystemId exposed as 'id' for REST conventions
25
+ field(id; Rec.SystemId)
26
+ {
27
+ Caption = 'Id';
28
+ Editable = false; // SystemId is system-generated
29
+ }
30
+ field(number; Rec."No.")
31
+ {
32
+ Caption = 'Number';
33
+ // Business key still available for reference
34
+ }
35
+ field(displayName; Rec.Name)
36
+ {
37
+ Caption = 'Display Name';
38
+ }
39
+ field(lastModifiedDateTime; Rec.SystemModifiedAt)
40
+ {
41
+ Caption = 'Last Modified Date Time';
42
+ Editable = false;
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ // SystemId automatically handled by BC platform
49
+ // No custom triggers needed for SystemId generation
50
+ }
51
+ ```
52
+
53
+ ## SystemId with Related Records Navigation
54
+
55
+ ```al
56
+ page 50201 "Sales Order SystemId API"
57
+ {
58
+ PageType = API;
59
+ APIPublisher = 'contoso';
60
+ APIGroup = 'sales';
61
+ APIVersion = 'v1.0';
62
+ EntityName = 'salesOrder';
63
+ EntitySetName = 'salesOrders';
64
+ SourceTable = "Sales Header";
65
+ DelayedInsert = true;
66
+ ODataKeyFields = SystemId;
67
+
68
+ layout
69
+ {
70
+ area(Content)
71
+ {
72
+ repeater(GroupName)
73
+ {
74
+ field(id; Rec.SystemId)
75
+ {
76
+ Caption = 'Id';
77
+ Editable = false;
78
+ }
79
+ field(number; Rec."No.")
80
+ {
81
+ Caption = 'Number';
82
+ }
83
+ field(customerId; CustomerSystemId)
84
+ {
85
+ Caption = 'Customer Id';
86
+ // Link to customer using SystemId instead of business key
87
+ }
88
+ field(customerNumber; Rec."Sell-to Customer No.")
89
+ {
90
+ Caption = 'Customer Number';
91
+ // Keep business key for backward compatibility
92
+ }
93
+ field(orderDate; Rec."Order Date")
94
+ {
95
+ Caption = 'Order Date';
96
+ }
97
+ field(totalAmount; TotalAmount)
98
+ {
99
+ Caption = 'Total Amount';
100
+ }
101
+ }
102
+ }
103
+ }
104
+
105
+ var
106
+ CustomerSystemId: Guid;
107
+ TotalAmount: Decimal;
108
+
109
+ trigger OnAfterGetRecord()
110
+ var
111
+ Customer: Record Customer;
112
+ begin
113
+ // Resolve customer SystemId from business key
114
+ if Customer.Get(Rec."Sell-to Customer No.") then
115
+ CustomerSystemId := Customer.SystemId
116
+ else
117
+ Clear(CustomerSystemId);
118
+
119
+ // Calculate total amount
120
+ Rec.CalcFields("Amount Including VAT");
121
+ TotalAmount := Rec."Amount Including VAT";
122
+ end;
123
+
124
+ trigger OnModifyRecord(): Boolean
125
+ var
126
+ Customer: Record Customer;
127
+ begin
128
+ // Handle customer assignment via SystemId
129
+ if not IsNullGuid(CustomerSystemId) then begin
130
+ Customer.SetRange(SystemId, CustomerSystemId);
131
+ if Customer.FindFirst() then
132
+ Rec.Validate("Sell-to Customer No.", Customer."No.");
133
+ end;
134
+ exit(true);
135
+ end;
136
+ }
137
+ ```
138
+
139
+ ## SystemId Cross-Reference Implementation
140
+
141
+ ```al
142
+ // Helper codeunit for SystemId operations
143
+ codeunit 50200 "SystemId Helper"
144
+ {
145
+ // Find record by SystemId across different tables
146
+ procedure FindRecordBySystemId(TableID: Integer; SystemIdValue: Guid; var RecRef: RecordRef): Boolean
147
+ var
148
+ SystemIdFieldRef: FieldRef;
149
+ begin
150
+ RecRef.Open(TableID);
151
+ SystemIdFieldRef := RecRef.Field(RecRef.SystemIdNo);
152
+ SystemIdFieldRef.SetRange(SystemIdValue);
153
+ exit(RecRef.FindFirst());
154
+ end;
155
+
156
+ // Get SystemId from business key
157
+ procedure GetSystemIdFromBusinessKey(TableID: Integer; KeyFieldNo: Integer; KeyValue: Variant): Guid
158
+ var
159
+ RecRef: RecordRef;
160
+ KeyFieldRef: FieldRef;
161
+ SystemIdFieldRef: FieldRef;
162
+ begin
163
+ RecRef.Open(TableID);
164
+ KeyFieldRef := RecRef.Field(KeyFieldNo);
165
+ KeyFieldRef.SetRange(KeyValue);
166
+ if RecRef.FindFirst() then begin
167
+ SystemIdFieldRef := RecRef.Field(RecRef.SystemIdNo);
168
+ exit(SystemIdFieldRef.Value);
169
+ end;
170
+ exit(CreateGuid()); // Return empty GUID if not found
171
+ end;
172
+
173
+ // Validate SystemId exists in target table
174
+ procedure ValidateSystemIdExists(TableID: Integer; SystemIdValue: Guid): Boolean
175
+ var
176
+ RecRef: RecordRef;
177
+ begin
178
+ exit(FindRecordBySystemId(TableID, SystemIdValue, RecRef));
179
+ end;
180
+ }
181
+
182
+ // API page demonstrating SystemId cross-references
183
+ page 50202 "Purchase Order Line API"
184
+ {
185
+ PageType = API;
186
+ APIPublisher = 'contoso';
187
+ APIGroup = 'purchasing';
188
+ APIVersion = 'v1.0';
189
+ EntityName = 'purchaseOrderLine';
190
+ EntitySetName = 'purchaseOrderLines';
191
+ SourceTable = "Purchase Line";
192
+ DelayedInsert = true;
193
+ ODataKeyFields = SystemId;
194
+
195
+ layout
196
+ {
197
+ area(Content)
198
+ {
199
+ repeater(GroupName)
200
+ {
201
+ field(id; Rec.SystemId)
202
+ {
203
+ Caption = 'Id';
204
+ Editable = false;
205
+ }
206
+ field(documentId; DocumentSystemId)
207
+ {
208
+ Caption = 'Document Id';
209
+ // Reference to purchase header via SystemId
210
+ }
211
+ field(itemId; ItemSystemId)
212
+ {
213
+ Caption = 'Item Id';
214
+ // Reference to item via SystemId
215
+ }
216
+ field(lineNumber; Rec."Line No.")
217
+ {
218
+ Caption = 'Line Number';
219
+ }
220
+ field(quantity; Rec.Quantity)
221
+ {
222
+ Caption = 'Quantity';
223
+ }
224
+ field(unitCost; Rec."Unit Cost")
225
+ {
226
+ Caption = 'Unit Cost';
227
+ }
228
+ }
229
+ }
230
+ }
231
+
232
+ var
233
+ DocumentSystemId: Guid;
234
+ ItemSystemId: Guid;
235
+ SystemIdHelper: Codeunit "SystemId Helper";
236
+
237
+ trigger OnAfterGetRecord()
238
+ var
239
+ PurchaseHeader: Record "Purchase Header";
240
+ Item: Record Item;
241
+ begin
242
+ // Get document SystemId
243
+ if PurchaseHeader.Get(Rec."Document Type", Rec."Document No.") then
244
+ DocumentSystemId := PurchaseHeader.SystemId;
245
+
246
+ // Get item SystemId
247
+ if Item.Get(Rec."No.") then
248
+ ItemSystemId := Item.SystemId;
249
+ end;
250
+
251
+ trigger OnModifyRecord(): Boolean
252
+ var
253
+ PurchaseHeader: Record "Purchase Header";
254
+ Item: Record Item;
255
+ begin
256
+ // Validate and set document reference
257
+ if not IsNullGuid(DocumentSystemId) then begin
258
+ PurchaseHeader.SetRange(SystemId, DocumentSystemId);
259
+ if PurchaseHeader.FindFirst() then begin
260
+ Rec.Validate("Document Type", PurchaseHeader."Document Type");
261
+ Rec.Validate("Document No.", PurchaseHeader."No.");
262
+ end else
263
+ Error('Purchase document with SystemId %1 not found', DocumentSystemId);
264
+ end;
265
+
266
+ // Validate and set item reference
267
+ if not IsNullGuid(ItemSystemId) then begin
268
+ Item.SetRange(SystemId, ItemSystemId);
269
+ if Item.FindFirst() then
270
+ Rec.Validate("No.", Item."No.")
271
+ else
272
+ Error('Item with SystemId %1 not found', ItemSystemId);
273
+ end;
274
+
275
+ exit(true);
276
+ end;
277
+ }
278
+ ```
279
+
280
+ ## SystemId URL Navigation Patterns
281
+
282
+ ```al
283
+ // API page with SystemId-based navigation URLs
284
+ page 50203 "Enhanced Customer API"
285
+ {
286
+ PageType = API;
287
+ APIPublisher = 'contoso';
288
+ APIGroup = 'customers';
289
+ APIVersion = 'v1.0';
290
+ EntityName = 'customer';
291
+ EntitySetName = 'customers';
292
+ SourceTable = Customer;
293
+ DelayedInsert = true;
294
+ ODataKeyFields = SystemId;
295
+
296
+ layout
297
+ {
298
+ area(Content)
299
+ {
300
+ repeater(GroupName)
301
+ {
302
+ field(id; Rec.SystemId)
303
+ {
304
+ Caption = 'Id';
305
+ Editable = false;
306
+ }
307
+ field(number; Rec."No.")
308
+ {
309
+ Caption = 'Number';
310
+ }
311
+ field(displayName; Rec.Name)
312
+ {
313
+ Caption = 'Display Name';
314
+ }
315
+ field(salesOrdersUrl; SalesOrdersNavigationUrl)
316
+ {
317
+ Caption = 'Sales Orders URL';
318
+ Editable = false;
319
+ // Navigation URL using SystemId
320
+ }
321
+ field(paymentsUrl; PaymentsNavigationUrl)
322
+ {
323
+ Caption = 'Payments URL';
324
+ Editable = false;
325
+ }
326
+ }
327
+ }
328
+ }
329
+
330
+ var
331
+ SalesOrdersNavigationUrl: Text;
332
+ PaymentsNavigationUrl: Text;
333
+
334
+ trigger OnAfterGetRecord()
335
+ begin
336
+ // Build navigation URLs using SystemId
337
+ SalesOrdersNavigationUrl := BuildNavigationUrl('salesOrders', Rec.SystemId);
338
+ PaymentsNavigationUrl := BuildNavigationUrl('customerPayments', Rec.SystemId);
339
+ end;
340
+
341
+ local procedure BuildNavigationUrl(EntitySet: Text; RelatedSystemId: Guid): Text
342
+ var
343
+ BaseUrl: Text;
344
+ CompanyName: Text;
345
+ begin
346
+ // Get base API URL from current request context
347
+ BaseUrl := GetUrl(ClientType::ODataV4, CompanyName(), ObjectType::Page, 0);
348
+
349
+ // Build related entity URL with SystemId filter
350
+ exit(StrSubstNo('%1/%2?$filter=customerId eq %3',
351
+ BaseUrl, EntitySet, RelatedSystemId));
352
+ end;
353
+ }
354
+
355
+ // Related sales orders API filtered by customer SystemId
356
+ page 50204 "Customer Sales Orders API"
357
+ {
358
+ PageType = API;
359
+ APIPublisher = 'contoso';
360
+ APIGroup = 'sales';
361
+ APIVersion = 'v1.0';
362
+ EntityName = 'customerSalesOrder';
363
+ EntitySetName = 'customerSalesOrders';
364
+ SourceTable = "Sales Header";
365
+ DelayedInsert = true;
366
+ ODataKeyFields = SystemId;
367
+ SourceTableView = WHERE("Document Type" = CONST(Order));
368
+
369
+ layout
370
+ {
371
+ area(Content)
372
+ {
373
+ repeater(GroupName)
374
+ {
375
+ field(id; Rec.SystemId)
376
+ {
377
+ Caption = 'Id';
378
+ Editable = false;
379
+ }
380
+ field(customerId; CustomerSystemId)
381
+ {
382
+ Caption = 'Customer Id';
383
+ Editable = false;
384
+ }
385
+ field(orderNumber; Rec."No.")
386
+ {
387
+ Caption = 'Order Number';
388
+ }
389
+ field(orderDate; Rec."Order Date")
390
+ {
391
+ Caption = 'Order Date';
392
+ }
393
+ }
394
+ }
395
+ }
396
+
397
+ var
398
+ CustomerSystemId: Guid;
399
+
400
+ trigger OnAfterGetRecord()
401
+ var
402
+ Customer: Record Customer;
403
+ begin
404
+ // Resolve customer SystemId
405
+ if Customer.Get(Rec."Sell-to Customer No.") then
406
+ CustomerSystemId := Customer.SystemId;
407
+ end;
408
+ }
409
+ ```
410
+
411
+ ## Implementation Notes
412
+
413
+ **SystemId Integration Best Practices:**
414
+
415
+ 1. **Primary Key Strategy:**
416
+ - Always use SystemId as ODataKeyFields for API pages
417
+ - Expose SystemId as 'id' field following REST conventions
418
+ - Keep business keys available for backward compatibility
419
+
420
+ 2. **Cross-Reference Management:**
421
+ - Use SystemId for all entity relationships in APIs
422
+ - Implement validation for SystemId references before updates
423
+ - Provide helper functions for SystemId to business key conversion
424
+
425
+ 3. **Navigation Patterns:**
426
+ - Build related entity URLs using SystemId parameters
427
+ - Implement consistent URL structures across API endpoints
428
+ - Use SystemId filtering for efficient related data queries
429
+
430
+ 4. **Performance Considerations:**
431
+ - SystemId fields are automatically indexed by BC platform
432
+ - Use SystemId for faster record lookups in large tables
433
+ - Cache SystemId mappings for frequently accessed relationships
@@ -0,0 +1,66 @@
1
+ ---
2
+ title: "Subscriber Codeunit Size and Organization"
3
+ domain: "alex-architect"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["codeunit-design", "organization", "maintainability", "performance"]
7
+ prerequisites: ["codeunit-basics", "event-subscriber-patterns"]
8
+ samples: "samples/subscriber-organization.md"
9
+ ---
10
+ # Subscriber Codeunit Size and Organization
11
+
12
+ ## Overview
13
+
14
+ Subscriber codeunit size and organization significantly impact maintainability, performance, and development workflow. Proper subscriber architecture balances functional cohesion with practical constraints around codeunit compilation, deployment, and runtime performance.
15
+
16
+ Large monolithic subscriber codeunits create maintenance challenges and compilation overhead, while excessive fragmentation leads to deployment complexity and runtime inefficiencies. Optimal subscriber organization requires understanding both technical constraints and business domain boundaries.
17
+
18
+ The architectural decisions around subscriber codeunit size affect development team productivity, system performance, and long-term maintainability. Strategic organization patterns prevent common pitfalls while enabling scalable event-driven architectures.
19
+
20
+ ## Size Impact on Development
21
+
22
+ Large subscriber codeunits slow development cycles through increased compilation time and complex merge conflict resolution. When multiple developers work on the same subscriber codeunit, coordination overhead increases significantly.
23
+
24
+ Oversized codeunits make specific subscriber logic harder to locate and modify, reducing development velocity. Navigation through hundreds of procedures to find specific event handling logic creates unnecessary friction.
25
+
26
+ Version control systems struggle with large files, making code review processes more difficult and increasing the likelihood of merge conflicts during parallel development efforts.
27
+
28
+ ## Functional Cohesion Principles
29
+
30
+ Subscriber codeunits should group related event handling logic based on business domain or functional area rather than purely technical organization. Domain-driven organization improves maintainability and understanding.
31
+
32
+ Event subscribers addressing the same business process or data entity naturally belong together, enabling shared utility functions and consistent business rule implementation across related events.
33
+
34
+ Cross-cutting concerns like logging, audit trails, or security enforcement may warrant separate subscriber codeunits despite spanning multiple business domains, maintaining clean separation of concerns.
35
+
36
+ ## Performance Considerations
37
+
38
+ Codeunit initialization overhead affects performance when subscribers are distributed across many small codeunits. Each codeunit requires separate loading and initialization, creating cumulative startup costs.
39
+
40
+ Memory usage patterns differ between large consolidated codeunits and distributed smaller ones. SingleInstance subscribers particularly benefit from consolidation to minimize per-instance memory overhead.
41
+
42
+ Runtime performance characteristics vary based on subscriber organization, with consolidated codeunits providing better CPU cache locality while distributed codeunits enable more granular memory management.
43
+
44
+ ## Deployment and Versioning
45
+
46
+ Subscriber codeunit organization affects deployment granularity and rollback capabilities. Smaller codeunits enable more precise deployment control but increase deployment complexity and coordination requirements.
47
+
48
+ Version management becomes more complex with highly distributed subscriber architectures, requiring careful dependency tracking and coordinated updates across multiple related codeunits.
49
+
50
+ Extension development scenarios benefit from smaller, focused subscriber codeunits that minimize conflicts with base application changes and other extensions.
51
+
52
+ ## Maintenance Strategies
53
+
54
+ Subscriber codeunits require regular refactoring to maintain optimal size as functionality grows. Established size thresholds and refactoring triggers prevent architectural degradation over time.
55
+
56
+ Documentation and naming conventions become increasingly important as subscriber codeunit count grows. Clear organization patterns enable developers to quickly locate relevant event handling logic.
57
+
58
+ Code analysis tools and metrics help monitor subscriber codeunit size and complexity trends, providing objective data for refactoring decisions and architectural improvements.
59
+
60
+ ## Organization Patterns
61
+
62
+ Domain-based organization groups subscribers by business functionality, creating natural boundaries for related event handling logic and shared business rules implementation.
63
+
64
+ Layer-based organization separates subscribers by architectural concerns such as data validation, business logic, and integration logic, providing clear separation of responsibilities.
65
+
66
+ Hybrid organization combines domain and layer approaches, grouping related business functionality while maintaining separation between different types of event processing logic.
@@ -0,0 +1,115 @@
1
+ ---
2
+ title: "SystemId Integration in API Pages"
3
+ domain: "alex-architect"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["systemid", "data-modeling", "entity-relationships"]
7
+ samples: "samples/systemid-integration.md"
8
+ ---
9
+ # SystemId Integration in API Pages
10
+
11
+ ## Overview
12
+
13
+ SystemId provides a universal unique identifier for records in Business Central tables, offering significant advantages for API Page implementations. Understanding SystemId integration patterns enables robust API designs that support efficient data synchronization and external system integration.
14
+
15
+ SystemId is a GUID field automatically maintained by the BC platform for most tables. This field provides stable, unique identification that remains consistent across system operations, making it ideal for external system references and API operations.
16
+
17
+ Proper SystemId integration supports advanced API scenarios including optimistic concurrency control, efficient data synchronization, and reliable external system integration patterns.
18
+
19
+ ## SystemId Characteristics
20
+
21
+ SystemId values are automatically generated and maintained by the BC platform, ensuring uniqueness across all records in the database. These values remain stable throughout the record lifecycle unless explicitly regenerated.
22
+
23
+ The SystemId field is of type GUID, providing 128-bit unique identifiers that are virtually guaranteed to be unique across systems and time. This makes SystemId ideal for distributed system integration scenarios.
24
+
25
+ SystemId values are immutable under normal circumstances, providing reliable external references that don't change due to business data modifications or system operations.
26
+
27
+ ## API Page Integration Patterns
28
+
29
+ Use SystemId as the primary key or unique identifier for API Page implementations when stable external references are required. This provides consistent identification for API consumers regardless of business key changes.
30
+
31
+ SystemId enables efficient OData query operations through unique record identification. API consumers can reliably reference specific records using SystemId values without depending on complex business key combinations.
32
+
33
+ Consider exposing SystemId alongside business keys to provide flexible identification options for different API consumer scenarios and integration requirements.
34
+
35
+ ## External System Integration
36
+
37
+ SystemId provides excellent external system reference capabilities, allowing external systems to maintain stable references to BC records without depending on business data that might change.
38
+
39
+ External systems can store SystemId values as foreign keys or reference identifiers, enabling reliable record lookups and data synchronization operations across system boundaries.
40
+
41
+ SystemId-based integration patterns support incremental synchronization scenarios where external systems need to track changes to specific BC records over time.
42
+
43
+ ## Data Synchronization Benefits
44
+
45
+ SystemId enables efficient change tracking and synchronization operations by providing stable record identification that persists across data modifications and system operations.
46
+
47
+ Synchronization processes can use SystemId values to identify specific records for update operations, avoiding complex business key matching logic that may be unreliable or inefficient.
48
+
49
+ Consider implementing timestamp fields alongside SystemId for efficient change detection and synchronization optimization in high-volume scenarios.
50
+
51
+ ## Relationship Modeling
52
+
53
+ SystemId can be used in related table structures to create stable relationships that don't depend on business key values. This provides more robust relationship models for complex data structures.
54
+
55
+ Foreign key relationships using SystemId values remain valid even when business keys change, reducing the complexity of maintaining referential integrity across related tables.
56
+
57
+ Consider the performance implications of SystemId-based relationships, as GUID comparisons may have different performance characteristics compared to integer-based keys.
58
+
59
+ ## Query Performance Considerations
60
+
61
+ SystemId is typically indexed by the BC platform, providing efficient query performance for unique record lookups and equality comparisons in API operations.
62
+
63
+ GUID-based queries may have different performance characteristics compared to integer or string-based queries. Consider these differences when designing high-performance API implementations.
64
+
65
+ Range queries or sorting operations on SystemId fields may be less efficient than similar operations on business keys with more meaningful sort orders.
66
+
67
+ ## OData Integration Patterns
68
+
69
+ SystemId integrates seamlessly with OData operations, providing reliable record identification for GET, PATCH, PUT, and DELETE operations through API Pages.
70
+
71
+ Use SystemId in OData key segments to enable efficient record access patterns that don't depend on complex business key combinations or field ordering requirements.
72
+
73
+ SystemId values work well with OData expansion operations, providing stable relationship navigation that remains consistent across API requests and system operations.
74
+
75
+ ## Concurrency Control Integration
76
+
77
+ SystemId can be combined with ETag implementations to provide robust optimistic concurrency control in API scenarios. This combination enables reliable conflict detection and resolution.
78
+
79
+ The stability of SystemId values supports long-running API operations where record identification must remain consistent across extended time periods or multiple API interactions.
80
+
81
+ Consider using SystemId in combination with timestamp fields for advanced concurrency control scenarios that require both unique identification and change detection.
82
+
83
+ ## Migration and Data Import Scenarios
84
+
85
+ SystemId values can be preserved during data migration operations, maintaining external system references and integration consistency across system transitions.
86
+
87
+ Data import processes should consider SystemId handling requirements, especially when maintaining references from external systems or preserving integration relationships.
88
+
89
+ Plan for SystemId regeneration scenarios that might be required during major system upgrades or data restructuring operations that affect external system integration.
90
+
91
+ ## Security and Access Control
92
+
93
+ SystemId values are generally safe to expose through API interfaces as they don't reveal sensitive business information while providing unique identification capabilities.
94
+
95
+ Consider SystemId exposure in security models, as these values provide persistent record identification that could be used in unauthorized access attempts over extended time periods.
96
+
97
+ SystemId-based access control patterns can provide more granular security implementations compared to business key-based approaches, especially in multi-tenant scenarios.
98
+
99
+ ## Testing and Validation
100
+
101
+ Implement proper testing for SystemId-based API operations, including validation of unique identification, relationship consistency, and external system integration scenarios.
102
+
103
+ Test SystemId behavior across different BC operations including record creation, modification, deletion, and restoration to ensure consistent integration behavior.
104
+
105
+ Validate SystemId performance characteristics under realistic data volumes and query patterns to ensure scalable API implementations.
106
+
107
+ ## Best Practices
108
+
109
+ Use SystemId for external system integration scenarios where stable, unique identification is required across system boundaries and extended time periods.
110
+
111
+ Consider combining SystemId with business keys to provide flexible identification options that support different API consumer requirements and usage patterns.
112
+
113
+ Document SystemId integration decisions and patterns for API implementations to ensure consistent approaches and support ongoing maintenance requirements.
114
+
115
+ Plan for SystemId lifecycle management in scenarios involving data archiving, system migrations, or major structural changes that might affect external system integration.