@jwikman/bc-code-intelligence-mcp 1.5.7-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +165 -0
- package/dist/cache/cache-manager.d.ts +95 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +328 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cli/bc-code-intel-cli.d.ts +9 -0
- package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
- package/dist/cli/bc-code-intel-cli.js +440 -0
- package/dist/cli/bc-code-intel-cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +28 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +497 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +84 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +608 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/test-config-loader.d.ts +10 -0
- package/dist/config/test-config-loader.d.ts.map +1 -0
- package/dist/config/test-config-loader.js +135 -0
- package/dist/config/test-config-loader.js.map +1 -0
- package/dist/config/test-enhanced-layer-service.d.ts +7 -0
- package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
- package/dist/config/test-enhanced-layer-service.js +104 -0
- package/dist/config/test-enhanced-layer-service.js.map +1 -0
- package/dist/config/test-git-layer.d.ts +7 -0
- package/dist/config/test-git-layer.d.ts.map +1 -0
- package/dist/config/test-git-layer.js +68 -0
- package/dist/config/test-git-layer.js.map +1 -0
- package/dist/dev/hot-reload.d.ts +91 -0
- package/dist/dev/hot-reload.d.ts.map +1 -0
- package/dist/dev/hot-reload.js +358 -0
- package/dist/dev/hot-reload.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1211 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/base-layer.d.ts +133 -0
- package/dist/layers/base-layer.d.ts.map +1 -0
- package/dist/layers/base-layer.js +290 -0
- package/dist/layers/base-layer.js.map +1 -0
- package/dist/layers/embedded-layer.d.ts +130 -0
- package/dist/layers/embedded-layer.d.ts.map +1 -0
- package/dist/layers/embedded-layer.js +612 -0
- package/dist/layers/embedded-layer.js.map +1 -0
- package/dist/layers/git-layer.d.ts +77 -0
- package/dist/layers/git-layer.d.ts.map +1 -0
- package/dist/layers/git-layer.js +529 -0
- package/dist/layers/git-layer.js.map +1 -0
- package/dist/layers/index.d.ts +12 -0
- package/dist/layers/index.d.ts.map +1 -0
- package/dist/layers/index.js +11 -0
- package/dist/layers/index.js.map +1 -0
- package/dist/layers/layer-service.d.ts +135 -0
- package/dist/layers/layer-service.d.ts.map +1 -0
- package/dist/layers/layer-service.js +586 -0
- package/dist/layers/layer-service.js.map +1 -0
- package/dist/layers/project-layer.d.ts +58 -0
- package/dist/layers/project-layer.d.ts.map +1 -0
- package/dist/layers/project-layer.js +286 -0
- package/dist/layers/project-layer.js.map +1 -0
- package/dist/monitoring/production-monitor.d.ts +148 -0
- package/dist/monitoring/production-monitor.d.ts.map +1 -0
- package/dist/monitoring/production-monitor.js +463 -0
- package/dist/monitoring/production-monitor.js.map +1 -0
- package/dist/performance/performance-monitor.d.ts +99 -0
- package/dist/performance/performance-monitor.d.ts.map +1 -0
- package/dist/performance/performance-monitor.js +253 -0
- package/dist/performance/performance-monitor.js.map +1 -0
- package/dist/sdk/bc-code-intel-client.d.ts +175 -0
- package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
- package/dist/sdk/bc-code-intel-client.js +380 -0
- package/dist/sdk/bc-code-intel-client.js.map +1 -0
- package/dist/search/intelligent-search.d.ts +97 -0
- package/dist/search/intelligent-search.d.ts.map +1 -0
- package/dist/search/intelligent-search.js +358 -0
- package/dist/search/intelligent-search.js.map +1 -0
- package/dist/security/access-control.d.ts +110 -0
- package/dist/security/access-control.d.ts.map +1 -0
- package/dist/security/access-control.js +353 -0
- package/dist/security/access-control.js.map +1 -0
- package/dist/services/code-analysis-service.d.ts +72 -0
- package/dist/services/code-analysis-service.d.ts.map +1 -0
- package/dist/services/code-analysis-service.js +818 -0
- package/dist/services/code-analysis-service.js.map +1 -0
- package/dist/services/enhanced-prompt-service.d.ts +56 -0
- package/dist/services/enhanced-prompt-service.d.ts.map +1 -0
- package/dist/services/enhanced-prompt-service.js +165 -0
- package/dist/services/enhanced-prompt-service.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +90 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +342 -0
- package/dist/services/knowledge-service.js.map +1 -0
- package/dist/services/methodology-service.d.ts +91 -0
- package/dist/services/methodology-service.d.ts.map +1 -0
- package/dist/services/methodology-service.js +423 -0
- package/dist/services/methodology-service.js.map +1 -0
- package/dist/services/multi-content-layer-service.d.ts +198 -0
- package/dist/services/multi-content-layer-service.d.ts.map +1 -0
- package/dist/services/multi-content-layer-service.js +991 -0
- package/dist/services/multi-content-layer-service.js.map +1 -0
- package/dist/services/roleplay-engine.d.ts +161 -0
- package/dist/services/roleplay-engine.d.ts.map +1 -0
- package/dist/services/roleplay-engine.js +994 -0
- package/dist/services/roleplay-engine.js.map +1 -0
- package/dist/services/session-storage/file-storage.d.ts +30 -0
- package/dist/services/session-storage/file-storage.d.ts.map +1 -0
- package/dist/services/session-storage/file-storage.js +229 -0
- package/dist/services/session-storage/file-storage.js.map +1 -0
- package/dist/services/session-storage/in-memory-storage.d.ts +31 -0
- package/dist/services/session-storage/in-memory-storage.d.ts.map +1 -0
- package/dist/services/session-storage/in-memory-storage.js +142 -0
- package/dist/services/session-storage/in-memory-storage.js.map +1 -0
- package/dist/services/specialist-discovery.d.ts +98 -0
- package/dist/services/specialist-discovery.d.ts.map +1 -0
- package/dist/services/specialist-discovery.js +387 -0
- package/dist/services/specialist-discovery.js.map +1 -0
- package/dist/services/specialist-loader.d.ts +101 -0
- package/dist/services/specialist-loader.d.ts.map +1 -0
- package/dist/services/specialist-loader.js +256 -0
- package/dist/services/specialist-loader.js.map +1 -0
- package/dist/services/specialist-session-manager.d.ts +76 -0
- package/dist/services/specialist-session-manager.d.ts.map +1 -0
- package/dist/services/specialist-session-manager.js +255 -0
- package/dist/services/specialist-session-manager.js.map +1 -0
- package/dist/services/workflow-service.d.ts +146 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +409 -0
- package/dist/services/workflow-service.js.map +1 -0
- package/dist/setup/post-install.d.ts +12 -0
- package/dist/setup/post-install.d.ts.map +1 -0
- package/dist/setup/post-install.js +81 -0
- package/dist/setup/post-install.js.map +1 -0
- package/dist/streamlined-handlers.d.ts +94 -0
- package/dist/streamlined-handlers.d.ts.map +1 -0
- package/dist/streamlined-handlers.js +665 -0
- package/dist/streamlined-handlers.js.map +1 -0
- package/dist/test-enhanced-mcp-server.d.ts +7 -0
- package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
- package/dist/test-enhanced-mcp-server.js +177 -0
- package/dist/test-enhanced-mcp-server.js.map +1 -0
- package/dist/tools/config-diagnostic-tools.d.ts +234 -0
- package/dist/tools/config-diagnostic-tools.d.ts.map +1 -0
- package/dist/tools/config-diagnostic-tools.js +887 -0
- package/dist/tools/config-diagnostic-tools.js.map +1 -0
- package/dist/tools/core-tools.d.ts +26 -0
- package/dist/tools/core-tools.d.ts.map +1 -0
- package/dist/tools/core-tools.js +241 -0
- package/dist/tools/core-tools.js.map +1 -0
- package/dist/tools/handoff-tools.d.ts +37 -0
- package/dist/tools/handoff-tools.d.ts.map +1 -0
- package/dist/tools/handoff-tools.js +265 -0
- package/dist/tools/handoff-tools.js.map +1 -0
- package/dist/tools/index.d.ts +61 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +75 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/onboarding-tools.d.ts +43 -0
- package/dist/tools/onboarding-tools.d.ts.map +1 -0
- package/dist/tools/onboarding-tools.js +353 -0
- package/dist/tools/onboarding-tools.js.map +1 -0
- package/dist/tools/specialist-discovery-tools.d.ts +27 -0
- package/dist/tools/specialist-discovery-tools.d.ts.map +1 -0
- package/dist/tools/specialist-discovery-tools.js +275 -0
- package/dist/tools/specialist-discovery-tools.js.map +1 -0
- package/dist/tools/specialist-tools.d.ts +43 -0
- package/dist/tools/specialist-tools.d.ts.map +1 -0
- package/dist/tools/specialist-tools.js +372 -0
- package/dist/tools/specialist-tools.js.map +1 -0
- package/dist/tools/workspace-tools.d.ts +96 -0
- package/dist/tools/workspace-tools.d.ts.map +1 -0
- package/dist/tools/workspace-tools.js +188 -0
- package/dist/tools/workspace-tools.js.map +1 -0
- package/dist/types/bc-knowledge.d.ts +303 -0
- package/dist/types/bc-knowledge.d.ts.map +1 -0
- package/dist/types/bc-knowledge.js +69 -0
- package/dist/types/bc-knowledge.js.map +1 -0
- package/dist/types/config-types.d.ts +186 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +109 -0
- package/dist/types/config-types.js.map +1 -0
- package/dist/types/enhanced-layer-types.d.ts +193 -0
- package/dist/types/enhanced-layer-types.d.ts.map +1 -0
- package/dist/types/enhanced-layer-types.js +9 -0
- package/dist/types/enhanced-layer-types.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/layer-types.d.ts +173 -0
- package/dist/types/layer-types.d.ts.map +1 -0
- package/dist/types/layer-types.js +27 -0
- package/dist/types/layer-types.js.map +1 -0
- package/dist/types/roleplay-types.d.ts +156 -0
- package/dist/types/roleplay-types.d.ts.map +1 -0
- package/dist/types/roleplay-types.js +8 -0
- package/dist/types/roleplay-types.js.map +1 -0
- package/dist/types/session-types.d.ts +127 -0
- package/dist/types/session-types.d.ts.map +1 -0
- package/dist/types/session-types.js +8 -0
- package/dist/types/session-types.js.map +1 -0
- package/dist/utils/path-utils.d.ts +5 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +14 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/workflows/domain-workflows.d.ts +8 -0
- package/dist/workflows/domain-workflows.d.ts.map +1 -0
- package/dist/workflows/domain-workflows.js +360 -0
- package/dist/workflows/domain-workflows.js.map +1 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
- package/embedded-knowledge/AGENTS.md +178 -0
- package/embedded-knowledge/CONTRIBUTING.md +58 -0
- package/embedded-knowledge/LICENSE +21 -0
- package/embedded-knowledge/README.md +32 -0
- package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
- package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
- package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
- package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
- package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
- package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +371 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
- package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +281 -0
- package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +248 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
- package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
- package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
- package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
- package/embedded-knowledge/domains/alex-architect/samples/testability-design-patterns.md +223 -0
- package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
- package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +77 -0
- package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +263 -0
- package/embedded-knowledge/domains/casey-copilot/samples/long-running-session-instructions.md +323 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +846 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +595 -0
- package/embedded-knowledge/domains/chris-config/content-types-structure.md +421 -0
- package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +437 -0
- package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +257 -0
- package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +302 -0
- package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +336 -0
- package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +453 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +360 -0
- package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
- package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
- package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
- package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
- package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
- package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
- package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
- package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
- package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +160 -0
- package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
- package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
- package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
- package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
- package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
- package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
- package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
- package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
- package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
- package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
- package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
- package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
- package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
- package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
- package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
- package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
- package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
- package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
- package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
- package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +159 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
- package/embedded-knowledge/domains/eva-errors/samples/codeunit-run-pattern.md +239 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
- package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
- package/embedded-knowledge/domains/eva-errors/samples/try-function-usage.md +195 -0
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
- package/embedded-knowledge/domains/eva-errors/try-function-usage.md +129 -0
- package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
- package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
- package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
- package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
- package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
- package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
- package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
- package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
- package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
- package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
- package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +201 -0
- package/embedded-knowledge/domains/morgan-market/samples/partner-readiness-checklist.md +288 -0
- package/embedded-knowledge/domains/parker-pragmatic/README.md +39 -0
- package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +583 -0
- package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +587 -0
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
- package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +82 -0
- package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
- package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
- package/embedded-knowledge/domains/quinn-tester/samples/isolation-testing-patterns.md +424 -0
- package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
- package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
- package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
- package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
- package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
- package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
- package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
- package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
- package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
- package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
- package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
- package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/testability-code-smells.md +256 -0
- package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +67 -0
- package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
- package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
- package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
- package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
- package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
- package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
- package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
- package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
- package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
- package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
- package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
- package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
- package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
- package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
- package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
- package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
- package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
- package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
- package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
- package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
- package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
- package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
- package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
- package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
- package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
- package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
- package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
- package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
- package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +146 -0
- package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
- package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
- package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
- package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
- package/embedded-knowledge/indexes/domain-catalog.json +106 -0
- package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
- package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
- package/embedded-knowledge/indexes/tags/access-control.json +1 -0
- package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
- package/embedded-knowledge/indexes/tags/actions.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced.json +1 -0
- package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
- package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
- package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
- package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
- package/embedded-knowledge/indexes/tags/analytics.json +1 -0
- package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
- package/embedded-knowledge/indexes/tags/api-design.json +1 -0
- package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
- package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
- package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
- package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
- package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
- package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
- package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/api.json +1 -0
- package/embedded-knowledge/indexes/tags/architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
- package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
- package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
- package/embedded-knowledge/indexes/tags/binding.json +1 -0
- package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/branching.json +1 -0
- package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
- package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
- package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
- package/embedded-knowledge/indexes/tags/business-process.json +1 -0
- package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
- package/embedded-knowledge/indexes/tags/caching.json +1 -0
- package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/case.json +1 -0
- package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
- package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
- package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
- package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
- package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
- package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
- package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/code-style.json +1 -0
- package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
- package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
- package/embedded-knowledge/indexes/tags/comments.json +1 -0
- package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
- package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional.json +1 -0
- package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
- package/embedded-knowledge/indexes/tags/consistency.json +1 -0
- package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
- package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
- package/embedded-knowledge/indexes/tags/correlation.json +1 -0
- package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/data-access.json +1 -0
- package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
- package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
- package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
- package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
- package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
- package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
- package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/database.json +1 -0
- package/embedded-knowledge/indexes/tags/debugging.json +1 -0
- package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
- package/embedded-knowledge/indexes/tags/declaration.json +1 -0
- package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
- package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
- package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
- package/embedded-knowledge/indexes/tags/deployment.json +1 -0
- package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
- package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
- package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
- package/embedded-knowledge/indexes/tags/documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
- package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
- package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
- package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
- package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
- package/embedded-knowledge/indexes/tags/error-text.json +1 -0
- package/embedded-knowledge/indexes/tags/etag.json +1 -0
- package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
- package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
- package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
- package/embedded-knowledge/indexes/tags/events.json +1 -0
- package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/extensions.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
- package/embedded-knowledge/indexes/tags/field-control.json +1 -0
- package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
- package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/field-state.json +1 -0
- package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
- package/embedded-knowledge/indexes/tags/fields.json +1 -0
- package/embedded-knowledge/indexes/tags/filtering.json +1 -0
- package/embedded-knowledge/indexes/tags/filters.json +1 -0
- package/embedded-knowledge/indexes/tags/formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/http-status.json +1 -0
- package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/implementation.json +1 -0
- package/embedded-knowledge/indexes/tags/indentation.json +1 -0
- package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
- package/embedded-knowledge/indexes/tags/indexing.json +1 -0
- package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
- package/embedded-knowledge/indexes/tags/integration.json +1 -0
- package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
- package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
- package/embedded-knowledge/indexes/tags/isolation.json +1 -0
- package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/keywords.json +1 -0
- package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
- package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
- package/embedded-knowledge/indexes/tags/localization.json +1 -0
- package/embedded-knowledge/indexes/tags/logging.json +1 -0
- package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
- package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/memory.json +1 -0
- package/embedded-knowledge/indexes/tags/message-design.json +1 -0
- package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
- package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
- package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
- package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
- package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
- package/embedded-knowledge/indexes/tags/naming.json +1 -0
- package/embedded-knowledge/indexes/tags/navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series.json +1 -0
- package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
- package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/odata.json +1 -0
- package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
- package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/operators.json +1 -0
- package/embedded-knowledge/indexes/tags/optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/order.json +1 -0
- package/embedded-knowledge/indexes/tags/organization.json +1 -0
- package/embedded-knowledge/indexes/tags/pages.json +1 -0
- package/embedded-knowledge/indexes/tags/parameters.json +1 -0
- package/embedded-knowledge/indexes/tags/patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/performance.json +1 -0
- package/embedded-knowledge/indexes/tags/placement.json +1 -0
- package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
- package/embedded-knowledge/indexes/tags/posting.json +1 -0
- package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
- package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
- package/embedded-knowledge/indexes/tags/privacy.json +1 -0
- package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
- package/embedded-knowledge/indexes/tags/production.json +1 -0
- package/embedded-knowledge/indexes/tags/productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
- package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
- package/embedded-knowledge/indexes/tags/ranges.json +1 -0
- package/embedded-knowledge/indexes/tags/readability.json +1 -0
- package/embedded-knowledge/indexes/tags/record-access.json +1 -0
- package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
- package/embedded-knowledge/indexes/tags/reference.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime.json +1 -0
- package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
- package/embedded-knowledge/indexes/tags/security.json +1 -0
- package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
- package/embedded-knowledge/indexes/tags/serialization.json +1 -0
- package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
- package/embedded-knowledge/indexes/tags/session.json +1 -0
- package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
- package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
- package/embedded-knowledge/indexes/tags/sift.json +1 -0
- package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
- package/embedded-knowledge/indexes/tags/spacing.json +1 -0
- package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
- package/embedded-knowledge/indexes/tags/standards.json +1 -0
- package/embedded-knowledge/indexes/tags/statements.json +1 -0
- package/embedded-knowledge/indexes/tags/streaming.json +1 -0
- package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
- package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/structure.json +1 -0
- package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
- package/embedded-knowledge/indexes/tags/switch.json +1 -0
- package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
- package/embedded-knowledge/indexes/tags/syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/systemid.json +1 -0
- package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
- package/embedded-knowledge/indexes/tags/table-events.json +1 -0
- package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
- package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
- package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
- package/embedded-knowledge/indexes/tags/template-method.json +1 -0
- package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
- package/embedded-knowledge/indexes/tags/testfield.json +1 -0
- package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
- package/embedded-knowledge/indexes/tags/triggers.json +1 -0
- package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
- package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
- package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
- package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/validation.json +1 -0
- package/embedded-knowledge/indexes/tags/variables.json +1 -0
- package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
- package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
- package/embedded-knowledge/indexes/tags/web-services.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
- package/embedded-knowledge/indexes/tags/workspace.json +1 -0
- package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
- package/embedded-knowledge/indexes/topic-relationships.json +128 -0
- package/embedded-knowledge/methodologies/index.json +81 -0
- package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
- package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
- package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
- package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
- package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
- package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
- package/embedded-knowledge/methodologies/phases/performance.md +211 -0
- package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
- package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
- package/embedded-knowledge/methodologies/phases/verification.md +146 -0
- package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
- package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
- package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +535 -0
- package/embedded-knowledge/specialists/alex-architect.md +305 -0
- package/embedded-knowledge/specialists/casey-copilot.md +314 -0
- package/embedded-knowledge/specialists/chris-config.md +226 -0
- package/embedded-knowledge/specialists/dean-debug.md +365 -0
- package/embedded-knowledge/specialists/eva-errors.md +291 -0
- package/embedded-knowledge/specialists/jordan-bridge.md +291 -0
- package/embedded-knowledge/specialists/logan-legacy.md +265 -0
- package/embedded-knowledge/specialists/maya-mentor.md +299 -0
- package/embedded-knowledge/specialists/morgan-market.md +281 -0
- package/embedded-knowledge/specialists/parker-pragmatic.md +564 -0
- package/embedded-knowledge/specialists/quinn-tester.md +323 -0
- package/embedded-knowledge/specialists/roger-reviewer.md +317 -0
- package/embedded-knowledge/specialists/sam-coder.md +342 -0
- package/embedded-knowledge/specialists/seth-security.md +290 -0
- package/embedded-knowledge/specialists/taylor-docs.md +312 -0
- package/embedded-knowledge/specialists/uma-ux.md +291 -0
- package/package.json +82 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# Telemetry Performance Optimization Patterns - AL Code Samples
|
|
2
|
+
|
|
3
|
+
## High-Performance Telemetry Architecture
|
|
4
|
+
```al
|
|
5
|
+
codeunit 50130 "Performance Telemetry Manager"
|
|
6
|
+
{
|
|
7
|
+
var
|
|
8
|
+
TelemetryBuffer: List of [Text];
|
|
9
|
+
BatchSize: Integer;
|
|
10
|
+
LastFlushTime: DateTime;
|
|
11
|
+
FlushIntervalMs: Integer;
|
|
12
|
+
IsBufferingEnabled: Boolean;
|
|
13
|
+
|
|
14
|
+
// Example 1: Batched telemetry for high-volume scenarios
|
|
15
|
+
trigger OnRun()
|
|
16
|
+
begin
|
|
17
|
+
InitializePerformanceSettings();
|
|
18
|
+
end;
|
|
19
|
+
|
|
20
|
+
local procedure InitializePerformanceSettings()
|
|
21
|
+
begin
|
|
22
|
+
BatchSize := 50;
|
|
23
|
+
FlushIntervalMs := 30000; // 30 seconds
|
|
24
|
+
IsBufferingEnabled := not IsDebugMode();
|
|
25
|
+
|
|
26
|
+
if IsBufferingEnabled then
|
|
27
|
+
TaskScheduler.CreateTask(Codeunit::"Performance Telemetry Manager", 0, true, CompanyName(),
|
|
28
|
+
CurrentDateTime + FlushIntervalMs, RecordId());
|
|
29
|
+
end;
|
|
30
|
+
|
|
31
|
+
procedure LogPerformantEvent(EventId: Text; Message: Text; CustomDimensions: Dictionary of [Text, Text])
|
|
32
|
+
var
|
|
33
|
+
TelemetryData: Text;
|
|
34
|
+
begin
|
|
35
|
+
if IsBufferingEnabled then begin
|
|
36
|
+
TelemetryData := SerializeTelemetryEvent(EventId, Message, CustomDimensions);
|
|
37
|
+
AddToBuffer(TelemetryData);
|
|
38
|
+
end else begin
|
|
39
|
+
// Direct logging for debug scenarios
|
|
40
|
+
Session.LogMessage(EventId, Message, Verbosity::Normal,
|
|
41
|
+
DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
|
|
42
|
+
end;
|
|
43
|
+
end;
|
|
44
|
+
|
|
45
|
+
local procedure AddToBuffer(TelemetryData: Text)
|
|
46
|
+
begin
|
|
47
|
+
TelemetryBuffer.Add(TelemetryData);
|
|
48
|
+
|
|
49
|
+
if TelemetryBuffer.Count >= BatchSize then
|
|
50
|
+
FlushTelemetryBuffer();
|
|
51
|
+
end;
|
|
52
|
+
|
|
53
|
+
procedure FlushTelemetryBuffer()
|
|
54
|
+
var
|
|
55
|
+
BatchData: Text;
|
|
56
|
+
i: Integer;
|
|
57
|
+
begin
|
|
58
|
+
if TelemetryBuffer.Count = 0 then
|
|
59
|
+
exit;
|
|
60
|
+
|
|
61
|
+
for i := 1 to TelemetryBuffer.Count do begin
|
|
62
|
+
BatchData := TelemetryBuffer.Get(i);
|
|
63
|
+
ProcessBatchedTelemetryData(BatchData);
|
|
64
|
+
end;
|
|
65
|
+
|
|
66
|
+
TelemetryBuffer.Clear();
|
|
67
|
+
LastFlushTime := CurrentDateTime;
|
|
68
|
+
end;
|
|
69
|
+
|
|
70
|
+
local procedure ProcessBatchedTelemetryData(TelemetryData: Text)
|
|
71
|
+
var
|
|
72
|
+
EventData: Dictionary of [Text, Text];
|
|
73
|
+
CustomDimensions: Dictionary of [Text, Text];
|
|
74
|
+
begin
|
|
75
|
+
if DeserializeTelemetryEvent(TelemetryData, EventData) then begin
|
|
76
|
+
CustomDimensions := GetCustomDimensionsFromEventData(EventData);
|
|
77
|
+
Session.LogMessage(EventData.Get('EventId'), EventData.Get('Message'), Verbosity::Normal,
|
|
78
|
+
DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
|
|
79
|
+
end;
|
|
80
|
+
end;
|
|
81
|
+
|
|
82
|
+
local procedure IsDebugMode(): Boolean
|
|
83
|
+
begin
|
|
84
|
+
exit(false); // Implement debug mode detection
|
|
85
|
+
end;
|
|
86
|
+
|
|
87
|
+
local procedure SerializeTelemetryEvent(EventId: Text; Message: Text; CustomDimensions: Dictionary of [Text, Text]): Text
|
|
88
|
+
begin
|
|
89
|
+
// Simplified serialization - in production use proper JSON serialization
|
|
90
|
+
exit(EventId + '|' + Message + '|' + SerializeCustomDimensions(CustomDimensions));
|
|
91
|
+
end;
|
|
92
|
+
|
|
93
|
+
local procedure DeserializeTelemetryEvent(TelemetryData: Text; var EventData: Dictionary of [Text, Text]): Boolean
|
|
94
|
+
var
|
|
95
|
+
Parts: List of [Text];
|
|
96
|
+
DataPart: Text;
|
|
97
|
+
begin
|
|
98
|
+
Parts := TelemetryData.Split('|');
|
|
99
|
+
if Parts.Count >= 3 then begin
|
|
100
|
+
EventData.Add('EventId', Parts.Get(1));
|
|
101
|
+
EventData.Add('Message', Parts.Get(2));
|
|
102
|
+
exit(true);
|
|
103
|
+
end;
|
|
104
|
+
exit(false);
|
|
105
|
+
end;
|
|
106
|
+
|
|
107
|
+
local procedure GetCustomDimensionsFromEventData(EventData: Dictionary of [Text, Text]): Dictionary of [Text, Text]
|
|
108
|
+
var
|
|
109
|
+
CustomDimensions: Dictionary of [Text, Text];
|
|
110
|
+
begin
|
|
111
|
+
// Extract and deserialize custom dimensions
|
|
112
|
+
CustomDimensions.Add('Batched', 'true');
|
|
113
|
+
exit(CustomDimensions);
|
|
114
|
+
end;
|
|
115
|
+
|
|
116
|
+
local procedure SerializeCustomDimensions(CustomDimensions: Dictionary of [Text, Text]): Text
|
|
117
|
+
begin
|
|
118
|
+
// Implement proper serialization logic
|
|
119
|
+
exit('');
|
|
120
|
+
end;
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Memory-Optimized Telemetry
|
|
125
|
+
```al
|
|
126
|
+
codeunit 50131 "Memory Optimized Telemetry"
|
|
127
|
+
{
|
|
128
|
+
// Example 2: Memory-efficient telemetry for resource-constrained scenarios
|
|
129
|
+
procedure LogMemoryOptimizedEvent(EventId: Text; MessageTemplate: Text; Parameters: List of [Text])
|
|
130
|
+
var
|
|
131
|
+
OptimizedMessage: Text;
|
|
132
|
+
MinimalDimensions: Dictionary of [Text, Text];
|
|
133
|
+
begin
|
|
134
|
+
// Use string templates to reduce memory allocation
|
|
135
|
+
OptimizedMessage := FormatMessageTemplate(MessageTemplate, Parameters);
|
|
136
|
+
|
|
137
|
+
// Use only essential dimensions
|
|
138
|
+
MinimalDimensions := GetEssentialDimensions();
|
|
139
|
+
|
|
140
|
+
Session.LogMessage(EventId, OptimizedMessage, Verbosity::Normal,
|
|
141
|
+
DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, MinimalDimensions);
|
|
142
|
+
end;
|
|
143
|
+
|
|
144
|
+
local procedure GetEssentialDimensions(): Dictionary of [Text, Text]
|
|
145
|
+
var
|
|
146
|
+
EssentialDimensions: Dictionary of [Text, Text];
|
|
147
|
+
begin
|
|
148
|
+
// Include only the most critical dimensions to minimize memory usage
|
|
149
|
+
EssentialDimensions.Add('U', CopyStr(UserId(), 1, 20)); // Shortened key names
|
|
150
|
+
EssentialDimensions.Add('C', CopyStr(CompanyName(), 1, 30));
|
|
151
|
+
EssentialDimensions.Add('T', Format(CurrentDateTime, 0, '<Hours24><Minutes,2><Seconds,2>'));
|
|
152
|
+
|
|
153
|
+
exit(EssentialDimensions);
|
|
154
|
+
end;
|
|
155
|
+
|
|
156
|
+
local procedure FormatMessageTemplate(Template: Text; Parameters: List of [Text]): Text
|
|
157
|
+
var
|
|
158
|
+
FormattedMessage: Text;
|
|
159
|
+
Parameter: Text;
|
|
160
|
+
ParameterIndex: Integer;
|
|
161
|
+
PlaceholderText: Text;
|
|
162
|
+
begin
|
|
163
|
+
FormattedMessage := Template;
|
|
164
|
+
ParameterIndex := 1;
|
|
165
|
+
|
|
166
|
+
foreach Parameter in Parameters do begin
|
|
167
|
+
PlaceholderText := '{' + Format(ParameterIndex) + '}';
|
|
168
|
+
FormattedMessage := FormattedMessage.Replace(PlaceholderText, Parameter);
|
|
169
|
+
ParameterIndex += 1;
|
|
170
|
+
end;
|
|
171
|
+
|
|
172
|
+
exit(FormattedMessage);
|
|
173
|
+
end;
|
|
174
|
+
|
|
175
|
+
// Example 3: Sampling for high-volume events
|
|
176
|
+
procedure LogSampledEvent(EventId: Text; Message: Text; SampleRate: Decimal; CustomDimensions: Dictionary of [Text, Text])
|
|
177
|
+
begin
|
|
178
|
+
if ShouldSampleEvent(SampleRate) then
|
|
179
|
+
Session.LogMessage(EventId, Message, Verbosity::Normal,
|
|
180
|
+
DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
|
|
181
|
+
end;
|
|
182
|
+
|
|
183
|
+
local procedure ShouldSampleEvent(SampleRate: Decimal): Boolean
|
|
184
|
+
var
|
|
185
|
+
RandomValue: Decimal;
|
|
186
|
+
begin
|
|
187
|
+
if SampleRate >= 1.0 then
|
|
188
|
+
exit(true);
|
|
189
|
+
|
|
190
|
+
if SampleRate <= 0.0 then
|
|
191
|
+
exit(false);
|
|
192
|
+
|
|
193
|
+
RandomValue := Random(10000) / 10000.0;
|
|
194
|
+
exit(RandomValue <= SampleRate);
|
|
195
|
+
end;
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Conditional Performance Telemetry
|
|
200
|
+
```al
|
|
201
|
+
codeunit 50132 "Conditional Performance Telemetry"
|
|
202
|
+
{
|
|
203
|
+
// Example 4: Performance-critical path telemetry
|
|
204
|
+
procedure LogPerformanceCriticalEvent(EventCategory: Text; Message: Text; DetailedData: Dictionary of [Text, Text])
|
|
205
|
+
var
|
|
206
|
+
ShouldLog: Boolean;
|
|
207
|
+
CustomDimensions: Dictionary of [Text, Text];
|
|
208
|
+
begin
|
|
209
|
+
ShouldLog := ShouldLogEvent(EventCategory);
|
|
210
|
+
|
|
211
|
+
if ShouldLog then begin
|
|
212
|
+
if IsHighPerformanceMode() then
|
|
213
|
+
CustomDimensions := GetMinimalDimensions()
|
|
214
|
+
else
|
|
215
|
+
CustomDimensions := GetOptimizedDimensions(EventCategory);
|
|
216
|
+
|
|
217
|
+
// Merge only essential detailed data in high-performance mode
|
|
218
|
+
if not IsHighPerformanceMode() then
|
|
219
|
+
MergeDetailedData(CustomDimensions, DetailedData)
|
|
220
|
+
else
|
|
221
|
+
MergeEssentialData(CustomDimensions, DetailedData);
|
|
222
|
+
|
|
223
|
+
Session.LogMessage(GetEventId(EventCategory), Message, GetOptimalVerbosity(EventCategory),
|
|
224
|
+
DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
|
|
225
|
+
end;
|
|
226
|
+
end;
|
|
227
|
+
|
|
228
|
+
local procedure IsHighPerformanceMode(): Boolean
|
|
229
|
+
begin
|
|
230
|
+
// Check system load indicators
|
|
231
|
+
exit(GetCurrentSystemLoad() > 80);
|
|
232
|
+
end;
|
|
233
|
+
|
|
234
|
+
local procedure GetCurrentSystemLoad(): Integer
|
|
235
|
+
begin
|
|
236
|
+
// Simplified system load calculation
|
|
237
|
+
// In real implementation, consider CPU, memory, and I/O metrics
|
|
238
|
+
exit(Random(100));
|
|
239
|
+
end;
|
|
240
|
+
|
|
241
|
+
local procedure ShouldLogEvent(EventCategory: Text): Boolean
|
|
242
|
+
begin
|
|
243
|
+
case EventCategory of
|
|
244
|
+
'Critical', 'Error':
|
|
245
|
+
exit(true); // Always log critical events
|
|
246
|
+
'Performance':
|
|
247
|
+
exit(not IsHighPerformanceMode()); // Skip in high load
|
|
248
|
+
'Debug':
|
|
249
|
+
exit(false); // Skip debug in production
|
|
250
|
+
else
|
|
251
|
+
exit(true);
|
|
252
|
+
end;
|
|
253
|
+
end;
|
|
254
|
+
|
|
255
|
+
local procedure GetMinimalDimensions(): Dictionary of [Text, Text]
|
|
256
|
+
var
|
|
257
|
+
MinimalDimensions: Dictionary of [Text, Text];
|
|
258
|
+
begin
|
|
259
|
+
MinimalDimensions.Add('UserID', UserId());
|
|
260
|
+
MinimalDimensions.Add('Company', CompanyName());
|
|
261
|
+
exit(MinimalDimensions);
|
|
262
|
+
end;
|
|
263
|
+
|
|
264
|
+
local procedure GetOptimizedDimensions(EventCategory: Text): Dictionary of [Text, Text]
|
|
265
|
+
var
|
|
266
|
+
OptimizedDimensions: Dictionary of [Text, Text];
|
|
267
|
+
begin
|
|
268
|
+
OptimizedDimensions.Add('UserID', UserId());
|
|
269
|
+
OptimizedDimensions.Add('Company', CompanyName());
|
|
270
|
+
OptimizedDimensions.Add('Category', EventCategory);
|
|
271
|
+
OptimizedDimensions.Add('Timestamp', Format(CurrentDateTime, 0, 9));
|
|
272
|
+
exit(OptimizedDimensions);
|
|
273
|
+
end;
|
|
274
|
+
|
|
275
|
+
local procedure MergeEssentialData(var CustomDimensions: Dictionary of [Text, Text]; DetailedData: Dictionary of [Text, Text])
|
|
276
|
+
var
|
|
277
|
+
Key: Text;
|
|
278
|
+
EssentialKeys: List of [Text];
|
|
279
|
+
begin
|
|
280
|
+
// Define essential keys for high-performance scenarios
|
|
281
|
+
EssentialKeys.Add('ErrorCode');
|
|
282
|
+
EssentialKeys.Add('Duration');
|
|
283
|
+
EssentialKeys.Add('RecordCount');
|
|
284
|
+
EssentialKeys.Add('Status');
|
|
285
|
+
|
|
286
|
+
foreach Key in EssentialKeys do
|
|
287
|
+
if DetailedData.ContainsKey(Key) then
|
|
288
|
+
CustomDimensions.Set(Key, DetailedData.Get(Key));
|
|
289
|
+
end;
|
|
290
|
+
|
|
291
|
+
local procedure MergeDetailedData(var CustomDimensions: Dictionary of [Text, Text]; DetailedData: Dictionary of [Text, Text])
|
|
292
|
+
var
|
|
293
|
+
Key: Text;
|
|
294
|
+
begin
|
|
295
|
+
foreach Key in DetailedData.Keys do
|
|
296
|
+
CustomDimensions.Set(Key, DetailedData.Get(Key));
|
|
297
|
+
end;
|
|
298
|
+
|
|
299
|
+
local procedure GetOptimalVerbosity(EventCategory: Text): Verbosity
|
|
300
|
+
begin
|
|
301
|
+
case EventCategory of
|
|
302
|
+
'Critical': exit(Verbosity::Critical);
|
|
303
|
+
'Error': exit(Verbosity::Error);
|
|
304
|
+
'Warning': exit(Verbosity::Warning);
|
|
305
|
+
'Performance':
|
|
306
|
+
if IsHighPerformanceMode() then
|
|
307
|
+
exit(Verbosity::Critical)
|
|
308
|
+
else
|
|
309
|
+
exit(Verbosity::Normal);
|
|
310
|
+
else exit(Verbosity::Normal);
|
|
311
|
+
end;
|
|
312
|
+
end;
|
|
313
|
+
|
|
314
|
+
local procedure GetEventId(Category: Text): Text
|
|
315
|
+
begin
|
|
316
|
+
exit(Category + Format(Random(999), 3, '<Integer,3><Filler Character,0>'));
|
|
317
|
+
end;
|
|
318
|
+
}
|
|
319
|
+
```
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# Telemetry Verbosity Level Usage Examples - AL Code Samples
|
|
2
|
+
|
|
3
|
+
## Verbosity Strategy Implementation
|
|
4
|
+
```al
|
|
5
|
+
codeunit 50120 "Verbosity Strategy Examples"
|
|
6
|
+
{
|
|
7
|
+
var
|
|
8
|
+
CurrentVerbosityLevel: Verbosity;
|
|
9
|
+
VerbosityConfig: Dictionary of [Text, Verbosity];
|
|
10
|
+
|
|
11
|
+
// Example 1: Context-aware verbosity selection
|
|
12
|
+
procedure LogWithContextualVerbosity(EventCategory: Text; Message: Text; CustomDimensions: Dictionary of [Text, Text])
|
|
13
|
+
var
|
|
14
|
+
SelectedVerbosity: Verbosity;
|
|
15
|
+
begin
|
|
16
|
+
SelectedVerbosity := DetermineVerbosityLevel(EventCategory);
|
|
17
|
+
|
|
18
|
+
Session.LogMessage(GetNextEventId(), Message, SelectedVerbosity,
|
|
19
|
+
DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
|
|
20
|
+
end;
|
|
21
|
+
|
|
22
|
+
local procedure DetermineVerbosityLevel(EventCategory: Text): Verbosity
|
|
23
|
+
begin
|
|
24
|
+
// Production verbosity rules
|
|
25
|
+
case EventCategory of
|
|
26
|
+
'Error', 'Critical':
|
|
27
|
+
exit(Verbosity::Error);
|
|
28
|
+
'Warning', 'Performance':
|
|
29
|
+
exit(Verbosity::Warning);
|
|
30
|
+
'Info', 'Business':
|
|
31
|
+
exit(Verbosity::Normal);
|
|
32
|
+
'Debug', 'Trace', 'Development':
|
|
33
|
+
if IsDebugMode() then
|
|
34
|
+
exit(Verbosity::Verbose)
|
|
35
|
+
else
|
|
36
|
+
exit(Verbosity::Normal);
|
|
37
|
+
else
|
|
38
|
+
exit(Verbosity::Normal);
|
|
39
|
+
end;
|
|
40
|
+
end;
|
|
41
|
+
|
|
42
|
+
// Example 2: Environment-based verbosity control
|
|
43
|
+
procedure InitializeVerbosityStrategy()
|
|
44
|
+
begin
|
|
45
|
+
if IsProductionEnvironment() then
|
|
46
|
+
InitializeProductionVerbosity()
|
|
47
|
+
else if IsStagingEnvironment() then
|
|
48
|
+
InitializeStagingVerbosity()
|
|
49
|
+
else
|
|
50
|
+
InitializeDevelopmentVerbosity();
|
|
51
|
+
end;
|
|
52
|
+
|
|
53
|
+
local procedure InitializeProductionVerbosity()
|
|
54
|
+
begin
|
|
55
|
+
// Production: Minimize noise, focus on actionable events
|
|
56
|
+
VerbosityConfig.Add('UserActions', Verbosity::Normal);
|
|
57
|
+
VerbosityConfig.Add('BusinessProcesses', Verbosity::Normal);
|
|
58
|
+
VerbosityConfig.Add('Errors', Verbosity::Error);
|
|
59
|
+
VerbosityConfig.Add('Performance', Verbosity::Warning);
|
|
60
|
+
VerbosityConfig.Add('Debugging', Verbosity::Critical); // Only critical debug info
|
|
61
|
+
VerbosityConfig.Add('Integration', Verbosity::Normal);
|
|
62
|
+
end;
|
|
63
|
+
|
|
64
|
+
local procedure InitializeDevelopmentVerbosity()
|
|
65
|
+
begin
|
|
66
|
+
// Development: Detailed logging for debugging
|
|
67
|
+
VerbosityConfig.Add('UserActions', Verbosity::Verbose);
|
|
68
|
+
VerbosityConfig.Add('BusinessProcesses', Verbosity::Verbose);
|
|
69
|
+
VerbosityConfig.Add('Errors', Verbosity::Error);
|
|
70
|
+
VerbosityConfig.Add('Performance', Verbosity::Verbose);
|
|
71
|
+
VerbosityConfig.Add('Debugging', Verbosity::Verbose);
|
|
72
|
+
VerbosityConfig.Add('Integration', Verbosity::Verbose);
|
|
73
|
+
end;
|
|
74
|
+
|
|
75
|
+
local procedure InitializeStagingVerbosity()
|
|
76
|
+
begin
|
|
77
|
+
// Staging: Balanced approach for pre-production testing
|
|
78
|
+
VerbosityConfig.Add('UserActions', Verbosity::Normal);
|
|
79
|
+
VerbosityConfig.Add('BusinessProcesses', Verbosity::Normal);
|
|
80
|
+
VerbosityConfig.Add('Errors', Verbosity::Error);
|
|
81
|
+
VerbosityConfig.Add('Performance', Verbosity::Normal);
|
|
82
|
+
VerbosityConfig.Add('Debugging', Verbosity::Warning);
|
|
83
|
+
VerbosityConfig.Add('Integration', Verbosity::Normal);
|
|
84
|
+
end;
|
|
85
|
+
|
|
86
|
+
// Helper methods
|
|
87
|
+
local procedure IsDebugMode(): Boolean
|
|
88
|
+
begin
|
|
89
|
+
exit(false); // Implement actual debug mode detection
|
|
90
|
+
end;
|
|
91
|
+
|
|
92
|
+
local procedure IsProductionEnvironment(): Boolean
|
|
93
|
+
begin
|
|
94
|
+
exit(true); // Implement actual environment detection
|
|
95
|
+
end;
|
|
96
|
+
|
|
97
|
+
local procedure IsStagingEnvironment(): Boolean
|
|
98
|
+
begin
|
|
99
|
+
exit(false); // Implement actual staging detection
|
|
100
|
+
end;
|
|
101
|
+
|
|
102
|
+
local procedure GetNextEventId(): Text
|
|
103
|
+
begin
|
|
104
|
+
exit(Format(Random(9999), 4, '<Integer,4><Filler Character,0>'));
|
|
105
|
+
end;
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Performance-Based Verbosity Control
|
|
110
|
+
```al
|
|
111
|
+
codeunit 50121 "Performance Verbosity Control"
|
|
112
|
+
{
|
|
113
|
+
// Example 3: Performance threshold-based verbosity
|
|
114
|
+
procedure LogPerformanceEvent(OperationName: Text; DurationMs: Integer; Context: Dictionary of [Text, Text])
|
|
115
|
+
var
|
|
116
|
+
CustomDimensions: Dictionary of [Text, Text];
|
|
117
|
+
PerformanceVerbosity: Verbosity;
|
|
118
|
+
Message: Text;
|
|
119
|
+
begin
|
|
120
|
+
CustomDimensions := Context;
|
|
121
|
+
CustomDimensions.Add('OperationName', OperationName);
|
|
122
|
+
CustomDimensions.Add('DurationMs', Format(DurationMs));
|
|
123
|
+
|
|
124
|
+
PerformanceVerbosity := GetPerformanceVerbosity(OperationName, DurationMs);
|
|
125
|
+
Message := StrSubstNo('Performance: %1 completed in %2ms', OperationName, DurationMs);
|
|
126
|
+
|
|
127
|
+
Session.LogMessage('PERF' + Format(Random(999), 3, '<Integer,3><Filler Character,0>'), Message, PerformanceVerbosity,
|
|
128
|
+
DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
|
|
129
|
+
end;
|
|
130
|
+
|
|
131
|
+
local procedure GetPerformanceVerbosity(OperationName: Text; DurationMs: Integer): Verbosity
|
|
132
|
+
var
|
|
133
|
+
WarningThreshold: Integer;
|
|
134
|
+
ErrorThreshold: Integer;
|
|
135
|
+
begin
|
|
136
|
+
GetPerformanceThresholds(OperationName, WarningThreshold, ErrorThreshold);
|
|
137
|
+
|
|
138
|
+
case true of
|
|
139
|
+
DurationMs >= ErrorThreshold:
|
|
140
|
+
exit(Verbosity::Error); // Critical performance issue
|
|
141
|
+
DurationMs >= WarningThreshold:
|
|
142
|
+
exit(Verbosity::Warning); // Performance concern
|
|
143
|
+
DurationMs >= (WarningThreshold div 2):
|
|
144
|
+
exit(Verbosity::Normal); // Notable but acceptable
|
|
145
|
+
else
|
|
146
|
+
exit(Verbosity::Verbose); // Fast operations - detailed tracking only
|
|
147
|
+
end;
|
|
148
|
+
end;
|
|
149
|
+
|
|
150
|
+
local procedure GetPerformanceThresholds(OperationName: Text; var WarningThreshold: Integer; var ErrorThreshold: Integer)
|
|
151
|
+
begin
|
|
152
|
+
// Operation-specific thresholds
|
|
153
|
+
case OperationName of
|
|
154
|
+
'DatabaseQuery':
|
|
155
|
+
begin
|
|
156
|
+
WarningThreshold := 1000; // 1 second
|
|
157
|
+
ErrorThreshold := 5000; // 5 seconds
|
|
158
|
+
end;
|
|
159
|
+
'ReportGeneration':
|
|
160
|
+
begin
|
|
161
|
+
WarningThreshold := 10000; // 10 seconds
|
|
162
|
+
ErrorThreshold := 30000; // 30 seconds
|
|
163
|
+
end;
|
|
164
|
+
'APICall':
|
|
165
|
+
begin
|
|
166
|
+
WarningThreshold := 2000; // 2 seconds
|
|
167
|
+
ErrorThreshold := 10000; // 10 seconds
|
|
168
|
+
end;
|
|
169
|
+
else
|
|
170
|
+
begin
|
|
171
|
+
WarningThreshold := 5000; // Default 5 seconds
|
|
172
|
+
ErrorThreshold := 15000; // Default 15 seconds
|
|
173
|
+
end;
|
|
174
|
+
end;
|
|
175
|
+
end;
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## User Role-Based Verbosity
|
|
180
|
+
```al
|
|
181
|
+
codeunit 50122 "Role Based Verbosity"
|
|
182
|
+
{
|
|
183
|
+
// Example 4: User role-based verbosity control
|
|
184
|
+
procedure LogUserAction(ActionType: Text; UserID: Code[50]; Context: Text)
|
|
185
|
+
var
|
|
186
|
+
CustomDimensions: Dictionary of [Text, Text];
|
|
187
|
+
UserVerbosity: Verbosity;
|
|
188
|
+
begin
|
|
189
|
+
CustomDimensions.Add('UserID', UserID);
|
|
190
|
+
CustomDimensions.Add('ActionType', ActionType);
|
|
191
|
+
CustomDimensions.Add('Context', Context);
|
|
192
|
+
|
|
193
|
+
UserVerbosity := GetUserActionVerbosity(UserID, ActionType);
|
|
194
|
+
|
|
195
|
+
Session.LogMessage('USER' + Format(Random(999), 3, '<Integer,3><Filler Character,0>'),
|
|
196
|
+
StrSubstNo('User action: %1', ActionType), UserVerbosity,
|
|
197
|
+
DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, CustomDimensions);
|
|
198
|
+
end;
|
|
199
|
+
|
|
200
|
+
local procedure GetUserActionVerbosity(UserID: Code[50]; ActionType: Text): Verbosity
|
|
201
|
+
begin
|
|
202
|
+
// Higher verbosity for administrative users in development
|
|
203
|
+
if IsAdministrativeUser(UserID) and not IsProductionEnvironment() then
|
|
204
|
+
exit(Verbosity::Verbose);
|
|
205
|
+
|
|
206
|
+
case ActionType of
|
|
207
|
+
'Login', 'Logout':
|
|
208
|
+
exit(Verbosity::Normal);
|
|
209
|
+
'DataExport', 'ReportGeneration':
|
|
210
|
+
exit(Verbosity::Normal);
|
|
211
|
+
'ConfigurationChange':
|
|
212
|
+
exit(Verbosity::Warning); // Important to track
|
|
213
|
+
'SecurityElevation':
|
|
214
|
+
exit(Verbosity::Critical); // Always log security events
|
|
215
|
+
else
|
|
216
|
+
exit(Verbosity::Normal);
|
|
217
|
+
end;
|
|
218
|
+
end;
|
|
219
|
+
|
|
220
|
+
local procedure IsAdministrativeUser(UserID: Code[50]): Boolean
|
|
221
|
+
var
|
|
222
|
+
AccessControl: Record "Access Control";
|
|
223
|
+
begin
|
|
224
|
+
// Check if user has administrative permissions
|
|
225
|
+
AccessControl.SetRange("User Security ID", UserID);
|
|
226
|
+
AccessControl.SetRange("Role ID", 'SUPER');
|
|
227
|
+
exit(not AccessControl.IsEmpty);
|
|
228
|
+
end;
|
|
229
|
+
|
|
230
|
+
local procedure IsProductionEnvironment(): Boolean
|
|
231
|
+
begin
|
|
232
|
+
// Implement environment detection logic
|
|
233
|
+
exit(true);
|
|
234
|
+
end;
|
|
235
|
+
}
|
|
236
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "BC Session LogMessage Methods"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["telemetry", "logging", "session", "performance"]
|
|
7
|
+
prerequisites: ["telemetry-basics"]
|
|
8
|
+
samples: "samples/logmessage-methods.md"
|
|
9
|
+
---
|
|
10
|
+
# BC Session LogMessage Methods
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Business Central's Session.LogMessage() provides structured telemetry logging with multiple overloads for different verbosity levels and correlation scenarios. Understanding the method variations and their performance implications is essential for effective telemetry implementation.
|
|
15
|
+
|
|
16
|
+
The LogMessage methods enable developers to emit custom telemetry events that integrate with Application Insights and other monitoring solutions. Each method variation serves specific use cases from simple informational logging to complex error correlation.
|
|
17
|
+
|
|
18
|
+
## Method Variations
|
|
19
|
+
|
|
20
|
+
### Basic LogMessage
|
|
21
|
+
The fundamental LogMessage(Message, Verbosity) method provides simple event logging with verbosity control. This method creates telemetry events with basic message content and system-generated correlation identifiers.
|
|
22
|
+
|
|
23
|
+
Verbosity levels range from Critical (1) through Error (2), Warning (3), Normal (4), and Verbose (5). Higher verbosity numbers indicate less critical information and may be filtered in production environments.
|
|
24
|
+
|
|
25
|
+
### LogMessage with Custom Dimensions
|
|
26
|
+
The LogMessage(Message, Verbosity, DataClassification, TelemetryScope, Dictionary) overload enables rich telemetry with custom dimensions. This method allows developers to include structured data that enhances telemetry analysis and correlation.
|
|
27
|
+
|
|
28
|
+
Custom dimensions support key-value pairs that appear as structured fields in Application Insights. This enables sophisticated querying, filtering, and correlation analysis in telemetry dashboards.
|
|
29
|
+
|
|
30
|
+
### LogMessage with Correlation
|
|
31
|
+
Advanced LogMessage overloads include correlation parameters that link related telemetry events across different system components. This correlation capability is essential for tracing complex business processes and debugging distributed operations.
|
|
32
|
+
|
|
33
|
+
## Performance Characteristics
|
|
34
|
+
|
|
35
|
+
### Memory Impact
|
|
36
|
+
LogMessage operations consume memory for message formatting and custom dimension serialization. Large custom dimension collections or frequent high-verbosity logging can impact system memory utilization.
|
|
37
|
+
|
|
38
|
+
The telemetry system buffers events before transmission, so sustained high-volume logging may increase memory pressure. Consider telemetry volume in memory-constrained environments.
|
|
39
|
+
|
|
40
|
+
### CPU Overhead
|
|
41
|
+
Message formatting and custom dimension processing consume CPU resources. Complex custom dimensions or frequent logging calls contribute to overall system CPU utilization.
|
|
42
|
+
|
|
43
|
+
Verbosity-based filtering occurs after message formatting, so high-verbosity messages still incur formatting costs even when filtered. Design telemetry strategies to minimize unnecessary processing.
|
|
44
|
+
|
|
45
|
+
### Network and Storage
|
|
46
|
+
Telemetry events consume network bandwidth for transmission to monitoring systems and storage space in telemetry databases. High-volume telemetry can impact both network performance and storage costs.
|
|
47
|
+
|
|
48
|
+
Consider telemetry retention policies and sampling strategies to balance diagnostic capability with resource consumption.
|
|
49
|
+
|
|
50
|
+
## Best Practices
|
|
51
|
+
|
|
52
|
+
### Verbosity Selection
|
|
53
|
+
Choose appropriate verbosity levels based on information criticality and expected production filtering. Use Critical/Error for system issues, Warning for recoverable problems, Normal for business events, and Verbose for detailed diagnostics.
|
|
54
|
+
|
|
55
|
+
### Custom Dimension Design
|
|
56
|
+
Structure custom dimensions for effective querying and analysis. Use consistent naming conventions and avoid high-cardinality values that complicate aggregation analysis.
|
|
57
|
+
|
|
58
|
+
### Correlation Strategy
|
|
59
|
+
Implement consistent correlation patterns across related components to enable effective trace analysis. Use business process identifiers where possible to link telemetry events to actual user scenarios.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "SetLoadFields Filter Field Exclusion"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["setloadfields", "filtering", "field-exclusion"]
|
|
7
|
+
prerequisites: ["setloadfields-basics", "record-filtering"]
|
|
8
|
+
samples: "samples/setloadfields-filter-exclusion.md"
|
|
9
|
+
---
|
|
10
|
+
# SetLoadFields Filter Field Exclusion
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
SetLoadFields filter field exclusion optimizes performance by explicitly avoiding the loading of fields that are used only for filtering operations. When fields are needed solely for database-level filtering but not for application logic, excluding them from field loading reduces memory usage and improves processing speed.
|
|
15
|
+
|
|
16
|
+
This technique is particularly valuable when working with tables containing large fields or many columns where filter fields represent a small subset of total table fields.
|
|
17
|
+
|
|
18
|
+
## Filtering vs Loading Distinction
|
|
19
|
+
|
|
20
|
+
Database filtering and field loading serve different purposes in BC data access. Filtering determines which records are retrieved from the database, while field loading determines which field values are brought into memory for each retrieved record.
|
|
21
|
+
|
|
22
|
+
Fields used in SETRANGE, SETFILTER, or WHERE clauses perform their filtering function at the database level regardless of whether they're included in SetLoadFields. The database engine applies filters using indexed data structures without requiring field values to be loaded into BC memory.
|
|
23
|
+
|
|
24
|
+
## Optimization Strategy
|
|
25
|
+
|
|
26
|
+
The core strategy involves identifying fields that serve purely filtering purposes and excluding them from SetLoadFields calls. This creates a separation between "filter fields" and "processing fields" in your data access logic.
|
|
27
|
+
|
|
28
|
+
Filter fields typically include:
|
|
29
|
+
- Date range filters for reporting periods
|
|
30
|
+
- Status fields for record state filtering
|
|
31
|
+
- Category fields for data segmentation
|
|
32
|
+
- Foreign key fields for relationship filtering
|
|
33
|
+
|
|
34
|
+
Processing fields include those whose values are actually used in calculations, display, or business logic after records are loaded.
|
|
35
|
+
|
|
36
|
+
## Memory Impact
|
|
37
|
+
|
|
38
|
+
Excluding filter-only fields can significantly reduce memory consumption, especially with:
|
|
39
|
+
- Tables containing large text or BLOB fields used for filtering
|
|
40
|
+
- Wide tables with many columns where only a subset is needed for processing
|
|
41
|
+
- Bulk operations processing thousands of records
|
|
42
|
+
|
|
43
|
+
The memory savings compound when processing large record sets, potentially preventing memory pressure and improving overall system performance.
|
|
44
|
+
|
|
45
|
+
## Implementation Approach
|
|
46
|
+
|
|
47
|
+
Start by analyzing your data access patterns to identify fields used exclusively for filtering. Document the distinction between filter fields and processing fields for your specific use case.
|
|
48
|
+
|
|
49
|
+
Apply SetLoadFields with only the processing fields included, ensuring that filter fields are omitted from the field list. Set up your filters normally using SETRANGE or SETFILTER - these will continue to work correctly even though the filter fields aren't loaded.
|
|
50
|
+
|
|
51
|
+
## Database Query Optimization
|
|
52
|
+
|
|
53
|
+
Excluding filter fields from loading can improve database query performance by reducing the amount of data transferred between the database and BC service. The database can still use indexes on filter fields for efficient record retrieval while avoiding unnecessary data transfer.
|
|
54
|
+
|
|
55
|
+
This optimization is particularly effective when filter fields have database indexes that support efficient filtering without requiring full field value retrieval.
|
|
56
|
+
|
|
57
|
+
## Validation Considerations
|
|
58
|
+
|
|
59
|
+
When excluding filter fields from loading, ensure that your subsequent processing logic doesn't attempt to access those field values. Accessing excluded fields will trigger implicit field loading, negating the optimization benefits.
|
|
60
|
+
|
|
61
|
+
Consider using compilation warnings or code review processes to catch accidental access to excluded fields in your processing logic.
|
|
62
|
+
|
|
63
|
+
## Advanced Patterns
|
|
64
|
+
|
|
65
|
+
Combine filter field exclusion with conditional field loading where you dynamically determine which processing fields to load based on record state or business logic requirements.
|
|
66
|
+
|
|
67
|
+
Consider creating field loading profiles for different processing scenarios, each optimized for specific combinations of needed fields while excluding unnecessary filter fields.
|