@jwikman/bc-code-intelligence-mcp 1.5.7-dev.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 (753) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -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 +440 -0
  10. package/dist/cli/bc-code-intel-cli.js.map +1 -0
  11. package/dist/config/config-loader.d.ts +28 -0
  12. package/dist/config/config-loader.d.ts.map +1 -0
  13. package/dist/config/config-loader.js +497 -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 +608 -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 +82 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +1211 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/layers/base-layer.d.ts +133 -0
  40. package/dist/layers/base-layer.d.ts.map +1 -0
  41. package/dist/layers/base-layer.js +290 -0
  42. package/dist/layers/base-layer.js.map +1 -0
  43. package/dist/layers/embedded-layer.d.ts +130 -0
  44. package/dist/layers/embedded-layer.d.ts.map +1 -0
  45. package/dist/layers/embedded-layer.js +612 -0
  46. package/dist/layers/embedded-layer.js.map +1 -0
  47. package/dist/layers/git-layer.d.ts +77 -0
  48. package/dist/layers/git-layer.d.ts.map +1 -0
  49. package/dist/layers/git-layer.js +529 -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 +135 -0
  56. package/dist/layers/layer-service.d.ts.map +1 -0
  57. package/dist/layers/layer-service.js +586 -0
  58. package/dist/layers/layer-service.js.map +1 -0
  59. package/dist/layers/project-layer.d.ts +58 -0
  60. package/dist/layers/project-layer.d.ts.map +1 -0
  61. package/dist/layers/project-layer.js +286 -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 +358 -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 +818 -0
  86. package/dist/services/code-analysis-service.js.map +1 -0
  87. package/dist/services/enhanced-prompt-service.d.ts +56 -0
  88. package/dist/services/enhanced-prompt-service.d.ts.map +1 -0
  89. package/dist/services/enhanced-prompt-service.js +165 -0
  90. package/dist/services/enhanced-prompt-service.js.map +1 -0
  91. package/dist/services/knowledge-service.d.ts +90 -0
  92. package/dist/services/knowledge-service.d.ts.map +1 -0
  93. package/dist/services/knowledge-service.js +342 -0
  94. package/dist/services/knowledge-service.js.map +1 -0
  95. package/dist/services/methodology-service.d.ts +91 -0
  96. package/dist/services/methodology-service.d.ts.map +1 -0
  97. package/dist/services/methodology-service.js +423 -0
  98. package/dist/services/methodology-service.js.map +1 -0
  99. package/dist/services/multi-content-layer-service.d.ts +198 -0
  100. package/dist/services/multi-content-layer-service.d.ts.map +1 -0
  101. package/dist/services/multi-content-layer-service.js +991 -0
  102. package/dist/services/multi-content-layer-service.js.map +1 -0
  103. package/dist/services/roleplay-engine.d.ts +161 -0
  104. package/dist/services/roleplay-engine.d.ts.map +1 -0
  105. package/dist/services/roleplay-engine.js +994 -0
  106. package/dist/services/roleplay-engine.js.map +1 -0
  107. package/dist/services/session-storage/file-storage.d.ts +30 -0
  108. package/dist/services/session-storage/file-storage.d.ts.map +1 -0
  109. package/dist/services/session-storage/file-storage.js +229 -0
  110. package/dist/services/session-storage/file-storage.js.map +1 -0
  111. package/dist/services/session-storage/in-memory-storage.d.ts +31 -0
  112. package/dist/services/session-storage/in-memory-storage.d.ts.map +1 -0
  113. package/dist/services/session-storage/in-memory-storage.js +142 -0
  114. package/dist/services/session-storage/in-memory-storage.js.map +1 -0
  115. package/dist/services/specialist-discovery.d.ts +98 -0
  116. package/dist/services/specialist-discovery.d.ts.map +1 -0
  117. package/dist/services/specialist-discovery.js +387 -0
  118. package/dist/services/specialist-discovery.js.map +1 -0
  119. package/dist/services/specialist-loader.d.ts +101 -0
  120. package/dist/services/specialist-loader.d.ts.map +1 -0
  121. package/dist/services/specialist-loader.js +256 -0
  122. package/dist/services/specialist-loader.js.map +1 -0
  123. package/dist/services/specialist-session-manager.d.ts +76 -0
  124. package/dist/services/specialist-session-manager.d.ts.map +1 -0
  125. package/dist/services/specialist-session-manager.js +255 -0
  126. package/dist/services/specialist-session-manager.js.map +1 -0
  127. package/dist/services/workflow-service.d.ts +146 -0
  128. package/dist/services/workflow-service.d.ts.map +1 -0
  129. package/dist/services/workflow-service.js +409 -0
  130. package/dist/services/workflow-service.js.map +1 -0
  131. package/dist/setup/post-install.d.ts +12 -0
  132. package/dist/setup/post-install.d.ts.map +1 -0
  133. package/dist/setup/post-install.js +81 -0
  134. package/dist/setup/post-install.js.map +1 -0
  135. package/dist/streamlined-handlers.d.ts +94 -0
  136. package/dist/streamlined-handlers.d.ts.map +1 -0
  137. package/dist/streamlined-handlers.js +665 -0
  138. package/dist/streamlined-handlers.js.map +1 -0
  139. package/dist/test-enhanced-mcp-server.d.ts +7 -0
  140. package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
  141. package/dist/test-enhanced-mcp-server.js +177 -0
  142. package/dist/test-enhanced-mcp-server.js.map +1 -0
  143. package/dist/tools/config-diagnostic-tools.d.ts +234 -0
  144. package/dist/tools/config-diagnostic-tools.d.ts.map +1 -0
  145. package/dist/tools/config-diagnostic-tools.js +887 -0
  146. package/dist/tools/config-diagnostic-tools.js.map +1 -0
  147. package/dist/tools/core-tools.d.ts +26 -0
  148. package/dist/tools/core-tools.d.ts.map +1 -0
  149. package/dist/tools/core-tools.js +241 -0
  150. package/dist/tools/core-tools.js.map +1 -0
  151. package/dist/tools/handoff-tools.d.ts +37 -0
  152. package/dist/tools/handoff-tools.d.ts.map +1 -0
  153. package/dist/tools/handoff-tools.js +265 -0
  154. package/dist/tools/handoff-tools.js.map +1 -0
  155. package/dist/tools/index.d.ts +61 -0
  156. package/dist/tools/index.d.ts.map +1 -0
  157. package/dist/tools/index.js +75 -0
  158. package/dist/tools/index.js.map +1 -0
  159. package/dist/tools/onboarding-tools.d.ts +43 -0
  160. package/dist/tools/onboarding-tools.d.ts.map +1 -0
  161. package/dist/tools/onboarding-tools.js +353 -0
  162. package/dist/tools/onboarding-tools.js.map +1 -0
  163. package/dist/tools/specialist-discovery-tools.d.ts +27 -0
  164. package/dist/tools/specialist-discovery-tools.d.ts.map +1 -0
  165. package/dist/tools/specialist-discovery-tools.js +275 -0
  166. package/dist/tools/specialist-discovery-tools.js.map +1 -0
  167. package/dist/tools/specialist-tools.d.ts +43 -0
  168. package/dist/tools/specialist-tools.d.ts.map +1 -0
  169. package/dist/tools/specialist-tools.js +372 -0
  170. package/dist/tools/specialist-tools.js.map +1 -0
  171. package/dist/tools/workspace-tools.d.ts +96 -0
  172. package/dist/tools/workspace-tools.d.ts.map +1 -0
  173. package/dist/tools/workspace-tools.js +188 -0
  174. package/dist/tools/workspace-tools.js.map +1 -0
  175. package/dist/types/bc-knowledge.d.ts +303 -0
  176. package/dist/types/bc-knowledge.d.ts.map +1 -0
  177. package/dist/types/bc-knowledge.js +69 -0
  178. package/dist/types/bc-knowledge.js.map +1 -0
  179. package/dist/types/config-types.d.ts +186 -0
  180. package/dist/types/config-types.d.ts.map +1 -0
  181. package/dist/types/config-types.js +109 -0
  182. package/dist/types/config-types.js.map +1 -0
  183. package/dist/types/enhanced-layer-types.d.ts +193 -0
  184. package/dist/types/enhanced-layer-types.d.ts.map +1 -0
  185. package/dist/types/enhanced-layer-types.js +9 -0
  186. package/dist/types/enhanced-layer-types.js.map +1 -0
  187. package/dist/types/index.d.ts +5 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +7 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/types/layer-types.d.ts +173 -0
  192. package/dist/types/layer-types.d.ts.map +1 -0
  193. package/dist/types/layer-types.js +27 -0
  194. package/dist/types/layer-types.js.map +1 -0
  195. package/dist/types/roleplay-types.d.ts +156 -0
  196. package/dist/types/roleplay-types.d.ts.map +1 -0
  197. package/dist/types/roleplay-types.js +8 -0
  198. package/dist/types/roleplay-types.js.map +1 -0
  199. package/dist/types/session-types.d.ts +127 -0
  200. package/dist/types/session-types.d.ts.map +1 -0
  201. package/dist/types/session-types.js +8 -0
  202. package/dist/types/session-types.js.map +1 -0
  203. package/dist/utils/path-utils.d.ts +5 -0
  204. package/dist/utils/path-utils.d.ts.map +1 -0
  205. package/dist/utils/path-utils.js +14 -0
  206. package/dist/utils/path-utils.js.map +1 -0
  207. package/dist/workflows/domain-workflows.d.ts +8 -0
  208. package/dist/workflows/domain-workflows.d.ts.map +1 -0
  209. package/dist/workflows/domain-workflows.js +360 -0
  210. package/dist/workflows/domain-workflows.js.map +1 -0
  211. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
  212. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
  213. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
  214. package/embedded-knowledge/AGENTS.md +178 -0
  215. package/embedded-knowledge/CONTRIBUTING.md +58 -0
  216. package/embedded-knowledge/LICENSE +21 -0
  217. package/embedded-knowledge/README.md +32 -0
  218. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
  219. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
  220. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
  221. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
  222. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
  223. package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +371 -0
  224. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
  225. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
  226. package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +281 -0
  227. package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +248 -0
  228. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
  229. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
  230. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
  231. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
  232. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
  233. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
  234. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
  235. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
  236. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
  237. package/embedded-knowledge/domains/alex-architect/samples/testability-design-patterns.md +223 -0
  238. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
  239. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
  240. package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +77 -0
  241. package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +263 -0
  242. package/embedded-knowledge/domains/casey-copilot/samples/long-running-session-instructions.md +323 -0
  243. package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +846 -0
  244. package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +595 -0
  245. package/embedded-knowledge/domains/chris-config/content-types-structure.md +421 -0
  246. package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +437 -0
  247. package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +257 -0
  248. package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +302 -0
  249. package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +336 -0
  250. package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +453 -0
  251. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +360 -0
  252. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
  253. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
  254. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
  255. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
  256. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
  257. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
  258. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
  259. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
  260. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
  261. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
  262. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
  263. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
  264. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
  265. package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +160 -0
  266. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
  267. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
  268. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
  269. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
  270. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
  271. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
  272. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
  273. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
  274. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
  275. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
  276. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
  277. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
  278. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
  279. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
  280. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
  281. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
  282. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
  283. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
  284. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
  285. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
  286. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
  287. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
  288. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
  289. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
  290. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
  291. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
  292. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
  293. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
  294. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
  295. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
  296. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
  297. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
  298. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
  299. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
  300. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
  301. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
  302. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
  303. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
  304. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
  305. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
  306. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
  307. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
  308. package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +159 -0
  309. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
  310. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
  311. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
  312. package/embedded-knowledge/domains/eva-errors/samples/codeunit-run-pattern.md +239 -0
  313. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
  314. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
  315. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
  316. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
  317. package/embedded-knowledge/domains/eva-errors/samples/try-function-usage.md +195 -0
  318. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
  319. package/embedded-knowledge/domains/eva-errors/try-function-usage.md +129 -0
  320. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
  321. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
  322. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
  323. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
  324. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
  325. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
  326. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
  327. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
  328. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
  329. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
  330. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
  331. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
  332. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
  333. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
  334. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
  335. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
  336. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
  337. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
  338. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
  339. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
  340. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
  341. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
  342. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
  343. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
  344. package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +201 -0
  345. package/embedded-knowledge/domains/morgan-market/samples/partner-readiness-checklist.md +288 -0
  346. package/embedded-knowledge/domains/parker-pragmatic/README.md +39 -0
  347. package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +583 -0
  348. package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +587 -0
  349. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
  350. package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +82 -0
  351. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
  352. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
  353. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
  354. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
  355. package/embedded-knowledge/domains/quinn-tester/samples/isolation-testing-patterns.md +424 -0
  356. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
  357. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
  358. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
  359. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
  360. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
  361. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
  362. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
  363. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
  364. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
  365. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
  366. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
  367. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
  368. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
  369. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
  370. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
  371. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
  372. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
  373. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
  374. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
  375. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
  376. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
  377. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
  378. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
  379. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
  380. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
  381. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
  382. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
  383. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
  384. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
  385. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
  386. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
  387. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
  388. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
  389. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
  390. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
  391. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
  392. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
  393. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
  394. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
  395. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
  396. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
  397. package/embedded-knowledge/domains/roger-reviewer/samples/testability-code-smells.md +256 -0
  398. package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +67 -0
  399. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
  400. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
  401. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
  402. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
  403. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
  404. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
  405. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
  406. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
  407. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
  408. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
  409. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
  410. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
  411. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
  412. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
  413. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
  414. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
  415. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
  416. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
  417. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
  418. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
  419. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
  420. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
  421. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
  422. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
  423. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
  424. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
  425. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
  426. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
  427. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
  428. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
  429. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
  430. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
  431. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
  432. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
  433. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
  434. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
  435. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
  436. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
  437. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
  438. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
  439. package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
  440. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
  441. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
  442. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
  443. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +146 -0
  444. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
  445. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
  446. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
  447. package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
  448. package/embedded-knowledge/indexes/domain-catalog.json +106 -0
  449. package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
  450. package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
  451. package/embedded-knowledge/indexes/tags/access-control.json +1 -0
  452. package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
  453. package/embedded-knowledge/indexes/tags/actions.json +1 -0
  454. package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
  455. package/embedded-knowledge/indexes/tags/advanced.json +1 -0
  456. package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
  457. package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
  458. package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
  459. package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
  460. package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
  461. package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
  462. package/embedded-knowledge/indexes/tags/analytics.json +1 -0
  463. package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
  464. package/embedded-knowledge/indexes/tags/api-design.json +1 -0
  465. package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
  466. package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
  467. package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
  468. package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
  469. package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
  470. package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
  471. package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
  472. package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
  473. package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
  474. package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
  475. package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
  476. package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
  477. package/embedded-knowledge/indexes/tags/api.json +1 -0
  478. package/embedded-knowledge/indexes/tags/architecture.json +1 -0
  479. package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
  480. package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
  481. package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
  482. package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
  483. package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
  484. package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
  485. package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
  486. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
  487. package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
  488. package/embedded-knowledge/indexes/tags/binding.json +1 -0
  489. package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
  490. package/embedded-knowledge/indexes/tags/blocks.json +1 -0
  491. package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
  492. package/embedded-knowledge/indexes/tags/branching.json +1 -0
  493. package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
  494. package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
  495. package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
  496. package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
  497. package/embedded-knowledge/indexes/tags/business-process.json +1 -0
  498. package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
  499. package/embedded-knowledge/indexes/tags/caching.json +1 -0
  500. package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
  501. package/embedded-knowledge/indexes/tags/case.json +1 -0
  502. package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
  503. package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
  504. package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
  505. package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
  506. package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
  507. package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
  508. package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
  509. package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
  510. package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
  511. package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
  512. package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
  513. package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
  514. package/embedded-knowledge/indexes/tags/code-style.json +1 -0
  515. package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
  516. package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
  517. package/embedded-knowledge/indexes/tags/comments.json +1 -0
  518. package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
  519. package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
  520. package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
  521. package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
  522. package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
  523. package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
  524. package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
  525. package/embedded-knowledge/indexes/tags/conditional.json +1 -0
  526. package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
  527. package/embedded-knowledge/indexes/tags/consistency.json +1 -0
  528. package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
  529. package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
  530. package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
  531. package/embedded-knowledge/indexes/tags/correlation.json +1 -0
  532. package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
  533. package/embedded-knowledge/indexes/tags/data-access.json +1 -0
  534. package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
  535. package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
  536. package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
  537. package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
  538. package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
  539. package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
  540. package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
  541. package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
  542. package/embedded-knowledge/indexes/tags/database.json +1 -0
  543. package/embedded-knowledge/indexes/tags/debugging.json +1 -0
  544. package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
  545. package/embedded-knowledge/indexes/tags/declaration.json +1 -0
  546. package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
  547. package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
  548. package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
  549. package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
  550. package/embedded-knowledge/indexes/tags/deployment.json +1 -0
  551. package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
  552. package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
  553. package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
  554. package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
  555. package/embedded-knowledge/indexes/tags/documentation.json +1 -0
  556. package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
  557. package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
  558. package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
  559. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
  560. package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
  561. package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
  562. package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
  563. package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
  564. package/embedded-knowledge/indexes/tags/error-text.json +1 -0
  565. package/embedded-knowledge/indexes/tags/etag.json +1 -0
  566. package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
  567. package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
  568. package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
  569. package/embedded-knowledge/indexes/tags/events.json +1 -0
  570. package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
  571. package/embedded-knowledge/indexes/tags/expressions.json +1 -0
  572. package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
  573. package/embedded-knowledge/indexes/tags/extensions.json +1 -0
  574. package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
  575. package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
  576. package/embedded-knowledge/indexes/tags/field-control.json +1 -0
  577. package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
  578. package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
  579. package/embedded-knowledge/indexes/tags/field-state.json +1 -0
  580. package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
  581. package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
  582. package/embedded-knowledge/indexes/tags/fields.json +1 -0
  583. package/embedded-knowledge/indexes/tags/filtering.json +1 -0
  584. package/embedded-knowledge/indexes/tags/filters.json +1 -0
  585. package/embedded-knowledge/indexes/tags/formatting.json +1 -0
  586. package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
  587. package/embedded-knowledge/indexes/tags/http-status.json +1 -0
  588. package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
  589. package/embedded-knowledge/indexes/tags/implementation.json +1 -0
  590. package/embedded-knowledge/indexes/tags/indentation.json +1 -0
  591. package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
  592. package/embedded-knowledge/indexes/tags/indexing.json +1 -0
  593. package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
  594. package/embedded-knowledge/indexes/tags/integration.json +1 -0
  595. package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
  596. package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
  597. package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
  598. package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
  599. package/embedded-knowledge/indexes/tags/isolation.json +1 -0
  600. package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
  601. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
  602. package/embedded-knowledge/indexes/tags/keywords.json +1 -0
  603. package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
  604. package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
  605. package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
  606. package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
  607. package/embedded-knowledge/indexes/tags/localization.json +1 -0
  608. package/embedded-knowledge/indexes/tags/logging.json +1 -0
  609. package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
  610. package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
  611. package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
  612. package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
  613. package/embedded-knowledge/indexes/tags/memory.json +1 -0
  614. package/embedded-knowledge/indexes/tags/message-design.json +1 -0
  615. package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
  616. package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
  617. package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
  618. package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
  619. package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
  620. package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
  621. package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
  622. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
  623. package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
  624. package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
  625. package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
  626. package/embedded-knowledge/indexes/tags/naming.json +1 -0
  627. package/embedded-knowledge/indexes/tags/navigation.json +1 -0
  628. package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
  629. package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
  630. package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
  631. package/embedded-knowledge/indexes/tags/no-series.json +1 -0
  632. package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
  633. package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
  634. package/embedded-knowledge/indexes/tags/odata.json +1 -0
  635. package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
  636. package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
  637. package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
  638. package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
  639. package/embedded-knowledge/indexes/tags/operators.json +1 -0
  640. package/embedded-knowledge/indexes/tags/optimization.json +1 -0
  641. package/embedded-knowledge/indexes/tags/order.json +1 -0
  642. package/embedded-knowledge/indexes/tags/organization.json +1 -0
  643. package/embedded-knowledge/indexes/tags/pages.json +1 -0
  644. package/embedded-knowledge/indexes/tags/parameters.json +1 -0
  645. package/embedded-knowledge/indexes/tags/patterns.json +1 -0
  646. package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
  647. package/embedded-knowledge/indexes/tags/performance.json +1 -0
  648. package/embedded-knowledge/indexes/tags/placement.json +1 -0
  649. package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
  650. package/embedded-knowledge/indexes/tags/posting.json +1 -0
  651. package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
  652. package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
  653. package/embedded-knowledge/indexes/tags/privacy.json +1 -0
  654. package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
  655. package/embedded-knowledge/indexes/tags/production.json +1 -0
  656. package/embedded-knowledge/indexes/tags/productivity.json +1 -0
  657. package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
  658. package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
  659. package/embedded-knowledge/indexes/tags/ranges.json +1 -0
  660. package/embedded-knowledge/indexes/tags/readability.json +1 -0
  661. package/embedded-knowledge/indexes/tags/record-access.json +1 -0
  662. package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
  663. package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
  664. package/embedded-knowledge/indexes/tags/reference.json +1 -0
  665. package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
  666. package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
  667. package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
  668. package/embedded-knowledge/indexes/tags/runtime.json +1 -0
  669. package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
  670. package/embedded-knowledge/indexes/tags/security.json +1 -0
  671. package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
  672. package/embedded-knowledge/indexes/tags/serialization.json +1 -0
  673. package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
  674. package/embedded-knowledge/indexes/tags/session.json +1 -0
  675. package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
  676. package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
  677. package/embedded-knowledge/indexes/tags/sift.json +1 -0
  678. package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
  679. package/embedded-knowledge/indexes/tags/spacing.json +1 -0
  680. package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
  681. package/embedded-knowledge/indexes/tags/standards.json +1 -0
  682. package/embedded-knowledge/indexes/tags/statements.json +1 -0
  683. package/embedded-knowledge/indexes/tags/streaming.json +1 -0
  684. package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
  685. package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
  686. package/embedded-knowledge/indexes/tags/structure.json +1 -0
  687. package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
  688. package/embedded-knowledge/indexes/tags/switch.json +1 -0
  689. package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
  690. package/embedded-knowledge/indexes/tags/syntax.json +1 -0
  691. package/embedded-knowledge/indexes/tags/systemid.json +1 -0
  692. package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
  693. package/embedded-knowledge/indexes/tags/table-events.json +1 -0
  694. package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
  695. package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
  696. package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
  697. package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
  698. package/embedded-knowledge/indexes/tags/template-method.json +1 -0
  699. package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
  700. package/embedded-knowledge/indexes/tags/testfield.json +1 -0
  701. package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
  702. package/embedded-knowledge/indexes/tags/triggers.json +1 -0
  703. package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
  704. package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
  705. package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
  706. package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
  707. package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
  708. package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
  709. package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
  710. package/embedded-knowledge/indexes/tags/validation.json +1 -0
  711. package/embedded-knowledge/indexes/tags/variables.json +1 -0
  712. package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
  713. package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
  714. package/embedded-knowledge/indexes/tags/web-services.json +1 -0
  715. package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
  716. package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
  717. package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
  718. package/embedded-knowledge/indexes/tags/workspace.json +1 -0
  719. package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
  720. package/embedded-knowledge/indexes/topic-relationships.json +128 -0
  721. package/embedded-knowledge/methodologies/index.json +81 -0
  722. package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
  723. package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
  724. package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
  725. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
  726. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
  727. package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
  728. package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
  729. package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
  730. package/embedded-knowledge/methodologies/phases/performance.md +211 -0
  731. package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
  732. package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
  733. package/embedded-knowledge/methodologies/phases/verification.md +146 -0
  734. package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
  735. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
  736. package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +535 -0
  737. package/embedded-knowledge/specialists/alex-architect.md +305 -0
  738. package/embedded-knowledge/specialists/casey-copilot.md +314 -0
  739. package/embedded-knowledge/specialists/chris-config.md +226 -0
  740. package/embedded-knowledge/specialists/dean-debug.md +365 -0
  741. package/embedded-knowledge/specialists/eva-errors.md +291 -0
  742. package/embedded-knowledge/specialists/jordan-bridge.md +291 -0
  743. package/embedded-knowledge/specialists/logan-legacy.md +265 -0
  744. package/embedded-knowledge/specialists/maya-mentor.md +299 -0
  745. package/embedded-knowledge/specialists/morgan-market.md +281 -0
  746. package/embedded-knowledge/specialists/parker-pragmatic.md +564 -0
  747. package/embedded-knowledge/specialists/quinn-tester.md +323 -0
  748. package/embedded-knowledge/specialists/roger-reviewer.md +317 -0
  749. package/embedded-knowledge/specialists/sam-coder.md +342 -0
  750. package/embedded-knowledge/specialists/seth-security.md +290 -0
  751. package/embedded-knowledge/specialists/taylor-docs.md +312 -0
  752. package/embedded-knowledge/specialists/uma-ux.md +291 -0
  753. package/package.json +82 -0
@@ -0,0 +1,316 @@
1
+ # SetLoadFields Placement Before Case Statements - AL Code Samples
2
+
3
+ ## Basic Case Statement Placement
4
+ ```al
5
+ codeunit 50400 "Case Statement Placement"
6
+ {
7
+ procedure CorrectCaseStatementPattern()
8
+ var
9
+ SalesHeader: Record "Sales Header";
10
+ begin
11
+ // CORRECT: SetLoadFields before case statement evaluation
12
+ SalesHeader.SetLoadFields("Document Type", "No.", "Sell-to Customer Name", "Amount Including VAT");
13
+ SalesHeader.SetRange(Status, SalesHeader.Status::Open);
14
+
15
+ if SalesHeader.FindSet() then
16
+ repeat
17
+ // Case statement after SetLoadFields - all needed fields already loaded
18
+ case SalesHeader."Document Type" of
19
+ SalesHeader."Document Type"::Quote:
20
+ ProcessQuote(SalesHeader."No.", SalesHeader."Sell-to Customer Name");
21
+ SalesHeader."Document Type"::Order:
22
+ ProcessOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name", SalesHeader."Amount Including VAT");
23
+ SalesHeader."Document Type"::Invoice:
24
+ ProcessInvoice(SalesHeader."No.", SalesHeader."Amount Including VAT");
25
+ SalesHeader."Document Type"::"Credit Memo":
26
+ ProcessCreditMemo(SalesHeader."No.", SalesHeader."Amount Including VAT");
27
+ end;
28
+ until SalesHeader.Next() = 0;
29
+ end;
30
+
31
+ procedure IncorrectCaseStatementPattern()
32
+ var
33
+ SalesHeader: Record "Sales Header";
34
+ begin
35
+ // INCORRECT: SetLoadFields inside case statement branches
36
+ SalesHeader.SetRange(Status, SalesHeader.Status::Open);
37
+
38
+ if SalesHeader.FindSet() then
39
+ repeat
40
+ case SalesHeader."Document Type" of
41
+ SalesHeader."Document Type"::Quote:
42
+ begin
43
+ // SetLoadFields called too late - Document Type field already accessed for case evaluation
44
+ SalesHeader.SetLoadFields("No.", "Sell-to Customer Name");
45
+ ProcessQuote(SalesHeader."No.", SalesHeader."Sell-to Customer Name");
46
+ end;
47
+ SalesHeader."Document Type"::Order:
48
+ begin
49
+ SalesHeader.SetLoadFields("No.", "Sell-to Customer Name", "Amount Including VAT");
50
+ ProcessOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name", SalesHeader."Amount Including VAT");
51
+ end;
52
+ end;
53
+ until SalesHeader.Next() = 0;
54
+ end;
55
+
56
+ local procedure ProcessQuote(DocumentNo: Code[20]; CustomerName: Text[100])
57
+ begin
58
+ // Process quote
59
+ end;
60
+
61
+ local procedure ProcessOrder(DocumentNo: Code[20]; CustomerName: Text[100]; Amount: Decimal)
62
+ begin
63
+ // Process order
64
+ end;
65
+
66
+ local procedure ProcessInvoice(DocumentNo: Code[20]; Amount: Decimal)
67
+ begin
68
+ // Process invoice
69
+ end;
70
+
71
+ local procedure ProcessCreditMemo(DocumentNo: Code[20]; Amount: Decimal)
72
+ begin
73
+ // Process credit memo
74
+ end;
75
+ }
76
+ ```
77
+
78
+ ## Advanced Case Statement Patterns
79
+ ```al
80
+ codeunit 50401 "Advanced Case Placement"
81
+ {
82
+ procedure ComplexCaseStatementOptimization()
83
+ var
84
+ SalesLine: Record "Sales Line";
85
+ begin
86
+ // Load all fields that might be needed by any case branch
87
+ SalesLine.SetLoadFields("Document Type", "Document No.", "Line No.", "Type", "No.",
88
+ "Quantity", "Unit Price", "Line Amount");
89
+ SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
90
+
91
+ if SalesLine.FindSet() then
92
+ repeat
93
+ // Primary case statement for line type
94
+ case SalesLine.Type of
95
+ SalesLine.Type::Item:
96
+ ProcessItemLine(SalesLine);
97
+ SalesLine.Type::Resource:
98
+ ProcessResourceLine(SalesLine);
99
+ SalesLine.Type::"G/L Account":
100
+ ProcessGLAccountLine(SalesLine);
101
+ SalesLine.Type::"Charge (Item)":
102
+ ProcessItemChargeLine(SalesLine);
103
+ else
104
+ HandleUnknownLineType(SalesLine);
105
+ end;
106
+ until SalesLine.Next() = 0;
107
+ end;
108
+
109
+ procedure NestedCaseStatementExample()
110
+ var
111
+ Item: Record Item;
112
+ begin
113
+ // SetLoadFields covers all fields needed by nested case statements
114
+ Item.SetLoadFields("No.", "Type", "Item Category Code", "Unit Price", "Inventory", "Blocked");
115
+ Item.SetRange("No.", '1000', '9999');
116
+
117
+ if Item.FindSet() then
118
+ repeat
119
+ // Outer case statement
120
+ case Item.Type of
121
+ Item.Type::Inventory,
122
+ Item.Type::"Non-Inventory":
123
+ begin
124
+ // Inner case statement - fields already loaded
125
+ case Item."Item Category Code" of
126
+ 'CHAIR':
127
+ ProcessChairItem(Item."No.", Item."Unit Price");
128
+ 'TABLE':
129
+ ProcessTableItem(Item."No.", Item.Inventory);
130
+ 'DESK':
131
+ ProcessDeskItem(Item."No.", Item."Unit Price", Item.Inventory);
132
+ else
133
+ ProcessGeneralItem(Item."No.");
134
+ end;
135
+ end;
136
+ Item.Type::Service:
137
+ ProcessServiceItem(Item."No.", Item."Unit Price");
138
+ end;
139
+ until Item.Next() = 0;
140
+ end;
141
+
142
+ procedure ConditionalCaseStatements()
143
+ var
144
+ Customer: Record Customer;
145
+ ProcessHighPriority: Boolean;
146
+ begin
147
+ // SetLoadFields accounts for all possible case statement branches
148
+ Customer.SetLoadFields("No.", "Name", "Customer Posting Group", "Credit Limit (LCY)",
149
+ "Balance (LCY)", "Phone No.");
150
+
151
+ ProcessHighPriority := Time > 120000T; // After noon, process high priority
152
+
153
+ if Customer.FindSet() then
154
+ repeat
155
+ if ProcessHighPriority then begin
156
+ // High priority case statement
157
+ case Customer."Customer Posting Group" of
158
+ 'VIP':
159
+ if Customer."Credit Limit (LCY)" > 100000 then
160
+ ProcessVIPCustomer(Customer."No.", Customer.Name, Customer."Credit Limit (LCY)");
161
+ 'CORPORATE':
162
+ ProcessCorporateCustomer(Customer."No.", Customer."Balance (LCY)");
163
+ end;
164
+ end else begin
165
+ // Standard priority case statement
166
+ case Customer."Customer Posting Group" of
167
+ 'DOMESTIC':
168
+ ProcessDomesticCustomer(Customer."No.", Customer.Name);
169
+ 'FOREIGN':
170
+ ProcessForeignCustomer(Customer."No.", Customer."Phone No.");
171
+ end;
172
+ end;
173
+ until Customer.Next() = 0;
174
+ end;
175
+
176
+ // Helper procedures for line processing
177
+ local procedure ProcessItemLine(var SalesLine: Record "Sales Line")
178
+ begin
179
+ // Item line processing using pre-loaded fields
180
+ Message('Processing Item Line: %1, Qty: %2', SalesLine."No.", SalesLine.Quantity);
181
+ end;
182
+
183
+ local procedure ProcessResourceLine(var SalesLine: Record "Sales Line")
184
+ begin
185
+ // Resource line processing
186
+ Message('Processing Resource Line: %1, Amount: %2', SalesLine."No.", SalesLine."Line Amount");
187
+ end;
188
+
189
+ local procedure ProcessGLAccountLine(var SalesLine: Record "Sales Line")
190
+ begin
191
+ // G/L Account line processing
192
+ Message('Processing G/L Account Line: %1', SalesLine."No.");
193
+ end;
194
+
195
+ local procedure ProcessItemChargeLine(var SalesLine: Record "Sales Line")
196
+ begin
197
+ // Item charge processing
198
+ Message('Processing Item Charge Line: %1', SalesLine."No.");
199
+ end;
200
+
201
+ local procedure HandleUnknownLineType(var SalesLine: Record "Sales Line")
202
+ begin
203
+ Error('Unknown line type for document %1, line %2', SalesLine."Document No.", SalesLine."Line No.");
204
+ end;
205
+
206
+ local procedure ProcessChairItem(ItemNo: Code[20]; UnitPrice: Decimal)
207
+ begin
208
+ Message('Chair Item: %1, Price: %2', ItemNo, UnitPrice);
209
+ end;
210
+
211
+ local procedure ProcessTableItem(ItemNo: Code[20]; Inventory: Decimal)
212
+ begin
213
+ Message('Table Item: %1, Inventory: %2', ItemNo, Inventory);
214
+ end;
215
+
216
+ local procedure ProcessDeskItem(ItemNo: Code[20]; UnitPrice: Decimal; Inventory: Decimal)
217
+ begin
218
+ Message('Desk Item: %1, Price: %2, Inventory: %3', ItemNo, UnitPrice, Inventory);
219
+ end;
220
+
221
+ local procedure ProcessGeneralItem(ItemNo: Code[20])
222
+ begin
223
+ Message('General Item: %1', ItemNo);
224
+ end;
225
+
226
+ local procedure ProcessServiceItem(ItemNo: Code[20]; UnitPrice: Decimal)
227
+ begin
228
+ Message('Service Item: %1, Price: %2', ItemNo, UnitPrice);
229
+ end;
230
+
231
+ local procedure ProcessVIPCustomer(CustomerNo: Code[20]; Name: Text[100]; CreditLimit: Decimal)
232
+ begin
233
+ Message('VIP Customer: %1 - %2, Credit Limit: %3', CustomerNo, Name, CreditLimit);
234
+ end;
235
+
236
+ local procedure ProcessCorporateCustomer(CustomerNo: Code[20]; Balance: Decimal)
237
+ begin
238
+ Message('Corporate Customer: %1, Balance: %2', CustomerNo, Balance);
239
+ end;
240
+
241
+ local procedure ProcessDomesticCustomer(CustomerNo: Code[20]; Name: Text[100])
242
+ begin
243
+ Message('Domestic Customer: %1 - %2', CustomerNo, Name);
244
+ end;
245
+
246
+ local procedure ProcessForeignCustomer(CustomerNo: Code[20]; PhoneNo: Text[30])
247
+ begin
248
+ Message('Foreign Customer: %1, Phone: %2', CustomerNo, PhoneNo);
249
+ end;
250
+ }
251
+ ```
252
+
253
+ ## Performance Impact Analysis
254
+ ```al
255
+ codeunit 50402 "Case Statement Performance"
256
+ {
257
+ procedure DemonstratePerformanceImpact()
258
+ var
259
+ Item: Record Item;
260
+ StartTime: DateTime;
261
+ EndTime: DateTime;
262
+ begin
263
+ // Scenario 1: SetLoadFields after case statement evaluation (inefficient)
264
+ StartTime := CurrentDateTime();
265
+ Item.SetRange("Item Category Code", 'CHAIR');
266
+
267
+ if Item.FindSet() then
268
+ repeat
269
+ // Item Category Code accessed before SetLoadFields - loads all fields
270
+ case Item."Item Category Code" of
271
+ 'CHAIR':
272
+ begin
273
+ Item.SetLoadFields("No.", "Unit Price"); // Too late
274
+ ProcessChairItem(Item."No.", Item."Unit Price");
275
+ end;
276
+ 'TABLE':
277
+ begin
278
+ Item.SetLoadFields("No.", "Inventory"); // Too late
279
+ ProcessTableItem(Item."No.", Item.Inventory);
280
+ end;
281
+ end;
282
+ until Item.Next() = 0;
283
+ EndTime := CurrentDateTime();
284
+ Message('Inefficient approach: %1 ms', EndTime - StartTime);
285
+
286
+ // Scenario 2: SetLoadFields before case statement evaluation (efficient)
287
+ StartTime := CurrentDateTime();
288
+ Item.Reset();
289
+ Item.SetLoadFields("Item Category Code", "No.", "Unit Price", "Inventory"); // Before case evaluation
290
+ Item.SetRange("Item Category Code", 'CHAIR');
291
+
292
+ if Item.FindSet() then
293
+ repeat
294
+ // Item Category Code already loaded efficiently
295
+ case Item."Item Category Code" of
296
+ 'CHAIR':
297
+ ProcessChairItem(Item."No.", Item."Unit Price");
298
+ 'TABLE':
299
+ ProcessTableItem(Item."No.", Item.Inventory);
300
+ end;
301
+ until Item.Next() = 0;
302
+ EndTime := CurrentDateTime();
303
+ Message('Efficient approach: %1 ms', EndTime - StartTime);
304
+ end;
305
+
306
+ local procedure ProcessChairItem(ItemNo: Code[20]; UnitPrice: Decimal)
307
+ begin
308
+ // Process chair item
309
+ end;
310
+
311
+ local procedure ProcessTableItem(ItemNo: Code[20]; Inventory: Decimal)
312
+ begin
313
+ // Process table item
314
+ end;
315
+ }
316
+ ```
@@ -0,0 +1,223 @@
1
+ # SetLoadFields Placement Before Filters - AL Code Samples
2
+
3
+ ## Basic Before Filter Placement
4
+ ```al
5
+ codeunit 50300 "Before Filter Placement"
6
+ {
7
+ procedure CorrectPlacementExample()
8
+ var
9
+ SalesHeader: Record "Sales Header";
10
+ begin
11
+ // CORRECT: SetLoadFields called before any filters
12
+ SalesHeader.SetLoadFields("No.", "Sell-to Customer Name", "Amount Including VAT");
13
+
14
+ // Filters applied after SetLoadFields
15
+ SalesHeader.SetRange("Sell-to Customer No.", '10000', '50000');
16
+ SalesHeader.SetRange("Document Date", WorkDate() - 30, WorkDate());
17
+ SalesHeader.SetRange(Status, SalesHeader.Status::Open);
18
+
19
+ if SalesHeader.FindSet() then
20
+ repeat
21
+ ProcessOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name", SalesHeader."Amount Including VAT");
22
+ until SalesHeader.Next() = 0;
23
+ end;
24
+
25
+ procedure IncorrectPlacementExample()
26
+ var
27
+ SalesHeader: Record "Sales Header";
28
+ begin
29
+ // INCORRECT: Filters applied before SetLoadFields
30
+ SalesHeader.SetRange("Sell-to Customer No.", '10000', '50000');
31
+ SalesHeader.SetRange("Document Date", WorkDate() - 30, WorkDate());
32
+
33
+ // SetLoadFields called after filters - may not be fully effective
34
+ SalesHeader.SetLoadFields("No.", "Sell-to Customer Name", "Amount Including VAT");
35
+ SalesHeader.SetRange(Status, SalesHeader.Status::Open);
36
+
37
+ if SalesHeader.FindSet() then
38
+ repeat
39
+ ProcessOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name", SalesHeader."Amount Including VAT");
40
+ until SalesHeader.Next() = 0;
41
+ end;
42
+
43
+ procedure MultipleFilterSetExample()
44
+ var
45
+ Item: Record Item;
46
+ begin
47
+ // SetLoadFields must be first, before any filtering operations
48
+ Item.SetLoadFields("No.", "Description", "Unit Price", "Inventory");
49
+
50
+ // Multiple filter operations - all after SetLoadFields
51
+ Item.SetRange("No.", '1000', '9999');
52
+ Item.SetFilter("Last Date Modified", '>=%1', CalcDate('-6M', WorkDate()));
53
+ Item.SetFilter("Item Category Code", 'CHAIR|TABLE|DESK');
54
+ Item.SetFilter("Unit Price", '>=%1', 50);
55
+
56
+ if Item.FindSet() then
57
+ repeat
58
+ ProcessInventoryItem(Item."No.", Item.Description, Item."Unit Price", Item.Inventory);
59
+ until Item.Next() = 0;
60
+ end;
61
+
62
+ local procedure ProcessOrder(OrderNo: Code[20]; CustomerName: Text[100]; Amount: Decimal)
63
+ begin
64
+ // Process order data
65
+ end;
66
+
67
+ local procedure ProcessInventoryItem(ItemNo: Code[20]; Description: Text[100]; UnitPrice: Decimal; Inventory: Decimal)
68
+ begin
69
+ // Process inventory item
70
+ end;
71
+ }
72
+ ```
73
+
74
+ ## Advanced Placement Patterns
75
+ ```al
76
+ codeunit 50301 "Advanced Filter Placement"
77
+ {
78
+ procedure ConditionalFilteringExample(CustomerNo: Code[20]; IncludeShipped: Boolean)
79
+ var
80
+ SalesHeader: Record "Sales Header";
81
+ begin
82
+ // SetLoadFields always first, regardless of conditional logic
83
+ SalesHeader.SetLoadFields("No.", "Sell-to Customer Name", "Amount Including VAT", "Shipment Date");
84
+
85
+ // Base filters
86
+ SalesHeader.SetRange("Sell-to Customer No.", CustomerNo);
87
+ SalesHeader.SetRange("Document Date", WorkDate() - 90, WorkDate());
88
+
89
+ // Conditional filters - still after SetLoadFields
90
+ if not IncludeShipped then
91
+ SalesHeader.SetRange("Completely Shipped", false);
92
+
93
+ if SalesHeader.FindSet() then
94
+ repeat
95
+ ProcessCustomerOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name",
96
+ SalesHeader."Amount Including VAT", SalesHeader."Shipment Date");
97
+ until SalesHeader.Next() = 0;
98
+ end;
99
+
100
+ procedure ResetAndRefilterExample()
101
+ var
102
+ Customer: Record Customer;
103
+ begin
104
+ // Initial setup with SetLoadFields first
105
+ Customer.SetLoadFields("No.", "Name", "Credit Limit (LCY)");
106
+ Customer.SetRange("No.", '10000', '30000');
107
+
108
+ ProcessCustomerSet(Customer, 'First batch');
109
+
110
+ // When resetting filters, SetLoadFields should be called again if changing field selection
111
+ Customer.Reset();
112
+ Customer.SetLoadFields("No.", "Name", "Phone No."); // Different fields
113
+ Customer.SetRange("No.", '40000', '60000');
114
+
115
+ ProcessCustomerSet(Customer, 'Second batch');
116
+ end;
117
+
118
+ procedure DynamicFilteringExample()
119
+ var
120
+ Item: Record Item;
121
+ FilterCategoryCode: Code[20];
122
+ FilterBlocked: Boolean;
123
+ i: Integer;
124
+ begin
125
+ // SetLoadFields established before any dynamic filtering
126
+ Item.SetLoadFields("No.", "Description", "Item Category Code", "Unit Price");
127
+
128
+ // Dynamic filtering loop - filters change but SetLoadFields remains effective
129
+ for i := 1 to 3 do begin
130
+ case i of
131
+ 1: FilterCategoryCode := 'CHAIR';
132
+ 2: FilterCategoryCode := 'TABLE';
133
+ 3: FilterCategoryCode := 'DESK';
134
+ end;
135
+ FilterBlocked := i mod 2 = 0; // Alternate blocked status
136
+
137
+ Item.Reset();
138
+ Item.SetRange("Item Category Code", FilterCategoryCode);
139
+ Item.SetRange(Blocked, FilterBlocked);
140
+
141
+ ProcessItemSet(Item, StrSubstNo('Category %1', FilterCategoryCode));
142
+ end;
143
+ end;
144
+
145
+ local procedure ProcessCustomerOrder(OrderNo: Code[20]; CustomerName: Text[100]; Amount: Decimal; ShipmentDate: Date)
146
+ begin
147
+ // Process customer order
148
+ end;
149
+
150
+ local procedure ProcessCustomerSet(var Customer: Record Customer; BatchName: Text)
151
+ begin
152
+ if Customer.FindSet() then
153
+ repeat
154
+ // Process customer based on loaded fields
155
+ Message('Processing %1: Customer %2', BatchName, Customer."No.");
156
+ until Customer.Next() = 0;
157
+ end;
158
+
159
+ local procedure ProcessItemSet(var Item: Record Item; BatchName: Text)
160
+ begin
161
+ if Item.FindSet() then
162
+ repeat
163
+ // Process item based on loaded fields
164
+ Message('Processing %1: Item %2 - %3', BatchName, Item."No.", Item.Description);
165
+ until Item.Next() = 0;
166
+ end;
167
+ }
168
+ ```
169
+
170
+ ## Common Placement Mistakes
171
+ ```al
172
+ codeunit 50302 "Filter Placement Mistakes"
173
+ {
174
+ procedure MistakeExample_FiltersFirst()
175
+ var
176
+ Customer: Record Customer;
177
+ begin
178
+ // MISTAKE: Applying filters before SetLoadFields
179
+ Customer.SetRange("No.", '10000');
180
+ Customer.SetRange("Customer Posting Group", 'DOMESTIC');
181
+
182
+ // SetLoadFields less effective when called after filters
183
+ Customer.SetLoadFields("No.", "Name", "Credit Limit (LCY)");
184
+
185
+ // This works but is suboptimal
186
+ if Customer.FindSet() then
187
+ repeat
188
+ ProcessCustomer(Customer."No.", Customer.Name, Customer."Credit Limit (LCY)");
189
+ until Customer.Next() = 0;
190
+ end;
191
+
192
+ procedure BestPracticePattern()
193
+ var
194
+ Customer: Record Customer;
195
+ begin
196
+ // BEST PRACTICE: Clear separation of concerns
197
+ // 1. Field loading configuration
198
+ Customer.SetLoadFields("No.", "Name", "Credit Limit (LCY)", "Phone No.");
199
+
200
+ // 2. Data filtering
201
+ Customer.SetRange("No.", '10000', '50000');
202
+ Customer.SetFilter("Last Date Modified", '>=%1', CalcDate('-3M', WorkDate()));
203
+ Customer.SetRange("Customer Posting Group", 'DOMESTIC');
204
+
205
+ // 3. Data processing
206
+ if Customer.FindSet() then
207
+ repeat
208
+ ProcessCustomerWithPhone(Customer."No.", Customer.Name,
209
+ Customer."Credit Limit (LCY)", Customer."Phone No.");
210
+ until Customer.Next() = 0;
211
+ end;
212
+
213
+ local procedure ProcessCustomer(CustomerNo: Code[20]; Name: Text[100]; CreditLimit: Decimal)
214
+ begin
215
+ // Process basic customer data
216
+ end;
217
+
218
+ local procedure ProcessCustomerWithPhone(CustomerNo: Code[20]; Name: Text[100]; CreditLimit: Decimal; PhoneNo: Text[30])
219
+ begin
220
+ // Process customer with phone information
221
+ end;
222
+ }
223
+ ```
@@ -0,0 +1,149 @@
1
+ # SetLoadFields Filter Field Exclusion - AL Code Samples
2
+
3
+ ## Basic Filter Field Exclusion
4
+ ```al
5
+ codeunit 50200 "Filter Field Exclusion Examples"
6
+ {
7
+ procedure ExcludeFilterFieldsBasic()
8
+ var
9
+ Customer: Record Customer;
10
+ begin
11
+ // Exclude filter fields from loading - they're used for filtering only
12
+ Customer.SetLoadFields("Name", "Credit Limit (LCY)", "Phone No.");
13
+
14
+ // Filter fields (No., Customer Posting Group) not loaded - filtering uses cached values
15
+ Customer.SetRange("No.", '10000', '20000');
16
+ Customer.SetRange("Customer Posting Group", 'DOMESTIC');
17
+ Customer.SetRange("Blocked", Customer.Blocked::" ");
18
+
19
+ if Customer.FindSet() then
20
+ repeat
21
+ // Only non-filter fields loaded, improving performance
22
+ ProcessCustomerData(Customer.Name, Customer."Credit Limit (LCY)", Customer."Phone No.");
23
+ until Customer.Next() = 0;
24
+ end;
25
+
26
+ procedure ComplexFilterExclusion()
27
+ var
28
+ Item: Record Item;
29
+ begin
30
+ // Complex filtering scenario - exclude all filter fields from loading
31
+ Item.SetLoadFields("Description", "Unit Price", "Inventory");
32
+
33
+ // Multiple filter fields - all excluded from SetLoadFields
34
+ Item.SetRange("No.", '1000', '9999');
35
+ Item.SetFilter("Item Category Code", 'CHAIR|TABLE|DESK');
36
+ Item.SetRange("Blocked", false);
37
+ Item.SetFilter("Unit Price", '>%1', 100);
38
+ Item.SetRange("Type", Item.Type::Inventory);
39
+
40
+ if Item.FindSet() then
41
+ repeat
42
+ // Filter fields available for validation but not loaded from database
43
+ if ShouldProcessItem(Item."No.", Item."Item Category Code") then
44
+ ProcessItemData(Item.Description, Item."Unit Price", Item.Inventory);
45
+ until Item.Next() = 0;
46
+ end;
47
+
48
+ procedure ConditionalFilterExclusion(IncludeFilterFields: Boolean)
49
+ var
50
+ SalesLine: Record "Sales Line";
51
+ begin
52
+ if IncludeFilterFields then
53
+ // When filter fields needed for processing, include them
54
+ SalesLine.SetLoadFields("Document No.", "Line No.", "Type", "No.", "Quantity", "Unit Price")
55
+ else
56
+ // When filter fields not needed for processing, exclude them
57
+ SalesLine.SetLoadFields("Quantity", "Unit Price");
58
+
59
+ SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
60
+ SalesLine.SetRange("Document No.", 'SO001');
61
+ SalesLine.SetRange("Type", SalesLine.Type::Item);
62
+
63
+ if SalesLine.FindSet() then
64
+ repeat
65
+ if IncludeFilterFields then
66
+ ProcessWithFilterData(SalesLine."Document No.", SalesLine."No.", SalesLine.Quantity)
67
+ else
68
+ ProcessWithoutFilterData(SalesLine.Quantity, SalesLine."Unit Price");
69
+ until SalesLine.Next() = 0;
70
+ end;
71
+
72
+ local procedure ProcessCustomerData(Name: Text[100]; CreditLimit: Decimal; PhoneNo: Text[30])
73
+ begin
74
+ // Process loaded customer data
75
+ end;
76
+
77
+ local procedure ShouldProcessItem(ItemNo: Code[20]; CategoryCode: Code[20]): Boolean
78
+ begin
79
+ exit((ItemNo <> '') and (CategoryCode <> ''));
80
+ end;
81
+
82
+ local procedure ProcessItemData(Description: Text[100]; UnitPrice: Decimal; Inventory: Decimal)
83
+ begin
84
+ // Process non-filter item data
85
+ end;
86
+
87
+ local procedure ProcessWithFilterData(DocumentNo: Code[20]; ItemNo: Code[20]; Quantity: Decimal)
88
+ begin
89
+ // Process including filter field data
90
+ end;
91
+
92
+ local procedure ProcessWithoutFilterData(Quantity: Decimal; UnitPrice: Decimal)
93
+ begin
94
+ // Process excluding filter field data
95
+ end;
96
+ }
97
+ ```
98
+
99
+ ## Performance Impact Examples
100
+ ```al
101
+ codeunit 50201 "Filter Exclusion Performance"
102
+ {
103
+ procedure DemonstratePerformanceImpact()
104
+ var
105
+ Customer: Record Customer;
106
+ StartTime: DateTime;
107
+ EndTime: DateTime;
108
+ begin
109
+ // Scenario 1: Including filter fields unnecessarily
110
+ StartTime := CurrentDateTime();
111
+ Customer.SetLoadFields(); // Loads all fields including filters
112
+ Customer.SetRange("No.", '10000', '50000');
113
+ Customer.SetRange("Customer Posting Group", 'DOMESTIC');
114
+
115
+ if Customer.FindSet() then
116
+ repeat
117
+ // Only using non-filter fields but all were loaded
118
+ ProcessCustomerSales(Customer.Name, Customer."Credit Limit (LCY)");
119
+ until Customer.Next() = 0;
120
+ EndTime := CurrentDateTime();
121
+ LogPerformance('With filter fields loaded', EndTime - StartTime);
122
+
123
+ // Scenario 2: Excluding filter fields appropriately
124
+ StartTime := CurrentDateTime();
125
+ Customer.Reset();
126
+ Customer.SetLoadFields("Name", "Credit Limit (LCY)"); // Exclude filter fields
127
+ Customer.SetRange("No.", '10000', '50000');
128
+ Customer.SetRange("Customer Posting Group", 'DOMESTIC');
129
+
130
+ if Customer.FindSet() then
131
+ repeat
132
+ // Only non-filter fields loaded, better performance
133
+ ProcessCustomerSales(Customer.Name, Customer."Credit Limit (LCY)");
134
+ until Customer.Next() = 0;
135
+ EndTime := CurrentDateTime();
136
+ LogPerformance('With filter fields excluded', EndTime - StartTime);
137
+ end;
138
+
139
+ local procedure ProcessCustomerSales(Name: Text[100]; CreditLimit: Decimal)
140
+ begin
141
+ // Process customer sales data
142
+ end;
143
+
144
+ local procedure LogPerformance(Scenario: Text; Duration: Duration)
145
+ begin
146
+ Message('%1: %2 ms', Scenario, Duration);
147
+ end;
148
+ }
149
+ ```