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,516 +0,0 @@
1
- # Custom Telemetry Implementation - AL Code Examples
2
-
3
- ## Basic Session.LogMessage() Implementation
4
-
5
- ```al
6
- // Basic telemetry logging with Session.LogMessage()
7
- codeunit 50300 "Basic Telemetry Examples"
8
- {
9
- procedure LogBasicEvent()
10
- var
11
- CustomDimensions: Dictionary of [Text, Text];
12
- begin
13
- // Simple event logging without custom dimensions
14
- Session.LogMessage('0001', 'User accessed customer list', Verbosity::Normal,
15
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, '');
16
-
17
- // Event logging with basic custom dimensions
18
- CustomDimensions.Add('FeatureName', 'CustomerManagement');
19
- CustomDimensions.Add('ActionType', 'ViewList');
20
-
21
- Session.LogMessage('0002', 'Customer list accessed with filters', Verbosity::Normal,
22
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
23
- CustomDimensions);
24
- end;
25
- }
26
- ```
27
-
28
- ## Privacy-Compliant Telemetry Patterns
29
-
30
- ```al
31
- // Privacy-compliant telemetry implementation
32
- codeunit 50301 "Privacy Safe Telemetry"
33
- {
34
- procedure LogUserActionSafely(CustomerNo: Code[20]; ActionPerformed: Text)
35
- var
36
- CustomDimensions: Dictionary of [Text, Text];
37
- HashedCustomerNo: Text;
38
- begin
39
- // CORRECT: Hash or anonymize sensitive data
40
- HashedCustomerNo := CreateGuid(); // Simplified example - use proper hashing in production
41
-
42
- CustomDimensions.Add('CustomerHash', HashedCustomerNo);
43
- CustomDimensions.Add('ActionType', ActionPerformed);
44
- CustomDimensions.Add('CompanySize', GetCompanySizeCategory());
45
- CustomDimensions.Add('UserRole', GetUserRoleCategory());
46
-
47
- Session.LogMessage('0010', 'Customer action performed', Verbosity::Normal,
48
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
49
- CustomDimensions);
50
- end;
51
-
52
- procedure LogSalesDocumentEvent(DocumentType: Enum "Sales Document Type"; LineCount: Integer)
53
- var
54
- CustomDimensions: Dictionary of [Text, Text];
55
- begin
56
- // CORRECT: Log aggregated, non-sensitive data
57
- CustomDimensions.Add('DocumentType', Format(DocumentType));
58
- CustomDimensions.Add('LineCountRange', GetLineCountRange(LineCount));
59
- CustomDimensions.Add('ProcessingTime', Format(CurrentDateTime - StartTime));
60
-
61
- Session.LogMessage('0011', 'Sales document processed', Verbosity::Normal,
62
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
63
- CustomDimensions);
64
- end;
65
-
66
- local procedure GetCompanySizeCategory(): Text
67
- var
68
- CustomerCount: Integer;
69
- Customer: Record Customer;
70
- begin
71
- // Categorize without exposing exact counts
72
- CustomerCount := Customer.Count();
73
-
74
- case CustomerCount of
75
- 0..50: exit('Small');
76
- 51..500: exit('Medium');
77
- else exit('Large');
78
- end;
79
- end;
80
-
81
- local procedure GetLineCountRange(LineCount: Integer): Text
82
- begin
83
- // Return ranges instead of exact counts for privacy
84
- case LineCount of
85
- 0..5: exit('1-5');
86
- 6..20: exit('6-20');
87
- 21..50: exit('21-50');
88
- else exit('50+');
89
- end;
90
- end;
91
- }
92
- ```
93
-
94
- ## Error Handling and Performance Monitoring
95
-
96
- ```al
97
- // Error handling and performance telemetry
98
- codeunit 50302 "Error and Performance Telemetry"
99
- {
100
- procedure ProcessWithTelemetry()
101
- var
102
- CustomDimensions: Dictionary of [Text, Text];
103
- StartTime: DateTime;
104
- ProcessingDuration: Duration;
105
- IsSuccess: Boolean;
106
- begin
107
- StartTime := CurrentDateTime;
108
-
109
- // Log process start
110
- CustomDimensions.Add('ProcessName', 'DataImport');
111
- CustomDimensions.Add('StartTime', Format(StartTime));
112
-
113
- Session.LogMessage('0020', 'Data import process started', Verbosity::Normal,
114
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
115
- CustomDimensions);
116
-
117
- // Perform the actual work with error handling
118
- IsSuccess := TryExecuteProcess();
119
- ProcessingDuration := CurrentDateTime - StartTime;
120
-
121
- // Log completion with performance metrics
122
- Clear(CustomDimensions);
123
- CustomDimensions.Add('ProcessName', 'DataImport');
124
- CustomDimensions.Add('Duration', Format(ProcessingDuration));
125
- CustomDimensions.Add('Success', Format(IsSuccess));
126
- CustomDimensions.Add('PerformanceCategory', GetPerformanceCategory(ProcessingDuration));
127
-
128
- if IsSuccess then begin
129
- Session.LogMessage('0021', 'Data import completed successfully', Verbosity::Normal,
130
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
131
- CustomDimensions);
132
- end else begin
133
- // Add error context without exposing sensitive data
134
- CustomDimensions.Add('ErrorCategory', GetLastErrorCategory());
135
- Session.LogMessage('0022', 'Data import failed', Verbosity::Error,
136
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
137
- CustomDimensions);
138
- end;
139
- end;
140
-
141
- [TryFunction]
142
- local procedure TryExecuteProcess()
143
- begin
144
- // Simulate work that might fail
145
- if Random(10) > 7 then
146
- Error('Simulated processing error');
147
- end;
148
-
149
- local procedure GetPerformanceCategory(Duration: Duration): Text
150
- begin
151
- // Categorize performance for analysis
152
- if Duration < 1000 then exit('Fast');
153
- if Duration < 5000 then exit('Normal');
154
- if Duration < 15000 then exit('Slow');
155
- exit('VerySlow');
156
- end;
157
-
158
- local procedure GetLastErrorCategory(): Text
159
- var
160
- ErrorText: Text;
161
- begin
162
- ErrorText := GetLastErrorText();
163
-
164
- // Categorize errors without exposing sensitive details
165
- if StrPos(ErrorText, 'permission') > 0 then exit('Permission');
166
- if StrPos(ErrorText, 'network') > 0 then exit('Network');
167
- if StrPos(ErrorText, 'database') > 0 then exit('Database');
168
- if StrPos(ErrorText, 'timeout') > 0 then exit('Timeout');
169
- exit('General');
170
- end;
171
- }
172
- ```
173
-
174
- ## API Usage Telemetry
175
-
176
- ```al
177
- // API performance and usage tracking
178
- codeunit 50303 "API Usage Telemetry"
179
- {
180
- procedure LogAPICall(APIEndpoint: Text; ResponseTime: Duration; Success: Boolean)
181
- var
182
- CustomDimensions: Dictionary of [Text, Text];
183
- begin
184
- // Track API performance and usage patterns
185
- CustomDimensions.Add('APIEndpoint', APIEndpoint);
186
- CustomDimensions.Add('ResponseTime', Format(ResponseTime));
187
- CustomDimensions.Add('Success', Format(Success));
188
- CustomDimensions.Add('PerformanceTier', GetAPIPerformanceTier(ResponseTime));
189
- CustomDimensions.Add('TimeOfDay', GetTimeCategory());
190
-
191
- Session.LogMessage('0030', 'API call completed', Verbosity::Normal,
192
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
193
- CustomDimensions);
194
- end;
195
-
196
- procedure LogFeatureUsage(FeatureName: Text; FeatureVersion: Text; UsageContext: Text)
197
- var
198
- CustomDimensions: Dictionary of [Text, Text];
199
- begin
200
- // Track feature adoption and usage patterns
201
- CustomDimensions.Add('FeatureName', FeatureName);
202
- CustomDimensions.Add('FeatureVersion', FeatureVersion);
203
- CustomDimensions.Add('UsageContext', UsageContext);
204
- CustomDimensions.Add('UserCategory', GetAnonymousUserCategory());
205
- CustomDimensions.Add('SessionId', GetSessionHash());
206
-
207
- Session.LogMessage('0031', 'Feature used', Verbosity::Normal,
208
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
209
- CustomDimensions);
210
- end;
211
-
212
- local procedure GetAPIPerformanceTier(ResponseTime: Duration): Text
213
- begin
214
- if ResponseTime < 500 then exit('Excellent');
215
- if ResponseTime < 2000 then exit('Good');
216
- if ResponseTime < 5000 then exit('Acceptable');
217
- exit('Poor');
218
- end;
219
-
220
- local procedure GetTimeCategory(): Text
221
- var
222
- CurrentTime: Time;
223
- begin
224
- CurrentTime := Time;
225
- if CurrentTime < 090000T then exit('EarlyMorning');
226
- if CurrentTime < 120000T then exit('Morning');
227
- if CurrentTime < 140000T then exit('Midday');
228
- if CurrentTime < 170000T then exit('Afternoon');
229
- exit('Evening');
230
- end;
231
-
232
- local procedure GetAnonymousUserCategory(): Text
233
- var
234
- UserSetup: Record "User Setup";
235
- begin
236
- // Categorize users without identifying them
237
- if UserSetup.Get(UserId) then begin
238
- if UserSetup."Sales Resp. Ctr. Filter" <> '' then exit('SalesUser');
239
- if UserSetup."Purchase Resp. Ctr. Filter" <> '' then exit('PurchaseUser');
240
- end;
241
- exit('GeneralUser');
242
- end;
243
-
244
- local procedure GetSessionHash(): Text
245
- begin
246
- // Create session identifier without exposing user identity
247
- exit(CopyStr(CreateGuid(), 1, 8));
248
- end;
249
- }
250
- ```
251
-
252
- ## Anti-Pattern Examples (What NOT to Do)
253
-
254
- ```al
255
- // ANTI-PATTERNS: Examples of incorrect telemetry implementation
256
- codeunit 50304 "Telemetry Anti-Patterns"
257
- {
258
- // ❌ WRONG: Logging sensitive customer data
259
- procedure BadExample_SensitiveData(CustomerNo: Code[20]; CustomerName: Text)
260
- var
261
- CustomDimensions: Dictionary of [Text, Text];
262
- begin
263
- // ❌ NEVER log personal or sensitive business data
264
- CustomDimensions.Add('CustomerNo', CustomerNo); // Exposes customer identity
265
- CustomDimensions.Add('CustomerName', CustomerName); // Exposes personal data
266
- CustomDimensions.Add('CreditLimit', '50000'); // Exposes business sensitive data
267
-
268
- // This violates privacy regulations and security best practices
269
- Session.LogMessage('9001', 'Customer accessed - BAD EXAMPLE', Verbosity::Normal,
270
- DataClassification::CustomerContent, // Wrong classification
271
- TelemetryScope::ExtensionPublisher, CustomDimensions);
272
- end;
273
-
274
- // ❌ WRONG: Excessive logging that impacts performance
275
- procedure BadExample_ExcessiveLogging()
276
- var
277
- Customer: Record Customer;
278
- CustomDimensions: Dictionary of [Text, Text];
279
- begin
280
- // ❌ NEVER log inside tight loops without consideration
281
- Customer.FindSet();
282
- repeat
283
- CustomDimensions.Add('CustomerProcessed', Customer."No."); // Also privacy violation
284
- // This will create thousands of telemetry events and impact performance
285
- Session.LogMessage('9002', 'Processing customer', Verbosity::Verbose,
286
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
287
- CustomDimensions);
288
- until Customer.Next() = 0;
289
- end;
290
-
291
- // ❌ WRONG: Poor error logging without context
292
- procedure BadExample_PoorErrorLogging()
293
- begin
294
- // ❌ Logging error without useful context for debugging
295
- Session.LogMessage('9003', 'An error occurred', Verbosity::Error,
296
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, '');
297
-
298
- // Missing: Error category, operation context, environmental factors
299
- end;
300
-
301
- // ❌ WRONG: Using wrong telemetry scope and classification
302
- procedure BadExample_WrongScope()
303
- var
304
- CustomDimensions: Dictionary of [Text, Text];
305
- begin
306
- CustomDimensions.Add('InternalProcessId', CreateGuid());
307
-
308
- // ❌ Wrong scope - should be ExtensionPublisher for app-specific events
309
- // ❌ Wrong classification - internal process data shouldn't be CustomerContent
310
- Session.LogMessage('9004', 'Internal process', Verbosity::Normal,
311
- DataClassification::CustomerContent, // Wrong classification
312
- TelemetryScope::All, // Wrong scope
313
- CustomDimensions);
314
- end;
315
- }
316
- ```
317
-
318
- ## Performance-Conscious Telemetry
319
-
320
- ```al
321
- // Performance-aware telemetry implementation
322
- codeunit 50305 "Performance Aware Telemetry"
323
- {
324
- var
325
- SamplingRate: Integer;
326
- EventCounter: Integer;
327
-
328
- procedure InitializeTelemetry()
329
- begin
330
- SamplingRate := 5; // 5% sampling for high-frequency events
331
- EventCounter := 0;
332
- end;
333
-
334
- procedure LogHighFrequencyEvent(EventType: Text)
335
- var
336
- CustomDimensions: Dictionary of [Text, Text];
337
- begin
338
- EventCounter += 1;
339
-
340
- // Use sampling to reduce telemetry volume
341
- if (EventCounter mod (100 div SamplingRate)) = 0 then begin
342
- CustomDimensions.Add('EventType', EventType);
343
- CustomDimensions.Add('SamplingRate', Format(SamplingRate) + '%');
344
- CustomDimensions.Add('EventsSinceLastLog', Format(100 div SamplingRate));
345
-
346
- Session.LogMessage('PERF001', 'Sampled high-frequency event', Verbosity::Normal,
347
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
348
- CustomDimensions);
349
- end;
350
- end;
351
-
352
- procedure LogBatchOperation(OperationType: Text; RecordCount: Integer; Duration: Duration)
353
- var
354
- CustomDimensions: Dictionary of [Text, Text];
355
- begin
356
- // Aggregate telemetry for batch operations
357
- CustomDimensions.Add('OperationType', OperationType);
358
- CustomDimensions.Add('RecordCountRange', GetRecordCountRange(RecordCount));
359
- CustomDimensions.Add('DurationCategory', GetDurationCategory(Duration));
360
- CustomDimensions.Add('ThroughputCategory', GetThroughputCategory(RecordCount, Duration));
361
-
362
- Session.LogMessage('PERF002', 'Batch operation completed', Verbosity::Normal,
363
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
364
- CustomDimensions);
365
- end;
366
-
367
- local procedure GetRecordCountRange(RecordCount: Integer): Text
368
- begin
369
- case RecordCount of
370
- 0..100: exit('1-100');
371
- 101..1000: exit('101-1000');
372
- 1001..10000: exit('1001-10000');
373
- else exit('10000+');
374
- end;
375
- end;
376
-
377
- local procedure GetDurationCategory(Duration: Duration): Text
378
- begin
379
- if Duration < 1000 then exit('Fast');
380
- if Duration < 5000 then exit('Normal');
381
- if Duration < 30000 then exit('Slow');
382
- exit('VerySlow');
383
- end;
384
-
385
- local procedure GetThroughputCategory(RecordCount: Integer; Duration: Duration): Text
386
- var
387
- RecordsPerSecond: Decimal;
388
- begin
389
- if Duration = 0 then exit('Instant');
390
-
391
- RecordsPerSecond := RecordCount / (Duration / 1000);
392
-
393
- if RecordsPerSecond > 1000 then exit('High');
394
- if RecordsPerSecond > 100 then exit('Medium');
395
- exit('Low');
396
- end;
397
- }
398
- ```
399
-
400
- ## Best Practices Implementation
401
-
402
- ```al
403
- // Comprehensive best practices example
404
- codeunit 50306 "Telemetry Best Practices"
405
- {
406
- procedure ImplementCorrectTelemetry()
407
- var
408
- CustomDimensions: Dictionary of [Text, Text];
409
- StartTime: DateTime;
410
- ProcessSuccess: Boolean;
411
- begin
412
- StartTime := CurrentDateTime;
413
-
414
- // ✅ CORRECT: Use meaningful event IDs and structured messages
415
- // ✅ CORRECT: Use appropriate verbosity levels
416
- // ✅ CORRECT: Use SystemMetadata classification for telemetry
417
- // ✅ CORRECT: Use ExtensionPublisher scope for app events
418
-
419
- CustomDimensions.Add('ProcessType', 'CustomerDataSync'); // Business context
420
- CustomDimensions.Add('UserCategory', GetUserCategory()); // Anonymized user info
421
- CustomDimensions.Add('CompanySize', GetCompanyCategory()); // Environmental context
422
- CustomDimensions.Add('FeatureVersion', '2.1.0'); // Version tracking
423
-
424
- Session.LogMessage('BP001', 'Customer data sync initiated', Verbosity::Normal,
425
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
426
- CustomDimensions);
427
-
428
- // Execute process with proper error handling
429
- ProcessSuccess := TryExecuteSync();
430
-
431
- // Log completion with comprehensive context
432
- Clear(CustomDimensions);
433
- CustomDimensions.Add('ProcessType', 'CustomerDataSync');
434
- CustomDimensions.Add('Duration', GetDurationCategory(CurrentDateTime - StartTime));
435
- CustomDimensions.Add('Success', Format(ProcessSuccess));
436
-
437
- if ProcessSuccess then begin
438
- CustomDimensions.Add('Outcome', 'Success');
439
- Session.LogMessage('BP002', 'Customer data sync completed successfully', Verbosity::Normal,
440
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
441
- CustomDimensions);
442
- end else begin
443
- CustomDimensions.Add('Outcome', 'Failed');
444
- CustomDimensions.Add('ErrorCategory', GetErrorCategory());
445
- Session.LogMessage('BP003', 'Customer data sync failed', Verbosity::Error,
446
- DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher,
447
- CustomDimensions);
448
- end;
449
- end;
450
-
451
- [TryFunction]
452
- local procedure TryExecuteSync()
453
- begin
454
- // Simulate sync operation that might fail
455
- Sleep(Random(5000));
456
- if Random(10) > 8 then
457
- Error('Simulated sync failure');
458
- end;
459
-
460
- local procedure GetUserCategory(): Text
461
- begin
462
- // Return user role category without identifying specific user
463
- exit('Administrator'); // Simplified - implement actual role detection
464
- end;
465
-
466
- local procedure GetCompanyCategory(): Text
467
- begin
468
- // Return company size category for environmental context
469
- exit('Medium'); // Simplified - implement actual size detection
470
- end;
471
-
472
- local procedure GetDurationCategory(Duration: Duration): Text
473
- begin
474
- if Duration < 2000 then exit('Fast');
475
- if Duration < 10000 then exit('Normal');
476
- exit('Slow');
477
- end;
478
-
479
- local procedure GetErrorCategory(): Text
480
- var
481
- ErrorText: Text;
482
- begin
483
- ErrorText := LowerCase(GetLastErrorText());
484
-
485
- if StrPos(ErrorText, 'permission') > 0 then exit('Permission');
486
- if StrPos(ErrorText, 'network') > 0 then exit('Network');
487
- if StrPos(ErrorText, 'timeout') > 0 then exit('Timeout');
488
- exit('General');
489
- end;
490
- }
491
- ```
492
-
493
- ## Key Implementation Guidelines
494
-
495
- ### Event ID Strategy
496
- - Use consistent prefixes for different functional areas
497
- - Keep IDs unique and sequential within your extension
498
- - Document ID meanings for long-term maintenance
499
-
500
- ### Custom Dimensions Best Practices
501
- - Use descriptive, PascalCase key names
502
- - Keep values concise but meaningful
503
- - Limit dimensions per event (5-10 recommended)
504
- - Use categorical values instead of exact numbers
505
-
506
- ### Privacy Compliance Checklist
507
- - Never log customer names, addresses, or identifiable information
508
- - Use hashing or anonymization for sensitive identifiers
509
- - Categorize numerical data instead of exact values
510
- - Review all telemetry for privacy violations before deployment
511
-
512
- ### Performance Considerations
513
- - Avoid telemetry in tight loops
514
- - Use sampling for high-frequency events
515
- - Aggregate data for batch operations
516
- - Monitor telemetry impact on application performance