@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,319 @@
1
+ # Telemetry Performance Optimization Patterns - AL Code Samples
2
+
3
+ ## High-Performance Telemetry Architecture
4
+ ```al
5
+ codeunit 50130 "Performance Telemetry Manager"
6
+ {
7
+ var
8
+ TelemetryBuffer: List of [Text];
9
+ BatchSize: Integer;
10
+ LastFlushTime: DateTime;
11
+ FlushIntervalMs: Integer;
12
+ IsBufferingEnabled: Boolean;
13
+
14
+ // Example 1: Batched telemetry for high-volume scenarios
15
+ trigger OnRun()
16
+ begin
17
+ InitializePerformanceSettings();
18
+ end;
19
+
20
+ local procedure InitializePerformanceSettings()
21
+ begin
22
+ BatchSize := 50;
23
+ FlushIntervalMs := 30000; // 30 seconds
24
+ IsBufferingEnabled := not IsDebugMode();
25
+
26
+ if IsBufferingEnabled then
27
+ TaskScheduler.CreateTask(Codeunit::"Performance Telemetry Manager", 0, true, CompanyName(),
28
+ CurrentDateTime + FlushIntervalMs, RecordId());
29
+ end;
30
+
31
+ procedure LogPerformantEvent(EventId: Text; Message: Text; CustomDimensions: Dictionary of [Text, Text])
32
+ var
33
+ TelemetryData: Text;
34
+ begin
35
+ if IsBufferingEnabled then begin
36
+ TelemetryData := SerializeTelemetryEvent(EventId, Message, CustomDimensions);
37
+ AddToBuffer(TelemetryData);
38
+ end else begin
39
+ // Direct logging for debug scenarios
40
+ Session.LogMessage(EventId, Message, Verbosity::Normal,
41
+ DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
42
+ end;
43
+ end;
44
+
45
+ local procedure AddToBuffer(TelemetryData: Text)
46
+ begin
47
+ TelemetryBuffer.Add(TelemetryData);
48
+
49
+ if TelemetryBuffer.Count >= BatchSize then
50
+ FlushTelemetryBuffer();
51
+ end;
52
+
53
+ procedure FlushTelemetryBuffer()
54
+ var
55
+ BatchData: Text;
56
+ i: Integer;
57
+ begin
58
+ if TelemetryBuffer.Count = 0 then
59
+ exit;
60
+
61
+ for i := 1 to TelemetryBuffer.Count do begin
62
+ BatchData := TelemetryBuffer.Get(i);
63
+ ProcessBatchedTelemetryData(BatchData);
64
+ end;
65
+
66
+ TelemetryBuffer.Clear();
67
+ LastFlushTime := CurrentDateTime;
68
+ end;
69
+
70
+ local procedure ProcessBatchedTelemetryData(TelemetryData: Text)
71
+ var
72
+ EventData: Dictionary of [Text, Text];
73
+ CustomDimensions: Dictionary of [Text, Text];
74
+ begin
75
+ if DeserializeTelemetryEvent(TelemetryData, EventData) then begin
76
+ CustomDimensions := GetCustomDimensionsFromEventData(EventData);
77
+ Session.LogMessage(EventData.Get('EventId'), EventData.Get('Message'), Verbosity::Normal,
78
+ DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
79
+ end;
80
+ end;
81
+
82
+ local procedure IsDebugMode(): Boolean
83
+ begin
84
+ exit(false); // Implement debug mode detection
85
+ end;
86
+
87
+ local procedure SerializeTelemetryEvent(EventId: Text; Message: Text; CustomDimensions: Dictionary of [Text, Text]): Text
88
+ begin
89
+ // Simplified serialization - in production use proper JSON serialization
90
+ exit(EventId + '|' + Message + '|' + SerializeCustomDimensions(CustomDimensions));
91
+ end;
92
+
93
+ local procedure DeserializeTelemetryEvent(TelemetryData: Text; var EventData: Dictionary of [Text, Text]): Boolean
94
+ var
95
+ Parts: List of [Text];
96
+ DataPart: Text;
97
+ begin
98
+ Parts := TelemetryData.Split('|');
99
+ if Parts.Count >= 3 then begin
100
+ EventData.Add('EventId', Parts.Get(1));
101
+ EventData.Add('Message', Parts.Get(2));
102
+ exit(true);
103
+ end;
104
+ exit(false);
105
+ end;
106
+
107
+ local procedure GetCustomDimensionsFromEventData(EventData: Dictionary of [Text, Text]): Dictionary of [Text, Text]
108
+ var
109
+ CustomDimensions: Dictionary of [Text, Text];
110
+ begin
111
+ // Extract and deserialize custom dimensions
112
+ CustomDimensions.Add('Batched', 'true');
113
+ exit(CustomDimensions);
114
+ end;
115
+
116
+ local procedure SerializeCustomDimensions(CustomDimensions: Dictionary of [Text, Text]): Text
117
+ begin
118
+ // Implement proper serialization logic
119
+ exit('');
120
+ end;
121
+ }
122
+ ```
123
+
124
+ ## Memory-Optimized Telemetry
125
+ ```al
126
+ codeunit 50131 "Memory Optimized Telemetry"
127
+ {
128
+ // Example 2: Memory-efficient telemetry for resource-constrained scenarios
129
+ procedure LogMemoryOptimizedEvent(EventId: Text; MessageTemplate: Text; Parameters: List of [Text])
130
+ var
131
+ OptimizedMessage: Text;
132
+ MinimalDimensions: Dictionary of [Text, Text];
133
+ begin
134
+ // Use string templates to reduce memory allocation
135
+ OptimizedMessage := FormatMessageTemplate(MessageTemplate, Parameters);
136
+
137
+ // Use only essential dimensions
138
+ MinimalDimensions := GetEssentialDimensions();
139
+
140
+ Session.LogMessage(EventId, OptimizedMessage, Verbosity::Normal,
141
+ DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, MinimalDimensions);
142
+ end;
143
+
144
+ local procedure GetEssentialDimensions(): Dictionary of [Text, Text]
145
+ var
146
+ EssentialDimensions: Dictionary of [Text, Text];
147
+ begin
148
+ // Include only the most critical dimensions to minimize memory usage
149
+ EssentialDimensions.Add('U', CopyStr(UserId(), 1, 20)); // Shortened key names
150
+ EssentialDimensions.Add('C', CopyStr(CompanyName(), 1, 30));
151
+ EssentialDimensions.Add('T', Format(CurrentDateTime, 0, '<Hours24><Minutes,2><Seconds,2>'));
152
+
153
+ exit(EssentialDimensions);
154
+ end;
155
+
156
+ local procedure FormatMessageTemplate(Template: Text; Parameters: List of [Text]): Text
157
+ var
158
+ FormattedMessage: Text;
159
+ Parameter: Text;
160
+ ParameterIndex: Integer;
161
+ PlaceholderText: Text;
162
+ begin
163
+ FormattedMessage := Template;
164
+ ParameterIndex := 1;
165
+
166
+ foreach Parameter in Parameters do begin
167
+ PlaceholderText := '{' + Format(ParameterIndex) + '}';
168
+ FormattedMessage := FormattedMessage.Replace(PlaceholderText, Parameter);
169
+ ParameterIndex += 1;
170
+ end;
171
+
172
+ exit(FormattedMessage);
173
+ end;
174
+
175
+ // Example 3: Sampling for high-volume events
176
+ procedure LogSampledEvent(EventId: Text; Message: Text; SampleRate: Decimal; CustomDimensions: Dictionary of [Text, Text])
177
+ begin
178
+ if ShouldSampleEvent(SampleRate) then
179
+ Session.LogMessage(EventId, Message, Verbosity::Normal,
180
+ DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
181
+ end;
182
+
183
+ local procedure ShouldSampleEvent(SampleRate: Decimal): Boolean
184
+ var
185
+ RandomValue: Decimal;
186
+ begin
187
+ if SampleRate >= 1.0 then
188
+ exit(true);
189
+
190
+ if SampleRate <= 0.0 then
191
+ exit(false);
192
+
193
+ RandomValue := Random(10000) / 10000.0;
194
+ exit(RandomValue <= SampleRate);
195
+ end;
196
+ }
197
+ ```
198
+
199
+ ## Conditional Performance Telemetry
200
+ ```al
201
+ codeunit 50132 "Conditional Performance Telemetry"
202
+ {
203
+ // Example 4: Performance-critical path telemetry
204
+ procedure LogPerformanceCriticalEvent(EventCategory: Text; Message: Text; DetailedData: Dictionary of [Text, Text])
205
+ var
206
+ ShouldLog: Boolean;
207
+ CustomDimensions: Dictionary of [Text, Text];
208
+ begin
209
+ ShouldLog := ShouldLogEvent(EventCategory);
210
+
211
+ if ShouldLog then begin
212
+ if IsHighPerformanceMode() then
213
+ CustomDimensions := GetMinimalDimensions()
214
+ else
215
+ CustomDimensions := GetOptimizedDimensions(EventCategory);
216
+
217
+ // Merge only essential detailed data in high-performance mode
218
+ if not IsHighPerformanceMode() then
219
+ MergeDetailedData(CustomDimensions, DetailedData)
220
+ else
221
+ MergeEssentialData(CustomDimensions, DetailedData);
222
+
223
+ Session.LogMessage(GetEventId(EventCategory), Message, GetOptimalVerbosity(EventCategory),
224
+ DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
225
+ end;
226
+ end;
227
+
228
+ local procedure IsHighPerformanceMode(): Boolean
229
+ begin
230
+ // Check system load indicators
231
+ exit(GetCurrentSystemLoad() > 80);
232
+ end;
233
+
234
+ local procedure GetCurrentSystemLoad(): Integer
235
+ begin
236
+ // Simplified system load calculation
237
+ // In real implementation, consider CPU, memory, and I/O metrics
238
+ exit(Random(100));
239
+ end;
240
+
241
+ local procedure ShouldLogEvent(EventCategory: Text): Boolean
242
+ begin
243
+ case EventCategory of
244
+ 'Critical', 'Error':
245
+ exit(true); // Always log critical events
246
+ 'Performance':
247
+ exit(not IsHighPerformanceMode()); // Skip in high load
248
+ 'Debug':
249
+ exit(false); // Skip debug in production
250
+ else
251
+ exit(true);
252
+ end;
253
+ end;
254
+
255
+ local procedure GetMinimalDimensions(): Dictionary of [Text, Text]
256
+ var
257
+ MinimalDimensions: Dictionary of [Text, Text];
258
+ begin
259
+ MinimalDimensions.Add('UserID', UserId());
260
+ MinimalDimensions.Add('Company', CompanyName());
261
+ exit(MinimalDimensions);
262
+ end;
263
+
264
+ local procedure GetOptimizedDimensions(EventCategory: Text): Dictionary of [Text, Text]
265
+ var
266
+ OptimizedDimensions: Dictionary of [Text, Text];
267
+ begin
268
+ OptimizedDimensions.Add('UserID', UserId());
269
+ OptimizedDimensions.Add('Company', CompanyName());
270
+ OptimizedDimensions.Add('Category', EventCategory);
271
+ OptimizedDimensions.Add('Timestamp', Format(CurrentDateTime, 0, 9));
272
+ exit(OptimizedDimensions);
273
+ end;
274
+
275
+ local procedure MergeEssentialData(var CustomDimensions: Dictionary of [Text, Text]; DetailedData: Dictionary of [Text, Text])
276
+ var
277
+ Key: Text;
278
+ EssentialKeys: List of [Text];
279
+ begin
280
+ // Define essential keys for high-performance scenarios
281
+ EssentialKeys.Add('ErrorCode');
282
+ EssentialKeys.Add('Duration');
283
+ EssentialKeys.Add('RecordCount');
284
+ EssentialKeys.Add('Status');
285
+
286
+ foreach Key in EssentialKeys do
287
+ if DetailedData.ContainsKey(Key) then
288
+ CustomDimensions.Set(Key, DetailedData.Get(Key));
289
+ end;
290
+
291
+ local procedure MergeDetailedData(var CustomDimensions: Dictionary of [Text, Text]; DetailedData: Dictionary of [Text, Text])
292
+ var
293
+ Key: Text;
294
+ begin
295
+ foreach Key in DetailedData.Keys do
296
+ CustomDimensions.Set(Key, DetailedData.Get(Key));
297
+ end;
298
+
299
+ local procedure GetOptimalVerbosity(EventCategory: Text): Verbosity
300
+ begin
301
+ case EventCategory of
302
+ 'Critical': exit(Verbosity::Critical);
303
+ 'Error': exit(Verbosity::Error);
304
+ 'Warning': exit(Verbosity::Warning);
305
+ 'Performance':
306
+ if IsHighPerformanceMode() then
307
+ exit(Verbosity::Critical)
308
+ else
309
+ exit(Verbosity::Normal);
310
+ else exit(Verbosity::Normal);
311
+ end;
312
+ end;
313
+
314
+ local procedure GetEventId(Category: Text): Text
315
+ begin
316
+ exit(Category + Format(Random(999), 3, '<Integer,3><Filler Character,0>'));
317
+ end;
318
+ }
319
+ ```
@@ -0,0 +1,236 @@
1
+ # Telemetry Verbosity Level Usage Examples - AL Code Samples
2
+
3
+ ## Verbosity Strategy Implementation
4
+ ```al
5
+ codeunit 50120 "Verbosity Strategy Examples"
6
+ {
7
+ var
8
+ CurrentVerbosityLevel: Verbosity;
9
+ VerbosityConfig: Dictionary of [Text, Verbosity];
10
+
11
+ // Example 1: Context-aware verbosity selection
12
+ procedure LogWithContextualVerbosity(EventCategory: Text; Message: Text; CustomDimensions: Dictionary of [Text, Text])
13
+ var
14
+ SelectedVerbosity: Verbosity;
15
+ begin
16
+ SelectedVerbosity := DetermineVerbosityLevel(EventCategory);
17
+
18
+ Session.LogMessage(GetNextEventId(), Message, SelectedVerbosity,
19
+ DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
20
+ end;
21
+
22
+ local procedure DetermineVerbosityLevel(EventCategory: Text): Verbosity
23
+ begin
24
+ // Production verbosity rules
25
+ case EventCategory of
26
+ 'Error', 'Critical':
27
+ exit(Verbosity::Error);
28
+ 'Warning', 'Performance':
29
+ exit(Verbosity::Warning);
30
+ 'Info', 'Business':
31
+ exit(Verbosity::Normal);
32
+ 'Debug', 'Trace', 'Development':
33
+ if IsDebugMode() then
34
+ exit(Verbosity::Verbose)
35
+ else
36
+ exit(Verbosity::Normal);
37
+ else
38
+ exit(Verbosity::Normal);
39
+ end;
40
+ end;
41
+
42
+ // Example 2: Environment-based verbosity control
43
+ procedure InitializeVerbosityStrategy()
44
+ begin
45
+ if IsProductionEnvironment() then
46
+ InitializeProductionVerbosity()
47
+ else if IsStagingEnvironment() then
48
+ InitializeStagingVerbosity()
49
+ else
50
+ InitializeDevelopmentVerbosity();
51
+ end;
52
+
53
+ local procedure InitializeProductionVerbosity()
54
+ begin
55
+ // Production: Minimize noise, focus on actionable events
56
+ VerbosityConfig.Add('UserActions', Verbosity::Normal);
57
+ VerbosityConfig.Add('BusinessProcesses', Verbosity::Normal);
58
+ VerbosityConfig.Add('Errors', Verbosity::Error);
59
+ VerbosityConfig.Add('Performance', Verbosity::Warning);
60
+ VerbosityConfig.Add('Debugging', Verbosity::Critical); // Only critical debug info
61
+ VerbosityConfig.Add('Integration', Verbosity::Normal);
62
+ end;
63
+
64
+ local procedure InitializeDevelopmentVerbosity()
65
+ begin
66
+ // Development: Detailed logging for debugging
67
+ VerbosityConfig.Add('UserActions', Verbosity::Verbose);
68
+ VerbosityConfig.Add('BusinessProcesses', Verbosity::Verbose);
69
+ VerbosityConfig.Add('Errors', Verbosity::Error);
70
+ VerbosityConfig.Add('Performance', Verbosity::Verbose);
71
+ VerbosityConfig.Add('Debugging', Verbosity::Verbose);
72
+ VerbosityConfig.Add('Integration', Verbosity::Verbose);
73
+ end;
74
+
75
+ local procedure InitializeStagingVerbosity()
76
+ begin
77
+ // Staging: Balanced approach for pre-production testing
78
+ VerbosityConfig.Add('UserActions', Verbosity::Normal);
79
+ VerbosityConfig.Add('BusinessProcesses', Verbosity::Normal);
80
+ VerbosityConfig.Add('Errors', Verbosity::Error);
81
+ VerbosityConfig.Add('Performance', Verbosity::Normal);
82
+ VerbosityConfig.Add('Debugging', Verbosity::Warning);
83
+ VerbosityConfig.Add('Integration', Verbosity::Normal);
84
+ end;
85
+
86
+ // Helper methods
87
+ local procedure IsDebugMode(): Boolean
88
+ begin
89
+ exit(false); // Implement actual debug mode detection
90
+ end;
91
+
92
+ local procedure IsProductionEnvironment(): Boolean
93
+ begin
94
+ exit(true); // Implement actual environment detection
95
+ end;
96
+
97
+ local procedure IsStagingEnvironment(): Boolean
98
+ begin
99
+ exit(false); // Implement actual staging detection
100
+ end;
101
+
102
+ local procedure GetNextEventId(): Text
103
+ begin
104
+ exit(Format(Random(9999), 4, '<Integer,4><Filler Character,0>'));
105
+ end;
106
+ }
107
+ ```
108
+
109
+ ## Performance-Based Verbosity Control
110
+ ```al
111
+ codeunit 50121 "Performance Verbosity Control"
112
+ {
113
+ // Example 3: Performance threshold-based verbosity
114
+ procedure LogPerformanceEvent(OperationName: Text; DurationMs: Integer; Context: Dictionary of [Text, Text])
115
+ var
116
+ CustomDimensions: Dictionary of [Text, Text];
117
+ PerformanceVerbosity: Verbosity;
118
+ Message: Text;
119
+ begin
120
+ CustomDimensions := Context;
121
+ CustomDimensions.Add('OperationName', OperationName);
122
+ CustomDimensions.Add('DurationMs', Format(DurationMs));
123
+
124
+ PerformanceVerbosity := GetPerformanceVerbosity(OperationName, DurationMs);
125
+ Message := StrSubstNo('Performance: %1 completed in %2ms', OperationName, DurationMs);
126
+
127
+ Session.LogMessage('PERF' + Format(Random(999), 3, '<Integer,3><Filler Character,0>'), Message, PerformanceVerbosity,
128
+ DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
129
+ end;
130
+
131
+ local procedure GetPerformanceVerbosity(OperationName: Text; DurationMs: Integer): Verbosity
132
+ var
133
+ WarningThreshold: Integer;
134
+ ErrorThreshold: Integer;
135
+ begin
136
+ GetPerformanceThresholds(OperationName, WarningThreshold, ErrorThreshold);
137
+
138
+ case true of
139
+ DurationMs >= ErrorThreshold:
140
+ exit(Verbosity::Error); // Critical performance issue
141
+ DurationMs >= WarningThreshold:
142
+ exit(Verbosity::Warning); // Performance concern
143
+ DurationMs >= (WarningThreshold div 2):
144
+ exit(Verbosity::Normal); // Notable but acceptable
145
+ else
146
+ exit(Verbosity::Verbose); // Fast operations - detailed tracking only
147
+ end;
148
+ end;
149
+
150
+ local procedure GetPerformanceThresholds(OperationName: Text; var WarningThreshold: Integer; var ErrorThreshold: Integer)
151
+ begin
152
+ // Operation-specific thresholds
153
+ case OperationName of
154
+ 'DatabaseQuery':
155
+ begin
156
+ WarningThreshold := 1000; // 1 second
157
+ ErrorThreshold := 5000; // 5 seconds
158
+ end;
159
+ 'ReportGeneration':
160
+ begin
161
+ WarningThreshold := 10000; // 10 seconds
162
+ ErrorThreshold := 30000; // 30 seconds
163
+ end;
164
+ 'APICall':
165
+ begin
166
+ WarningThreshold := 2000; // 2 seconds
167
+ ErrorThreshold := 10000; // 10 seconds
168
+ end;
169
+ else
170
+ begin
171
+ WarningThreshold := 5000; // Default 5 seconds
172
+ ErrorThreshold := 15000; // Default 15 seconds
173
+ end;
174
+ end;
175
+ end;
176
+ }
177
+ ```
178
+
179
+ ## User Role-Based Verbosity
180
+ ```al
181
+ codeunit 50122 "Role Based Verbosity"
182
+ {
183
+ // Example 4: User role-based verbosity control
184
+ procedure LogUserAction(ActionType: Text; UserID: Code[50]; Context: Text)
185
+ var
186
+ CustomDimensions: Dictionary of [Text, Text];
187
+ UserVerbosity: Verbosity;
188
+ begin
189
+ CustomDimensions.Add('UserID', UserID);
190
+ CustomDimensions.Add('ActionType', ActionType);
191
+ CustomDimensions.Add('Context', Context);
192
+
193
+ UserVerbosity := GetUserActionVerbosity(UserID, ActionType);
194
+
195
+ Session.LogMessage('USER' + Format(Random(999), 3, '<Integer,3><Filler Character,0>'),
196
+ StrSubstNo('User action: %1', ActionType), UserVerbosity,
197
+ DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
198
+ end;
199
+
200
+ local procedure GetUserActionVerbosity(UserID: Code[50]; ActionType: Text): Verbosity
201
+ begin
202
+ // Higher verbosity for administrative users in development
203
+ if IsAdministrativeUser(UserID) and not IsProductionEnvironment() then
204
+ exit(Verbosity::Verbose);
205
+
206
+ case ActionType of
207
+ 'Login', 'Logout':
208
+ exit(Verbosity::Normal);
209
+ 'DataExport', 'ReportGeneration':
210
+ exit(Verbosity::Normal);
211
+ 'ConfigurationChange':
212
+ exit(Verbosity::Warning); // Important to track
213
+ 'SecurityElevation':
214
+ exit(Verbosity::Critical); // Always log security events
215
+ else
216
+ exit(Verbosity::Normal);
217
+ end;
218
+ end;
219
+
220
+ local procedure IsAdministrativeUser(UserID: Code[50]): Boolean
221
+ var
222
+ AccessControl: Record "Access Control";
223
+ begin
224
+ // Check if user has administrative permissions
225
+ AccessControl.SetRange("User Security ID", UserID);
226
+ AccessControl.SetRange("Role ID", 'SUPER');
227
+ exit(not AccessControl.IsEmpty);
228
+ end;
229
+
230
+ local procedure IsProductionEnvironment(): Boolean
231
+ begin
232
+ // Implement environment detection logic
233
+ exit(true);
234
+ end;
235
+ }
236
+ ```
@@ -0,0 +1,59 @@
1
+ ---
2
+ title: "BC Session LogMessage Methods"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["telemetry", "logging", "session", "performance"]
7
+ prerequisites: ["telemetry-basics"]
8
+ samples: "samples/logmessage-methods.md"
9
+ ---
10
+ # BC Session LogMessage Methods
11
+
12
+ ## Overview
13
+
14
+ Business Central's Session.LogMessage() provides structured telemetry logging with multiple overloads for different verbosity levels and correlation scenarios. Understanding the method variations and their performance implications is essential for effective telemetry implementation.
15
+
16
+ The LogMessage methods enable developers to emit custom telemetry events that integrate with Application Insights and other monitoring solutions. Each method variation serves specific use cases from simple informational logging to complex error correlation.
17
+
18
+ ## Method Variations
19
+
20
+ ### Basic LogMessage
21
+ The fundamental LogMessage(Message, Verbosity) method provides simple event logging with verbosity control. This method creates telemetry events with basic message content and system-generated correlation identifiers.
22
+
23
+ Verbosity levels range from Critical (1) through Error (2), Warning (3), Normal (4), and Verbose (5). Higher verbosity numbers indicate less critical information and may be filtered in production environments.
24
+
25
+ ### LogMessage with Custom Dimensions
26
+ The LogMessage(Message, Verbosity, DataClassification, TelemetryScope, Dictionary) overload enables rich telemetry with custom dimensions. This method allows developers to include structured data that enhances telemetry analysis and correlation.
27
+
28
+ Custom dimensions support key-value pairs that appear as structured fields in Application Insights. This enables sophisticated querying, filtering, and correlation analysis in telemetry dashboards.
29
+
30
+ ### LogMessage with Correlation
31
+ Advanced LogMessage overloads include correlation parameters that link related telemetry events across different system components. This correlation capability is essential for tracing complex business processes and debugging distributed operations.
32
+
33
+ ## Performance Characteristics
34
+
35
+ ### Memory Impact
36
+ LogMessage operations consume memory for message formatting and custom dimension serialization. Large custom dimension collections or frequent high-verbosity logging can impact system memory utilization.
37
+
38
+ The telemetry system buffers events before transmission, so sustained high-volume logging may increase memory pressure. Consider telemetry volume in memory-constrained environments.
39
+
40
+ ### CPU Overhead
41
+ Message formatting and custom dimension processing consume CPU resources. Complex custom dimensions or frequent logging calls contribute to overall system CPU utilization.
42
+
43
+ Verbosity-based filtering occurs after message formatting, so high-verbosity messages still incur formatting costs even when filtered. Design telemetry strategies to minimize unnecessary processing.
44
+
45
+ ### Network and Storage
46
+ Telemetry events consume network bandwidth for transmission to monitoring systems and storage space in telemetry databases. High-volume telemetry can impact both network performance and storage costs.
47
+
48
+ Consider telemetry retention policies and sampling strategies to balance diagnostic capability with resource consumption.
49
+
50
+ ## Best Practices
51
+
52
+ ### Verbosity Selection
53
+ Choose appropriate verbosity levels based on information criticality and expected production filtering. Use Critical/Error for system issues, Warning for recoverable problems, Normal for business events, and Verbose for detailed diagnostics.
54
+
55
+ ### Custom Dimension Design
56
+ Structure custom dimensions for effective querying and analysis. Use consistent naming conventions and avoid high-cardinality values that complicate aggregation analysis.
57
+
58
+ ### Correlation Strategy
59
+ Implement consistent correlation patterns across related components to enable effective trace analysis. Use business process identifiers where possible to link telemetry events to actual user scenarios.
@@ -0,0 +1,67 @@
1
+ ---
2
+ title: "SetLoadFields Filter Field Exclusion"
3
+ domain: "dean-debug"
4
+ difficulty: "intermediate"
5
+ bc_versions: "14+"
6
+ tags: ["setloadfields", "filtering", "field-exclusion"]
7
+ prerequisites: ["setloadfields-basics", "record-filtering"]
8
+ samples: "samples/setloadfields-filter-exclusion.md"
9
+ ---
10
+ # SetLoadFields Filter Field Exclusion
11
+
12
+ ## Overview
13
+
14
+ SetLoadFields filter field exclusion optimizes performance by explicitly avoiding the loading of fields that are used only for filtering operations. When fields are needed solely for database-level filtering but not for application logic, excluding them from field loading reduces memory usage and improves processing speed.
15
+
16
+ This technique is particularly valuable when working with tables containing large fields or many columns where filter fields represent a small subset of total table fields.
17
+
18
+ ## Filtering vs Loading Distinction
19
+
20
+ Database filtering and field loading serve different purposes in BC data access. Filtering determines which records are retrieved from the database, while field loading determines which field values are brought into memory for each retrieved record.
21
+
22
+ Fields used in SETRANGE, SETFILTER, or WHERE clauses perform their filtering function at the database level regardless of whether they're included in SetLoadFields. The database engine applies filters using indexed data structures without requiring field values to be loaded into BC memory.
23
+
24
+ ## Optimization Strategy
25
+
26
+ The core strategy involves identifying fields that serve purely filtering purposes and excluding them from SetLoadFields calls. This creates a separation between "filter fields" and "processing fields" in your data access logic.
27
+
28
+ Filter fields typically include:
29
+ - Date range filters for reporting periods
30
+ - Status fields for record state filtering
31
+ - Category fields for data segmentation
32
+ - Foreign key fields for relationship filtering
33
+
34
+ Processing fields include those whose values are actually used in calculations, display, or business logic after records are loaded.
35
+
36
+ ## Memory Impact
37
+
38
+ Excluding filter-only fields can significantly reduce memory consumption, especially with:
39
+ - Tables containing large text or BLOB fields used for filtering
40
+ - Wide tables with many columns where only a subset is needed for processing
41
+ - Bulk operations processing thousands of records
42
+
43
+ The memory savings compound when processing large record sets, potentially preventing memory pressure and improving overall system performance.
44
+
45
+ ## Implementation Approach
46
+
47
+ Start by analyzing your data access patterns to identify fields used exclusively for filtering. Document the distinction between filter fields and processing fields for your specific use case.
48
+
49
+ Apply SetLoadFields with only the processing fields included, ensuring that filter fields are omitted from the field list. Set up your filters normally using SETRANGE or SETFILTER - these will continue to work correctly even though the filter fields aren't loaded.
50
+
51
+ ## Database Query Optimization
52
+
53
+ Excluding filter fields from loading can improve database query performance by reducing the amount of data transferred between the database and BC service. The database can still use indexes on filter fields for efficient record retrieval while avoiding unnecessary data transfer.
54
+
55
+ This optimization is particularly effective when filter fields have database indexes that support efficient filtering without requiring full field value retrieval.
56
+
57
+ ## Validation Considerations
58
+
59
+ When excluding filter fields from loading, ensure that your subsequent processing logic doesn't attempt to access those field values. Accessing excluded fields will trigger implicit field loading, negating the optimization benefits.
60
+
61
+ Consider using compilation warnings or code review processes to catch accidental access to excluded fields in your processing logic.
62
+
63
+ ## Advanced Patterns
64
+
65
+ Combine filter field exclusion with conditional field loading where you dynamically determine which processing fields to load based on record state or business logic requirements.
66
+
67
+ Consider creating field loading profiles for different processing scenarios, each optimized for specific combinations of needed fields while excluding unnecessary filter fields.