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.
- package/dist/config/test-enhanced-layer-service.js +10 -10
- package/dist/config/test-enhanced-layer-service.js.map +1 -1
- package/dist/dev/hot-reload.d.ts +2 -2
- package/dist/dev/hot-reload.d.ts.map +1 -1
- package/dist/dev/hot-reload.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -38
- package/dist/index.js.map +1 -1
- package/dist/layers/index.d.ts +1 -1
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/layers/index.js +1 -1
- package/dist/layers/index.js.map +1 -1
- package/dist/services/code-analysis-service.d.ts.map +1 -1
- package/dist/services/code-analysis-service.js +4 -0
- package/dist/services/code-analysis-service.js.map +1 -1
- package/dist/services/knowledge-service.d.ts +21 -10
- package/dist/services/knowledge-service.d.ts.map +1 -1
- package/dist/services/knowledge-service.js +71 -54
- package/dist/services/knowledge-service.js.map +1 -1
- package/dist/services/multi-content-layer-service.d.ts +90 -0
- package/dist/services/multi-content-layer-service.d.ts.map +1 -1
- package/dist/services/multi-content-layer-service.js +380 -0
- package/dist/services/multi-content-layer-service.js.map +1 -1
- package/dist/services/workflow-service.d.ts +11 -3
- package/dist/services/workflow-service.d.ts.map +1 -1
- package/dist/services/workflow-service.js +119 -78
- package/dist/services/workflow-service.js.map +1 -1
- package/dist/streamlined-handlers.d.ts +31 -2
- package/dist/streamlined-handlers.d.ts.map +1 -1
- package/dist/streamlined-handlers.js +151 -109
- package/dist/streamlined-handlers.js.map +1 -1
- package/dist/streamlined-tools.d.ts +12 -0
- package/dist/streamlined-tools.d.ts.map +1 -1
- package/dist/streamlined-tools.js +11 -6
- package/dist/streamlined-tools.js.map +1 -1
- package/package.json +13 -4
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +0 -24
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +0 -24
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +0 -30
- package/embedded-knowledge/AGENTS.md +0 -178
- package/embedded-knowledge/CONTRIBUTING.md +0 -58
- package/embedded-knowledge/LICENSE +0 -21
- package/embedded-knowledge/README.md +0 -32
- package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +0 -90
- package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +0 -113
- package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +0 -101
- package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +0 -87
- package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +0 -155
- package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +0 -138
- package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +0 -79
- package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +0 -280
- package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +0 -200
- package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +0 -565
- package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +0 -665
- package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +0 -325
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +0 -696
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +0 -320
- package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +0 -102
- package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +0 -433
- package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +0 -66
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +0 -115
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +0 -360
- package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +0 -86
- package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +0 -96
- package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +0 -70
- package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +0 -84
- package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +0 -93
- package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +0 -73
- package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +0 -78
- package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +0 -79
- package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +0 -87
- package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +0 -209
- package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +0 -246
- package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +0 -107
- package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +0 -105
- package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +0 -186
- package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +0 -60
- package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +0 -139
- package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +0 -190
- package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +0 -516
- package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +0 -298
- package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +0 -324
- package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +0 -344
- package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +0 -137
- package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +0 -340
- package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +0 -810
- package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +0 -86
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +0 -110
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +0 -758
- package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +0 -665
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +0 -316
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +0 -223
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +0 -149
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +0 -412
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +0 -211
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +0 -155
- package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +0 -475
- package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +0 -238
- package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +0 -97
- package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +0 -666
- package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +0 -319
- package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +0 -236
- package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +0 -59
- package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +0 -67
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +0 -70
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +0 -90
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +0 -87
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +0 -70
- package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +0 -74
- package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +0 -81
- package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +0 -56
- package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +0 -66
- package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +0 -79
- package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +0 -78
- package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +0 -83
- package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +0 -76
- package/embedded-knowledge/domains/dean-debug/testfield-performance.md +0 -104
- package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +0 -145
- package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +0 -104
- package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +0 -114
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +0 -356
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +0 -256
- package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +0 -101
- package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +0 -108
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +0 -80
- package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +0 -98
- package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +0 -123
- package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +0 -96
- package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +0 -115
- package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +0 -115
- package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +0 -114
- package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +0 -395
- package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +0 -479
- package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +0 -548
- package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +0 -287
- package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +0 -434
- package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +0 -508
- package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +0 -615
- package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +0 -144
- package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +0 -96
- package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +0 -124
- package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +0 -84
- package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +0 -75
- package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +0 -96
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +0 -385
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +0 -72
- package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +0 -48
- package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +0 -49
- package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +0 -67
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +0 -119
- package/embedded-knowledge/domains/quinn-tester/rule-execution.md +0 -123
- package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +0 -64
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +0 -60
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +0 -83
- package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +0 -716
- package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +0 -101
- package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +0 -91
- package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +0 -79
- package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +0 -79
- package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +0 -89
- package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +0 -81
- package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +0 -75
- package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +0 -96
- package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +0 -86
- package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +0 -90
- package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +0 -82
- package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +0 -78
- package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +0 -78
- package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +0 -100
- package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +0 -115
- package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +0 -124
- package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +0 -110
- package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +0 -438
- package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +0 -255
- package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +0 -209
- package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +0 -218
- package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +0 -218
- package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +0 -280
- package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +0 -188
- package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +0 -245
- package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +0 -244
- package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +0 -278
- package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +0 -484
- package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +0 -64
- package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +0 -107
- package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +0 -280
- package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +0 -75
- package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +0 -67
- package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +0 -76
- package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +0 -98
- package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +0 -128
- package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +0 -75
- package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +0 -95
- package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +0 -141
- package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +0 -91
- package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +0 -118
- package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +0 -111
- package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +0 -113
- package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +0 -127
- package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +0 -141
- package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +0 -66
- package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +0 -96
- package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +0 -161
- package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +0 -177
- package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +0 -239
- package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +0 -346
- package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +0 -298
- package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +0 -677
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +0 -117
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +0 -75
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +0 -169
- package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +0 -399
- package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +0 -356
- package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +0 -889
- package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +0 -84
- package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +0 -127
- package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +0 -89
- package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +0 -516
- package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +0 -61
- package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +0 -427
- package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +0 -122
- package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +0 -96
- package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +0 -101
- package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +0 -149
- package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +0 -107
- package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +0 -95
- package/embedded-knowledge/domains/seth-security/api-permission-model.md +0 -115
- package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +0 -78
- package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +0 -373
- package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +0 -308
- package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +0 -146
- package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +0 -79
- package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +0 -78
- package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +0 -81
- package/embedded-knowledge/indexes/bc-version-matrix.json +0 -188
- package/embedded-knowledge/indexes/domain-catalog.json +0 -106
- package/embedded-knowledge/indexes/tags/abbreviations.json +0 -1
- package/embedded-knowledge/indexes/tags/abstraction.json +0 -1
- package/embedded-knowledge/indexes/tags/access-control.json +0 -1
- package/embedded-knowledge/indexes/tags/accessibility.json +0 -1
- package/embedded-knowledge/indexes/tags/actions.json +0 -1
- package/embedded-knowledge/indexes/tags/advanced-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/advanced.json +0 -1
- package/embedded-knowledge/indexes/tags/al-extension.json +0 -1
- package/embedded-knowledge/indexes/tags/al-generics.json +0 -1
- package/embedded-knowledge/indexes/tags/al-objects.json +0 -1
- package/embedded-knowledge/indexes/tags/al-syntax.json +0 -1
- package/embedded-knowledge/indexes/tags/algorithm-structure.json +0 -1
- package/embedded-knowledge/indexes/tags/alternatives.json +0 -1
- package/embedded-knowledge/indexes/tags/analytics.json +0 -1
- package/embedded-knowledge/indexes/tags/api-delegates.json +0 -1
- package/embedded-knowledge/indexes/tags/api-design.json +0 -1
- package/embedded-knowledge/indexes/tags/api-documentation.json +0 -1
- package/embedded-knowledge/indexes/tags/api-endpoints.json +0 -1
- package/embedded-knowledge/indexes/tags/api-extensibility.json +0 -1
- package/embedded-knowledge/indexes/tags/api-fieldsets.json +0 -1
- package/embedded-knowledge/indexes/tags/api-integration.json +0 -1
- package/embedded-knowledge/indexes/tags/api-interfaces.json +0 -1
- package/embedded-knowledge/indexes/tags/api-optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/api-pages.json +0 -1
- package/embedded-knowledge/indexes/tags/api-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/api-permissions.json +0 -1
- package/embedded-knowledge/indexes/tags/api-responses.json +0 -1
- package/embedded-knowledge/indexes/tags/api-simplification.json +0 -1
- package/embedded-knowledge/indexes/tags/api.json +0 -1
- package/embedded-knowledge/indexes/tags/architecture.json +0 -1
- package/embedded-knowledge/indexes/tags/async-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/async-processing.json +0 -1
- package/embedded-knowledge/indexes/tags/automatic-registration.json +0 -1
- package/embedded-knowledge/indexes/tags/batch-operations.json +0 -1
- package/embedded-knowledge/indexes/tags/bc24-migration.json +0 -1
- package/embedded-knowledge/indexes/tags/begin-blocks.json +0 -1
- package/embedded-knowledge/indexes/tags/begin-end.json +0 -1
- package/embedded-knowledge/indexes/tags/behavioral-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/best-practices.json +0 -1
- package/embedded-knowledge/indexes/tags/binding.json +0 -1
- package/embedded-knowledge/indexes/tags/block-structure.json +0 -1
- package/embedded-knowledge/indexes/tags/blocks.json +0 -1
- package/embedded-knowledge/indexes/tags/boolean-expressions.json +0 -1
- package/embedded-knowledge/indexes/tags/branching.json +0 -1
- package/embedded-knowledge/indexes/tags/breaking-changes.json +0 -1
- package/embedded-knowledge/indexes/tags/breakpoints.json +0 -1
- package/embedded-knowledge/indexes/tags/business-foundation.json +0 -1
- package/embedded-knowledge/indexes/tags/business-infrastructure.json +0 -1
- package/embedded-knowledge/indexes/tags/business-process.json +0 -1
- package/embedded-knowledge/indexes/tags/business-rules.json +0 -1
- package/embedded-knowledge/indexes/tags/caching.json +0 -1
- package/embedded-knowledge/indexes/tags/case-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/case.json +0 -1
- package/embedded-knowledge/indexes/tags/code-analysis.json +0 -1
- package/embedded-knowledge/indexes/tags/code-clarity.json +0 -1
- package/embedded-knowledge/indexes/tags/code-comprehension.json +0 -1
- package/embedded-knowledge/indexes/tags/code-conversion.json +0 -1
- package/embedded-knowledge/indexes/tags/code-formatting.json +0 -1
- package/embedded-knowledge/indexes/tags/code-organization.json +0 -1
- package/embedded-knowledge/indexes/tags/code-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/code-quality.json +0 -1
- package/embedded-knowledge/indexes/tags/code-reuse.json +0 -1
- package/embedded-knowledge/indexes/tags/code-simplification.json +0 -1
- package/embedded-knowledge/indexes/tags/code-standards.json +0 -1
- package/embedded-knowledge/indexes/tags/code-structure.json +0 -1
- package/embedded-knowledge/indexes/tags/code-style.json +0 -1
- package/embedded-knowledge/indexes/tags/codeunit-design.json +0 -1
- package/embedded-knowledge/indexes/tags/command-queue.json +0 -1
- package/embedded-knowledge/indexes/tags/comments.json +0 -1
- package/embedded-knowledge/indexes/tags/compile-time-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/complex-facade.json +0 -1
- package/embedded-knowledge/indexes/tags/complexity-hiding.json +0 -1
- package/embedded-knowledge/indexes/tags/complexity-management.json +0 -1
- package/embedded-knowledge/indexes/tags/compound-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/concurrency.json +0 -1
- package/embedded-knowledge/indexes/tags/conditional-logic.json +0 -1
- package/embedded-knowledge/indexes/tags/conditional.json +0 -1
- package/embedded-knowledge/indexes/tags/conflict-resolution.json +0 -1
- package/embedded-knowledge/indexes/tags/consistency.json +0 -1
- package/embedded-knowledge/indexes/tags/contract-design.json +0 -1
- package/embedded-knowledge/indexes/tags/control-flow.json +0 -1
- package/embedded-knowledge/indexes/tags/conversion-guide.json +0 -1
- package/embedded-knowledge/indexes/tags/correlation.json +0 -1
- package/embedded-knowledge/indexes/tags/custom-messages.json +0 -1
- package/embedded-knowledge/indexes/tags/data-access.json +0 -1
- package/embedded-knowledge/indexes/tags/data-exposure.json +0 -1
- package/embedded-knowledge/indexes/tags/data-integrity.json +0 -1
- package/embedded-knowledge/indexes/tags/data-loading.json +0 -1
- package/embedded-knowledge/indexes/tags/data-manipulation.json +0 -1
- package/embedded-knowledge/indexes/tags/data-modeling.json +0 -1
- package/embedded-knowledge/indexes/tags/data-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/data-protection.json +0 -1
- package/embedded-knowledge/indexes/tags/data-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/database.json +0 -1
- package/embedded-knowledge/indexes/tags/debugging.json +0 -1
- package/embedded-knowledge/indexes/tags/decision-making.json +0 -1
- package/embedded-knowledge/indexes/tags/declaration.json +0 -1
- package/embedded-knowledge/indexes/tags/default-messages.json +0 -1
- package/embedded-knowledge/indexes/tags/defensive-programming.json +0 -1
- package/embedded-knowledge/indexes/tags/deleteall.json +0 -1
- package/embedded-knowledge/indexes/tags/dependencies.json +0 -1
- package/embedded-knowledge/indexes/tags/deployment.json +0 -1
- package/embedded-knowledge/indexes/tags/developer-productivity.json +0 -1
- package/embedded-knowledge/indexes/tags/development-workflow.json +0 -1
- package/embedded-knowledge/indexes/tags/diagnostics.json +0 -1
- package/embedded-knowledge/indexes/tags/dimensions.json +0 -1
- package/embedded-knowledge/indexes/tags/documentation.json +0 -1
- package/embedded-knowledge/indexes/tags/early-exit.json +0 -1
- package/embedded-knowledge/indexes/tags/else-clauses.json +0 -1
- package/embedded-knowledge/indexes/tags/end-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/enterprise-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/entity-relationships.json +0 -1
- package/embedded-knowledge/indexes/tags/error-handling.json +0 -1
- package/embedded-knowledge/indexes/tags/error-messages.json +0 -1
- package/embedded-knowledge/indexes/tags/error-prevention.json +0 -1
- package/embedded-knowledge/indexes/tags/error-text.json +0 -1
- package/embedded-knowledge/indexes/tags/etag.json +0 -1
- package/embedded-knowledge/indexes/tags/event-bridge.json +0 -1
- package/embedded-knowledge/indexes/tags/event-payload.json +0 -1
- package/embedded-knowledge/indexes/tags/event-routing.json +0 -1
- package/embedded-knowledge/indexes/tags/events.json +0 -1
- package/embedded-knowledge/indexes/tags/execution-flow.json +0 -1
- package/embedded-knowledge/indexes/tags/expressions.json +0 -1
- package/embedded-knowledge/indexes/tags/extensibility.json +0 -1
- package/embedded-knowledge/indexes/tags/extensions.json +0 -1
- package/embedded-knowledge/indexes/tags/facade-composition.json +0 -1
- package/embedded-knowledge/indexes/tags/facade-pattern.json +0 -1
- package/embedded-knowledge/indexes/tags/field-control.json +0 -1
- package/embedded-knowledge/indexes/tags/field-exclusion.json +0 -1
- package/embedded-knowledge/indexes/tags/field-registration.json +0 -1
- package/embedded-knowledge/indexes/tags/field-state.json +0 -1
- package/embedded-knowledge/indexes/tags/field-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/fielderror.json +0 -1
- package/embedded-knowledge/indexes/tags/fields.json +0 -1
- package/embedded-knowledge/indexes/tags/filtering.json +0 -1
- package/embedded-knowledge/indexes/tags/filters.json +0 -1
- package/embedded-knowledge/indexes/tags/formatting.json +0 -1
- package/embedded-knowledge/indexes/tags/generic-methods.json +0 -1
- package/embedded-knowledge/indexes/tags/http-status.json +0 -1
- package/embedded-knowledge/indexes/tags/if-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/implementation.json +0 -1
- package/embedded-knowledge/indexes/tags/indentation.json +0 -1
- package/embedded-knowledge/indexes/tags/index-summary.json +0 -277
- package/embedded-knowledge/indexes/tags/indexing.json +0 -1
- package/embedded-knowledge/indexes/tags/inheritance.json +0 -1
- package/embedded-knowledge/indexes/tags/integration.json +0 -1
- package/embedded-knowledge/indexes/tags/integrity-checking.json +0 -1
- package/embedded-knowledge/indexes/tags/intellisense.json +0 -1
- package/embedded-knowledge/indexes/tags/interface-design.json +0 -1
- package/embedded-knowledge/indexes/tags/interface-segregation.json +0 -1
- package/embedded-knowledge/indexes/tags/isolation.json +0 -1
- package/embedded-knowledge/indexes/tags/job-processing.json +0 -1
- package/embedded-knowledge/indexes/tags/keyboard-navigation.json +0 -1
- package/embedded-knowledge/indexes/tags/keywords.json +0 -1
- package/embedded-knowledge/indexes/tags/legacy-modernization.json +0 -1
- package/embedded-knowledge/indexes/tags/line-breaks.json +0 -1
- package/embedded-knowledge/indexes/tags/line-organization.json +0 -1
- package/embedded-knowledge/indexes/tags/line-positioning.json +0 -1
- package/embedded-knowledge/indexes/tags/localization.json +0 -1
- package/embedded-knowledge/indexes/tags/logging.json +0 -1
- package/embedded-knowledge/indexes/tags/loose-coupling.json +0 -1
- package/embedded-knowledge/indexes/tags/maintainability.json +0 -1
- package/embedded-knowledge/indexes/tags/memory-management.json +0 -1
- package/embedded-knowledge/indexes/tags/memory-optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/memory.json +0 -1
- package/embedded-knowledge/indexes/tags/message-design.json +0 -1
- package/embedded-knowledge/indexes/tags/message-formatting.json +0 -1
- package/embedded-knowledge/indexes/tags/message-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/metadata-driven.json +0 -1
- package/embedded-knowledge/indexes/tags/method-comparison.json +0 -1
- package/embedded-knowledge/indexes/tags/module-architecture.json +0 -1
- package/embedded-knowledge/indexes/tags/module-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/monitoring.json +0 -1
- package/embedded-knowledge/indexes/tags/multi-layer-facade.json +0 -1
- package/embedded-knowledge/indexes/tags/multi-tenancy.json +0 -1
- package/embedded-knowledge/indexes/tags/multiple-values.json +0 -1
- package/embedded-knowledge/indexes/tags/naming-conventions.json +0 -1
- package/embedded-knowledge/indexes/tags/naming.json +0 -1
- package/embedded-knowledge/indexes/tags/navigation.json +0 -1
- package/embedded-knowledge/indexes/tags/nested-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/no-series-conversion.json +0 -1
- package/embedded-knowledge/indexes/tags/no-series-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/no-series.json +0 -1
- package/embedded-knowledge/indexes/tags/number-generation.json +0 -1
- package/embedded-knowledge/indexes/tags/object-documentation.json +0 -1
- package/embedded-knowledge/indexes/tags/odata.json +0 -1
- package/embedded-knowledge/indexes/tags/ondelete.json +0 -1
- package/embedded-knowledge/indexes/tags/onvalidate.json +0 -1
- package/embedded-knowledge/indexes/tags/operation-delegation.json +0 -1
- package/embedded-knowledge/indexes/tags/operation-safety.json +0 -1
- package/embedded-knowledge/indexes/tags/operators.json +0 -1
- package/embedded-knowledge/indexes/tags/optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/order.json +0 -1
- package/embedded-knowledge/indexes/tags/organization.json +0 -1
- package/embedded-knowledge/indexes/tags/pages.json +0 -1
- package/embedded-knowledge/indexes/tags/parameters.json +0 -1
- package/embedded-knowledge/indexes/tags/patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/performance-optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/performance.json +0 -1
- package/embedded-knowledge/indexes/tags/placement.json +0 -1
- package/embedded-knowledge/indexes/tags/posting-codeunits.json +0 -1
- package/embedded-knowledge/indexes/tags/posting.json +0 -1
- package/embedded-knowledge/indexes/tags/preconditions.json +0 -1
- package/embedded-knowledge/indexes/tags/primary-key.json +0 -1
- package/embedded-knowledge/indexes/tags/privacy.json +0 -1
- package/embedded-knowledge/indexes/tags/process-automation.json +0 -1
- package/embedded-knowledge/indexes/tags/production.json +0 -1
- package/embedded-knowledge/indexes/tags/productivity.json +0 -1
- package/embedded-knowledge/indexes/tags/query-performance.json +0 -1
- package/embedded-knowledge/indexes/tags/queue-management.json +0 -1
- package/embedded-knowledge/indexes/tags/ranges.json +0 -1
- package/embedded-knowledge/indexes/tags/readability.json +0 -1
- package/embedded-knowledge/indexes/tags/record-access.json +0 -1
- package/embedded-knowledge/indexes/tags/record-methods.json +0 -1
- package/embedded-knowledge/indexes/tags/refactoring.json +0 -1
- package/embedded-knowledge/indexes/tags/reference.json +0 -1
- package/embedded-knowledge/indexes/tags/repeat-loops.json +0 -1
- package/embedded-knowledge/indexes/tags/repeat-statement.json +0 -1
- package/embedded-knowledge/indexes/tags/runtime-errors.json +0 -1
- package/embedded-knowledge/indexes/tags/runtime.json +0 -1
- package/embedded-knowledge/indexes/tags/safeguards.json +0 -1
- package/embedded-knowledge/indexes/tags/security.json +0 -1
- package/embedded-knowledge/indexes/tags/sequence-management.json +0 -1
- package/embedded-knowledge/indexes/tags/serialization.json +0 -1
- package/embedded-knowledge/indexes/tags/session-logmessage.json +0 -1
- package/embedded-knowledge/indexes/tags/session.json +0 -1
- package/embedded-knowledge/indexes/tags/setloadfields.json +0 -1
- package/embedded-knowledge/indexes/tags/shortcuts.json +0 -1
- package/embedded-knowledge/indexes/tags/sift.json +0 -1
- package/embedded-knowledge/indexes/tags/singleinstance.json +0 -1
- package/embedded-knowledge/indexes/tags/spacing.json +0 -1
- package/embedded-knowledge/indexes/tags/sql-translation.json +0 -1
- package/embedded-knowledge/indexes/tags/standards.json +0 -1
- package/embedded-knowledge/indexes/tags/statements.json +0 -1
- package/embedded-knowledge/indexes/tags/streaming.json +0 -1
- package/embedded-knowledge/indexes/tags/strong-typing.json +0 -1
- package/embedded-knowledge/indexes/tags/structural-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/structure.json +0 -1
- package/embedded-knowledge/indexes/tags/subscribers.json +0 -1
- package/embedded-knowledge/indexes/tags/switch.json +0 -1
- package/embedded-knowledge/indexes/tags/symbol-search.json +0 -1
- package/embedded-knowledge/indexes/tags/syntax.json +0 -1
- package/embedded-knowledge/indexes/tags/systemid.json +0 -1
- package/embedded-knowledge/indexes/tags/table-configuration.json +0 -1
- package/embedded-knowledge/indexes/tags/table-events.json +0 -1
- package/embedded-knowledge/indexes/tags/table-keys.json +0 -1
- package/embedded-knowledge/indexes/tags/table-safety.json +0 -1
- package/embedded-knowledge/indexes/tags/task-scheduler.json +0 -1
- package/embedded-knowledge/indexes/tags/telemetry.json +0 -1
- package/embedded-knowledge/indexes/tags/template-method.json +0 -1
- package/embedded-knowledge/indexes/tags/temporary-tables.json +0 -1
- package/embedded-knowledge/indexes/tags/testfield.json +0 -1
- package/embedded-knowledge/indexes/tags/tradeoffs.json +0 -1
- package/embedded-knowledge/indexes/tags/triggers.json +0 -1
- package/embedded-knowledge/indexes/tags/troubleshooting.json +0 -1
- package/embedded-knowledge/indexes/tags/type-safety.json +0 -1
- package/embedded-knowledge/indexes/tags/url-structure.json +0 -1
- package/embedded-knowledge/indexes/tags/user-experience.json +0 -1
- package/embedded-knowledge/indexes/tags/user-feedback.json +0 -1
- package/embedded-knowledge/indexes/tags/user-interface.json +0 -1
- package/embedded-knowledge/indexes/tags/validation-feedback.json +0 -1
- package/embedded-knowledge/indexes/tags/validation.json +0 -1
- package/embedded-knowledge/indexes/tags/variables.json +0 -1
- package/embedded-knowledge/indexes/tags/verbosity.json +0 -1
- package/embedded-knowledge/indexes/tags/vs-code.json +0 -1
- package/embedded-knowledge/indexes/tags/web-services.json +0 -1
- package/embedded-knowledge/indexes/tags/workflow-management.json +0 -1
- package/embedded-knowledge/indexes/tags/workflow-optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/workflow-templates.json +0 -1
- package/embedded-knowledge/indexes/tags/workspace.json +0 -1
- package/embedded-knowledge/indexes/tags/xml-documentation.json +0 -1
- package/embedded-knowledge/indexes/topic-relationships.json +0 -128
- package/embedded-knowledge/methodologies/index.json +0 -81
- package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
- package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
- package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
- package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
- package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
- package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
- package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
- package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
- package/embedded-knowledge/methodologies/phases/performance.md +0 -211
- package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
- package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
- package/embedded-knowledge/methodologies/phases/verification.md +0 -146
- package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
- package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
- package/embedded-knowledge/specialists/alex-architect.md +0 -216
- package/embedded-knowledge/specialists/casey-copilot.md +0 -226
- package/embedded-knowledge/specialists/chris-config.md +0 -267
- package/embedded-knowledge/specialists/dean-debug.md +0 -222
- package/embedded-knowledge/specialists/eva-errors.md +0 -235
- package/embedded-knowledge/specialists/jordan-bridge.md +0 -235
- package/embedded-knowledge/specialists/logan-legacy.md +0 -209
- package/embedded-knowledge/specialists/maya-mentor.md +0 -211
- package/embedded-knowledge/specialists/morgan-market.md +0 -226
- package/embedded-knowledge/specialists/quinn-tester.md +0 -235
- package/embedded-knowledge/specialists/roger-reviewer.md +0 -234
- package/embedded-knowledge/specialists/sam-coder.md +0 -359
- package/embedded-knowledge/specialists/seth-security.md +0 -235
- package/embedded-knowledge/specialists/taylor-docs.md +0 -257
- 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
|