bc-code-intelligence-mcp 1.3.3 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/dist/config/test-enhanced-layer-service.js +10 -10
  2. package/dist/config/test-enhanced-layer-service.js.map +1 -1
  3. package/dist/dev/hot-reload.d.ts +2 -2
  4. package/dist/dev/hot-reload.d.ts.map +1 -1
  5. package/dist/dev/hot-reload.js.map +1 -1
  6. package/dist/index.d.ts +0 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +34 -38
  9. package/dist/index.js.map +1 -1
  10. package/dist/layers/index.d.ts +1 -1
  11. package/dist/layers/index.d.ts.map +1 -1
  12. package/dist/layers/index.js +1 -1
  13. package/dist/layers/index.js.map +1 -1
  14. package/dist/services/code-analysis-service.d.ts.map +1 -1
  15. package/dist/services/code-analysis-service.js +4 -0
  16. package/dist/services/code-analysis-service.js.map +1 -1
  17. package/dist/services/knowledge-service.d.ts +21 -10
  18. package/dist/services/knowledge-service.d.ts.map +1 -1
  19. package/dist/services/knowledge-service.js +71 -54
  20. package/dist/services/knowledge-service.js.map +1 -1
  21. package/dist/services/multi-content-layer-service.d.ts +90 -0
  22. package/dist/services/multi-content-layer-service.d.ts.map +1 -1
  23. package/dist/services/multi-content-layer-service.js +380 -0
  24. package/dist/services/multi-content-layer-service.js.map +1 -1
  25. package/dist/services/workflow-service.d.ts +11 -3
  26. package/dist/services/workflow-service.d.ts.map +1 -1
  27. package/dist/services/workflow-service.js +119 -78
  28. package/dist/services/workflow-service.js.map +1 -1
  29. package/dist/streamlined-handlers.d.ts +31 -2
  30. package/dist/streamlined-handlers.d.ts.map +1 -1
  31. package/dist/streamlined-handlers.js +151 -109
  32. package/dist/streamlined-handlers.js.map +1 -1
  33. package/dist/streamlined-tools.d.ts +12 -0
  34. package/dist/streamlined-tools.d.ts.map +1 -1
  35. package/dist/streamlined-tools.js +11 -6
  36. package/dist/streamlined-tools.js.map +1 -1
  37. package/package.json +13 -4
  38. package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +0 -24
  39. package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +0 -24
  40. package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +0 -30
  41. package/embedded-knowledge/AGENTS.md +0 -178
  42. package/embedded-knowledge/CONTRIBUTING.md +0 -58
  43. package/embedded-knowledge/LICENSE +0 -21
  44. package/embedded-knowledge/README.md +0 -32
  45. package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +0 -90
  46. package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +0 -113
  47. package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +0 -101
  48. package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +0 -87
  49. package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +0 -155
  50. package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +0 -138
  51. package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +0 -79
  52. package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +0 -280
  53. package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +0 -200
  54. package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +0 -565
  55. package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +0 -665
  56. package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +0 -325
  57. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +0 -696
  58. package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +0 -320
  59. package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +0 -102
  60. package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +0 -433
  61. package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +0 -66
  62. package/embedded-knowledge/domains/alex-architect/systemid-integration.md +0 -115
  63. package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +0 -360
  64. package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +0 -86
  65. package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +0 -96
  66. package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +0 -70
  67. package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +0 -84
  68. package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +0 -93
  69. package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +0 -73
  70. package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +0 -78
  71. package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +0 -79
  72. package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +0 -87
  73. package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +0 -209
  74. package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +0 -246
  75. package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +0 -107
  76. package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +0 -105
  77. package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +0 -186
  78. package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +0 -60
  79. package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +0 -139
  80. package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +0 -190
  81. package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +0 -516
  82. package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +0 -298
  83. package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +0 -324
  84. package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +0 -344
  85. package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +0 -137
  86. package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +0 -340
  87. package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +0 -810
  88. package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +0 -86
  89. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +0 -110
  90. package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +0 -758
  91. package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +0 -665
  92. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +0 -316
  93. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +0 -223
  94. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +0 -149
  95. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +0 -412
  96. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +0 -211
  97. package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +0 -155
  98. package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +0 -475
  99. package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +0 -238
  100. package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +0 -97
  101. package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +0 -666
  102. package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +0 -319
  103. package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +0 -236
  104. package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +0 -59
  105. package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +0 -67
  106. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +0 -70
  107. package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +0 -90
  108. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +0 -87
  109. package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +0 -70
  110. package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +0 -74
  111. package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +0 -81
  112. package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +0 -56
  113. package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +0 -66
  114. package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +0 -79
  115. package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +0 -78
  116. package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +0 -83
  117. package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +0 -76
  118. package/embedded-knowledge/domains/dean-debug/testfield-performance.md +0 -104
  119. package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +0 -145
  120. package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +0 -104
  121. package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +0 -114
  122. package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +0 -356
  123. package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +0 -256
  124. package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +0 -101
  125. package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +0 -108
  126. package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +0 -80
  127. package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +0 -98
  128. package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +0 -123
  129. package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +0 -96
  130. package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +0 -115
  131. package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +0 -115
  132. package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +0 -114
  133. package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +0 -395
  134. package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +0 -479
  135. package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +0 -548
  136. package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +0 -287
  137. package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +0 -434
  138. package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +0 -508
  139. package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +0 -615
  140. package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +0 -144
  141. package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +0 -96
  142. package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +0 -124
  143. package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +0 -84
  144. package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +0 -75
  145. package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +0 -96
  146. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +0 -385
  147. package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +0 -72
  148. package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +0 -48
  149. package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +0 -49
  150. package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +0 -67
  151. package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +0 -119
  152. package/embedded-knowledge/domains/quinn-tester/rule-execution.md +0 -123
  153. package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +0 -64
  154. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +0 -60
  155. package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +0 -83
  156. package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +0 -716
  157. package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +0 -101
  158. package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +0 -91
  159. package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +0 -79
  160. package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +0 -79
  161. package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +0 -89
  162. package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +0 -76
  163. package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +0 -76
  164. package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +0 -76
  165. package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +0 -81
  166. package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +0 -76
  167. package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +0 -75
  168. package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +0 -76
  169. package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +0 -76
  170. package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +0 -76
  171. package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +0 -96
  172. package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +0 -76
  173. package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +0 -86
  174. package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +0 -90
  175. package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +0 -82
  176. package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +0 -78
  177. package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +0 -76
  178. package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +0 -78
  179. package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +0 -100
  180. package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +0 -115
  181. package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +0 -124
  182. package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +0 -110
  183. package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +0 -438
  184. package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +0 -255
  185. package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +0 -209
  186. package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +0 -218
  187. package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +0 -218
  188. package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +0 -280
  189. package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +0 -188
  190. package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +0 -245
  191. package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +0 -244
  192. package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +0 -278
  193. package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +0 -484
  194. package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +0 -64
  195. package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +0 -107
  196. package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +0 -280
  197. package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +0 -75
  198. package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +0 -67
  199. package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +0 -76
  200. package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +0 -98
  201. package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +0 -128
  202. package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +0 -75
  203. package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +0 -95
  204. package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +0 -141
  205. package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +0 -91
  206. package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +0 -118
  207. package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +0 -111
  208. package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +0 -113
  209. package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +0 -127
  210. package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +0 -141
  211. package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +0 -66
  212. package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +0 -96
  213. package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +0 -161
  214. package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +0 -177
  215. package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +0 -239
  216. package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +0 -346
  217. package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +0 -298
  218. package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +0 -677
  219. package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +0 -117
  220. package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +0 -75
  221. package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +0 -169
  222. package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +0 -399
  223. package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +0 -356
  224. package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +0 -889
  225. package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +0 -84
  226. package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +0 -127
  227. package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +0 -89
  228. package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +0 -516
  229. package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +0 -61
  230. package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +0 -427
  231. package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +0 -122
  232. package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +0 -96
  233. package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +0 -101
  234. package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +0 -149
  235. package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +0 -107
  236. package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +0 -95
  237. package/embedded-knowledge/domains/seth-security/api-permission-model.md +0 -115
  238. package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +0 -78
  239. package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +0 -373
  240. package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +0 -308
  241. package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +0 -146
  242. package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +0 -79
  243. package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +0 -78
  244. package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +0 -81
  245. package/embedded-knowledge/indexes/bc-version-matrix.json +0 -188
  246. package/embedded-knowledge/indexes/domain-catalog.json +0 -106
  247. package/embedded-knowledge/indexes/tags/abbreviations.json +0 -1
  248. package/embedded-knowledge/indexes/tags/abstraction.json +0 -1
  249. package/embedded-knowledge/indexes/tags/access-control.json +0 -1
  250. package/embedded-knowledge/indexes/tags/accessibility.json +0 -1
  251. package/embedded-knowledge/indexes/tags/actions.json +0 -1
  252. package/embedded-knowledge/indexes/tags/advanced-patterns.json +0 -1
  253. package/embedded-knowledge/indexes/tags/advanced.json +0 -1
  254. package/embedded-knowledge/indexes/tags/al-extension.json +0 -1
  255. package/embedded-knowledge/indexes/tags/al-generics.json +0 -1
  256. package/embedded-knowledge/indexes/tags/al-objects.json +0 -1
  257. package/embedded-knowledge/indexes/tags/al-syntax.json +0 -1
  258. package/embedded-knowledge/indexes/tags/algorithm-structure.json +0 -1
  259. package/embedded-knowledge/indexes/tags/alternatives.json +0 -1
  260. package/embedded-knowledge/indexes/tags/analytics.json +0 -1
  261. package/embedded-knowledge/indexes/tags/api-delegates.json +0 -1
  262. package/embedded-knowledge/indexes/tags/api-design.json +0 -1
  263. package/embedded-knowledge/indexes/tags/api-documentation.json +0 -1
  264. package/embedded-knowledge/indexes/tags/api-endpoints.json +0 -1
  265. package/embedded-knowledge/indexes/tags/api-extensibility.json +0 -1
  266. package/embedded-knowledge/indexes/tags/api-fieldsets.json +0 -1
  267. package/embedded-knowledge/indexes/tags/api-integration.json +0 -1
  268. package/embedded-knowledge/indexes/tags/api-interfaces.json +0 -1
  269. package/embedded-knowledge/indexes/tags/api-optimization.json +0 -1
  270. package/embedded-knowledge/indexes/tags/api-pages.json +0 -1
  271. package/embedded-knowledge/indexes/tags/api-patterns.json +0 -1
  272. package/embedded-knowledge/indexes/tags/api-permissions.json +0 -1
  273. package/embedded-knowledge/indexes/tags/api-responses.json +0 -1
  274. package/embedded-knowledge/indexes/tags/api-simplification.json +0 -1
  275. package/embedded-knowledge/indexes/tags/api.json +0 -1
  276. package/embedded-knowledge/indexes/tags/architecture.json +0 -1
  277. package/embedded-knowledge/indexes/tags/async-patterns.json +0 -1
  278. package/embedded-knowledge/indexes/tags/async-processing.json +0 -1
  279. package/embedded-knowledge/indexes/tags/automatic-registration.json +0 -1
  280. package/embedded-knowledge/indexes/tags/batch-operations.json +0 -1
  281. package/embedded-knowledge/indexes/tags/bc24-migration.json +0 -1
  282. package/embedded-knowledge/indexes/tags/begin-blocks.json +0 -1
  283. package/embedded-knowledge/indexes/tags/begin-end.json +0 -1
  284. package/embedded-knowledge/indexes/tags/behavioral-patterns.json +0 -1
  285. package/embedded-knowledge/indexes/tags/best-practices.json +0 -1
  286. package/embedded-knowledge/indexes/tags/binding.json +0 -1
  287. package/embedded-knowledge/indexes/tags/block-structure.json +0 -1
  288. package/embedded-knowledge/indexes/tags/blocks.json +0 -1
  289. package/embedded-knowledge/indexes/tags/boolean-expressions.json +0 -1
  290. package/embedded-knowledge/indexes/tags/branching.json +0 -1
  291. package/embedded-knowledge/indexes/tags/breaking-changes.json +0 -1
  292. package/embedded-knowledge/indexes/tags/breakpoints.json +0 -1
  293. package/embedded-knowledge/indexes/tags/business-foundation.json +0 -1
  294. package/embedded-knowledge/indexes/tags/business-infrastructure.json +0 -1
  295. package/embedded-knowledge/indexes/tags/business-process.json +0 -1
  296. package/embedded-knowledge/indexes/tags/business-rules.json +0 -1
  297. package/embedded-knowledge/indexes/tags/caching.json +0 -1
  298. package/embedded-knowledge/indexes/tags/case-statements.json +0 -1
  299. package/embedded-knowledge/indexes/tags/case.json +0 -1
  300. package/embedded-knowledge/indexes/tags/code-analysis.json +0 -1
  301. package/embedded-knowledge/indexes/tags/code-clarity.json +0 -1
  302. package/embedded-knowledge/indexes/tags/code-comprehension.json +0 -1
  303. package/embedded-knowledge/indexes/tags/code-conversion.json +0 -1
  304. package/embedded-knowledge/indexes/tags/code-formatting.json +0 -1
  305. package/embedded-knowledge/indexes/tags/code-organization.json +0 -1
  306. package/embedded-knowledge/indexes/tags/code-patterns.json +0 -1
  307. package/embedded-knowledge/indexes/tags/code-quality.json +0 -1
  308. package/embedded-knowledge/indexes/tags/code-reuse.json +0 -1
  309. package/embedded-knowledge/indexes/tags/code-simplification.json +0 -1
  310. package/embedded-knowledge/indexes/tags/code-standards.json +0 -1
  311. package/embedded-knowledge/indexes/tags/code-structure.json +0 -1
  312. package/embedded-knowledge/indexes/tags/code-style.json +0 -1
  313. package/embedded-knowledge/indexes/tags/codeunit-design.json +0 -1
  314. package/embedded-knowledge/indexes/tags/command-queue.json +0 -1
  315. package/embedded-knowledge/indexes/tags/comments.json +0 -1
  316. package/embedded-knowledge/indexes/tags/compile-time-validation.json +0 -1
  317. package/embedded-knowledge/indexes/tags/complex-facade.json +0 -1
  318. package/embedded-knowledge/indexes/tags/complexity-hiding.json +0 -1
  319. package/embedded-knowledge/indexes/tags/complexity-management.json +0 -1
  320. package/embedded-knowledge/indexes/tags/compound-statements.json +0 -1
  321. package/embedded-knowledge/indexes/tags/concurrency.json +0 -1
  322. package/embedded-knowledge/indexes/tags/conditional-logic.json +0 -1
  323. package/embedded-knowledge/indexes/tags/conditional.json +0 -1
  324. package/embedded-knowledge/indexes/tags/conflict-resolution.json +0 -1
  325. package/embedded-knowledge/indexes/tags/consistency.json +0 -1
  326. package/embedded-knowledge/indexes/tags/contract-design.json +0 -1
  327. package/embedded-knowledge/indexes/tags/control-flow.json +0 -1
  328. package/embedded-knowledge/indexes/tags/conversion-guide.json +0 -1
  329. package/embedded-knowledge/indexes/tags/correlation.json +0 -1
  330. package/embedded-knowledge/indexes/tags/custom-messages.json +0 -1
  331. package/embedded-knowledge/indexes/tags/data-access.json +0 -1
  332. package/embedded-knowledge/indexes/tags/data-exposure.json +0 -1
  333. package/embedded-knowledge/indexes/tags/data-integrity.json +0 -1
  334. package/embedded-knowledge/indexes/tags/data-loading.json +0 -1
  335. package/embedded-knowledge/indexes/tags/data-manipulation.json +0 -1
  336. package/embedded-knowledge/indexes/tags/data-modeling.json +0 -1
  337. package/embedded-knowledge/indexes/tags/data-patterns.json +0 -1
  338. package/embedded-knowledge/indexes/tags/data-protection.json +0 -1
  339. package/embedded-knowledge/indexes/tags/data-validation.json +0 -1
  340. package/embedded-knowledge/indexes/tags/database.json +0 -1
  341. package/embedded-knowledge/indexes/tags/debugging.json +0 -1
  342. package/embedded-knowledge/indexes/tags/decision-making.json +0 -1
  343. package/embedded-knowledge/indexes/tags/declaration.json +0 -1
  344. package/embedded-knowledge/indexes/tags/default-messages.json +0 -1
  345. package/embedded-knowledge/indexes/tags/defensive-programming.json +0 -1
  346. package/embedded-knowledge/indexes/tags/deleteall.json +0 -1
  347. package/embedded-knowledge/indexes/tags/dependencies.json +0 -1
  348. package/embedded-knowledge/indexes/tags/deployment.json +0 -1
  349. package/embedded-knowledge/indexes/tags/developer-productivity.json +0 -1
  350. package/embedded-knowledge/indexes/tags/development-workflow.json +0 -1
  351. package/embedded-knowledge/indexes/tags/diagnostics.json +0 -1
  352. package/embedded-knowledge/indexes/tags/dimensions.json +0 -1
  353. package/embedded-knowledge/indexes/tags/documentation.json +0 -1
  354. package/embedded-knowledge/indexes/tags/early-exit.json +0 -1
  355. package/embedded-knowledge/indexes/tags/else-clauses.json +0 -1
  356. package/embedded-knowledge/indexes/tags/end-statements.json +0 -1
  357. package/embedded-knowledge/indexes/tags/enterprise-patterns.json +0 -1
  358. package/embedded-knowledge/indexes/tags/entity-relationships.json +0 -1
  359. package/embedded-knowledge/indexes/tags/error-handling.json +0 -1
  360. package/embedded-knowledge/indexes/tags/error-messages.json +0 -1
  361. package/embedded-knowledge/indexes/tags/error-prevention.json +0 -1
  362. package/embedded-knowledge/indexes/tags/error-text.json +0 -1
  363. package/embedded-knowledge/indexes/tags/etag.json +0 -1
  364. package/embedded-knowledge/indexes/tags/event-bridge.json +0 -1
  365. package/embedded-knowledge/indexes/tags/event-payload.json +0 -1
  366. package/embedded-knowledge/indexes/tags/event-routing.json +0 -1
  367. package/embedded-knowledge/indexes/tags/events.json +0 -1
  368. package/embedded-knowledge/indexes/tags/execution-flow.json +0 -1
  369. package/embedded-knowledge/indexes/tags/expressions.json +0 -1
  370. package/embedded-knowledge/indexes/tags/extensibility.json +0 -1
  371. package/embedded-knowledge/indexes/tags/extensions.json +0 -1
  372. package/embedded-knowledge/indexes/tags/facade-composition.json +0 -1
  373. package/embedded-knowledge/indexes/tags/facade-pattern.json +0 -1
  374. package/embedded-knowledge/indexes/tags/field-control.json +0 -1
  375. package/embedded-knowledge/indexes/tags/field-exclusion.json +0 -1
  376. package/embedded-knowledge/indexes/tags/field-registration.json +0 -1
  377. package/embedded-knowledge/indexes/tags/field-state.json +0 -1
  378. package/embedded-knowledge/indexes/tags/field-validation.json +0 -1
  379. package/embedded-knowledge/indexes/tags/fielderror.json +0 -1
  380. package/embedded-knowledge/indexes/tags/fields.json +0 -1
  381. package/embedded-knowledge/indexes/tags/filtering.json +0 -1
  382. package/embedded-knowledge/indexes/tags/filters.json +0 -1
  383. package/embedded-knowledge/indexes/tags/formatting.json +0 -1
  384. package/embedded-knowledge/indexes/tags/generic-methods.json +0 -1
  385. package/embedded-knowledge/indexes/tags/http-status.json +0 -1
  386. package/embedded-knowledge/indexes/tags/if-statements.json +0 -1
  387. package/embedded-knowledge/indexes/tags/implementation.json +0 -1
  388. package/embedded-knowledge/indexes/tags/indentation.json +0 -1
  389. package/embedded-knowledge/indexes/tags/index-summary.json +0 -277
  390. package/embedded-knowledge/indexes/tags/indexing.json +0 -1
  391. package/embedded-knowledge/indexes/tags/inheritance.json +0 -1
  392. package/embedded-knowledge/indexes/tags/integration.json +0 -1
  393. package/embedded-knowledge/indexes/tags/integrity-checking.json +0 -1
  394. package/embedded-knowledge/indexes/tags/intellisense.json +0 -1
  395. package/embedded-knowledge/indexes/tags/interface-design.json +0 -1
  396. package/embedded-knowledge/indexes/tags/interface-segregation.json +0 -1
  397. package/embedded-knowledge/indexes/tags/isolation.json +0 -1
  398. package/embedded-knowledge/indexes/tags/job-processing.json +0 -1
  399. package/embedded-knowledge/indexes/tags/keyboard-navigation.json +0 -1
  400. package/embedded-knowledge/indexes/tags/keywords.json +0 -1
  401. package/embedded-knowledge/indexes/tags/legacy-modernization.json +0 -1
  402. package/embedded-knowledge/indexes/tags/line-breaks.json +0 -1
  403. package/embedded-knowledge/indexes/tags/line-organization.json +0 -1
  404. package/embedded-knowledge/indexes/tags/line-positioning.json +0 -1
  405. package/embedded-knowledge/indexes/tags/localization.json +0 -1
  406. package/embedded-knowledge/indexes/tags/logging.json +0 -1
  407. package/embedded-knowledge/indexes/tags/loose-coupling.json +0 -1
  408. package/embedded-knowledge/indexes/tags/maintainability.json +0 -1
  409. package/embedded-knowledge/indexes/tags/memory-management.json +0 -1
  410. package/embedded-knowledge/indexes/tags/memory-optimization.json +0 -1
  411. package/embedded-knowledge/indexes/tags/memory.json +0 -1
  412. package/embedded-knowledge/indexes/tags/message-design.json +0 -1
  413. package/embedded-knowledge/indexes/tags/message-formatting.json +0 -1
  414. package/embedded-knowledge/indexes/tags/message-patterns.json +0 -1
  415. package/embedded-knowledge/indexes/tags/metadata-driven.json +0 -1
  416. package/embedded-knowledge/indexes/tags/method-comparison.json +0 -1
  417. package/embedded-knowledge/indexes/tags/module-architecture.json +0 -1
  418. package/embedded-knowledge/indexes/tags/module-validation.json +0 -1
  419. package/embedded-knowledge/indexes/tags/monitoring.json +0 -1
  420. package/embedded-knowledge/indexes/tags/multi-layer-facade.json +0 -1
  421. package/embedded-knowledge/indexes/tags/multi-tenancy.json +0 -1
  422. package/embedded-knowledge/indexes/tags/multiple-values.json +0 -1
  423. package/embedded-knowledge/indexes/tags/naming-conventions.json +0 -1
  424. package/embedded-knowledge/indexes/tags/naming.json +0 -1
  425. package/embedded-knowledge/indexes/tags/navigation.json +0 -1
  426. package/embedded-knowledge/indexes/tags/nested-statements.json +0 -1
  427. package/embedded-knowledge/indexes/tags/no-series-conversion.json +0 -1
  428. package/embedded-knowledge/indexes/tags/no-series-validation.json +0 -1
  429. package/embedded-knowledge/indexes/tags/no-series.json +0 -1
  430. package/embedded-knowledge/indexes/tags/number-generation.json +0 -1
  431. package/embedded-knowledge/indexes/tags/object-documentation.json +0 -1
  432. package/embedded-knowledge/indexes/tags/odata.json +0 -1
  433. package/embedded-knowledge/indexes/tags/ondelete.json +0 -1
  434. package/embedded-knowledge/indexes/tags/onvalidate.json +0 -1
  435. package/embedded-knowledge/indexes/tags/operation-delegation.json +0 -1
  436. package/embedded-knowledge/indexes/tags/operation-safety.json +0 -1
  437. package/embedded-knowledge/indexes/tags/operators.json +0 -1
  438. package/embedded-knowledge/indexes/tags/optimization.json +0 -1
  439. package/embedded-knowledge/indexes/tags/order.json +0 -1
  440. package/embedded-knowledge/indexes/tags/organization.json +0 -1
  441. package/embedded-knowledge/indexes/tags/pages.json +0 -1
  442. package/embedded-knowledge/indexes/tags/parameters.json +0 -1
  443. package/embedded-knowledge/indexes/tags/patterns.json +0 -1
  444. package/embedded-knowledge/indexes/tags/performance-optimization.json +0 -1
  445. package/embedded-knowledge/indexes/tags/performance.json +0 -1
  446. package/embedded-knowledge/indexes/tags/placement.json +0 -1
  447. package/embedded-knowledge/indexes/tags/posting-codeunits.json +0 -1
  448. package/embedded-knowledge/indexes/tags/posting.json +0 -1
  449. package/embedded-knowledge/indexes/tags/preconditions.json +0 -1
  450. package/embedded-knowledge/indexes/tags/primary-key.json +0 -1
  451. package/embedded-knowledge/indexes/tags/privacy.json +0 -1
  452. package/embedded-knowledge/indexes/tags/process-automation.json +0 -1
  453. package/embedded-knowledge/indexes/tags/production.json +0 -1
  454. package/embedded-knowledge/indexes/tags/productivity.json +0 -1
  455. package/embedded-knowledge/indexes/tags/query-performance.json +0 -1
  456. package/embedded-knowledge/indexes/tags/queue-management.json +0 -1
  457. package/embedded-knowledge/indexes/tags/ranges.json +0 -1
  458. package/embedded-knowledge/indexes/tags/readability.json +0 -1
  459. package/embedded-knowledge/indexes/tags/record-access.json +0 -1
  460. package/embedded-knowledge/indexes/tags/record-methods.json +0 -1
  461. package/embedded-knowledge/indexes/tags/refactoring.json +0 -1
  462. package/embedded-knowledge/indexes/tags/reference.json +0 -1
  463. package/embedded-knowledge/indexes/tags/repeat-loops.json +0 -1
  464. package/embedded-knowledge/indexes/tags/repeat-statement.json +0 -1
  465. package/embedded-knowledge/indexes/tags/runtime-errors.json +0 -1
  466. package/embedded-knowledge/indexes/tags/runtime.json +0 -1
  467. package/embedded-knowledge/indexes/tags/safeguards.json +0 -1
  468. package/embedded-knowledge/indexes/tags/security.json +0 -1
  469. package/embedded-knowledge/indexes/tags/sequence-management.json +0 -1
  470. package/embedded-knowledge/indexes/tags/serialization.json +0 -1
  471. package/embedded-knowledge/indexes/tags/session-logmessage.json +0 -1
  472. package/embedded-knowledge/indexes/tags/session.json +0 -1
  473. package/embedded-knowledge/indexes/tags/setloadfields.json +0 -1
  474. package/embedded-knowledge/indexes/tags/shortcuts.json +0 -1
  475. package/embedded-knowledge/indexes/tags/sift.json +0 -1
  476. package/embedded-knowledge/indexes/tags/singleinstance.json +0 -1
  477. package/embedded-knowledge/indexes/tags/spacing.json +0 -1
  478. package/embedded-knowledge/indexes/tags/sql-translation.json +0 -1
  479. package/embedded-knowledge/indexes/tags/standards.json +0 -1
  480. package/embedded-knowledge/indexes/tags/statements.json +0 -1
  481. package/embedded-knowledge/indexes/tags/streaming.json +0 -1
  482. package/embedded-knowledge/indexes/tags/strong-typing.json +0 -1
  483. package/embedded-knowledge/indexes/tags/structural-patterns.json +0 -1
  484. package/embedded-knowledge/indexes/tags/structure.json +0 -1
  485. package/embedded-knowledge/indexes/tags/subscribers.json +0 -1
  486. package/embedded-knowledge/indexes/tags/switch.json +0 -1
  487. package/embedded-knowledge/indexes/tags/symbol-search.json +0 -1
  488. package/embedded-knowledge/indexes/tags/syntax.json +0 -1
  489. package/embedded-knowledge/indexes/tags/systemid.json +0 -1
  490. package/embedded-knowledge/indexes/tags/table-configuration.json +0 -1
  491. package/embedded-knowledge/indexes/tags/table-events.json +0 -1
  492. package/embedded-knowledge/indexes/tags/table-keys.json +0 -1
  493. package/embedded-knowledge/indexes/tags/table-safety.json +0 -1
  494. package/embedded-knowledge/indexes/tags/task-scheduler.json +0 -1
  495. package/embedded-knowledge/indexes/tags/telemetry.json +0 -1
  496. package/embedded-knowledge/indexes/tags/template-method.json +0 -1
  497. package/embedded-knowledge/indexes/tags/temporary-tables.json +0 -1
  498. package/embedded-knowledge/indexes/tags/testfield.json +0 -1
  499. package/embedded-knowledge/indexes/tags/tradeoffs.json +0 -1
  500. package/embedded-knowledge/indexes/tags/triggers.json +0 -1
  501. package/embedded-knowledge/indexes/tags/troubleshooting.json +0 -1
  502. package/embedded-knowledge/indexes/tags/type-safety.json +0 -1
  503. package/embedded-knowledge/indexes/tags/url-structure.json +0 -1
  504. package/embedded-knowledge/indexes/tags/user-experience.json +0 -1
  505. package/embedded-knowledge/indexes/tags/user-feedback.json +0 -1
  506. package/embedded-knowledge/indexes/tags/user-interface.json +0 -1
  507. package/embedded-knowledge/indexes/tags/validation-feedback.json +0 -1
  508. package/embedded-knowledge/indexes/tags/validation.json +0 -1
  509. package/embedded-knowledge/indexes/tags/variables.json +0 -1
  510. package/embedded-knowledge/indexes/tags/verbosity.json +0 -1
  511. package/embedded-knowledge/indexes/tags/vs-code.json +0 -1
  512. package/embedded-knowledge/indexes/tags/web-services.json +0 -1
  513. package/embedded-knowledge/indexes/tags/workflow-management.json +0 -1
  514. package/embedded-knowledge/indexes/tags/workflow-optimization.json +0 -1
  515. package/embedded-knowledge/indexes/tags/workflow-templates.json +0 -1
  516. package/embedded-knowledge/indexes/tags/workspace.json +0 -1
  517. package/embedded-knowledge/indexes/tags/xml-documentation.json +0 -1
  518. package/embedded-knowledge/indexes/topic-relationships.json +0 -128
  519. package/embedded-knowledge/methodologies/index.json +0 -81
  520. package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
  521. package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
  522. package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
  523. package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
  524. package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
  525. package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
  526. package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
  527. package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
  528. package/embedded-knowledge/methodologies/phases/performance.md +0 -211
  529. package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
  530. package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
  531. package/embedded-knowledge/methodologies/phases/verification.md +0 -146
  532. package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
  533. package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
  534. package/embedded-knowledge/specialists/alex-architect.md +0 -216
  535. package/embedded-knowledge/specialists/casey-copilot.md +0 -226
  536. package/embedded-knowledge/specialists/chris-config.md +0 -267
  537. package/embedded-knowledge/specialists/dean-debug.md +0 -222
  538. package/embedded-knowledge/specialists/eva-errors.md +0 -235
  539. package/embedded-knowledge/specialists/jordan-bridge.md +0 -235
  540. package/embedded-knowledge/specialists/logan-legacy.md +0 -209
  541. package/embedded-knowledge/specialists/maya-mentor.md +0 -211
  542. package/embedded-knowledge/specialists/morgan-market.md +0 -226
  543. package/embedded-knowledge/specialists/quinn-tester.md +0 -235
  544. package/embedded-knowledge/specialists/roger-reviewer.md +0 -234
  545. package/embedded-knowledge/specialists/sam-coder.md +0 -359
  546. package/embedded-knowledge/specialists/seth-security.md +0 -235
  547. package/embedded-knowledge/specialists/taylor-docs.md +0 -257
  548. package/embedded-knowledge/specialists/uma-ux.md +0 -235
@@ -1,319 +0,0 @@
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
- ```
@@ -1,236 +0,0 @@
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
- ```
@@ -1,59 +0,0 @@
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.
@@ -1,67 +0,0 @@
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.