@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,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "API Page Source Table Key Requirements"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["api-pages", "table-keys", "performance"]
|
|
7
|
+
samples: "samples/table-key-requirements.md"
|
|
8
|
+
---
|
|
9
|
+
# API Page Source Table Key Requirements
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
API Pages require specific table key configurations to ensure optimal OData query performance and proper data access patterns. Understanding these requirements is critical for high-performance API implementations that scale effectively under production loads.
|
|
14
|
+
|
|
15
|
+
The BC platform automatically generates OData endpoints based on table key structures, making key design decisions directly impact API query performance. Poor key design can result in full table scans and timeout errors in API consumers.
|
|
16
|
+
|
|
17
|
+
## Primary Key Requirements
|
|
18
|
+
|
|
19
|
+
API Pages must have a well-defined primary key that serves as the unique identifier for OData operations. The primary key becomes the basis for individual record retrieval operations through the API endpoint.
|
|
20
|
+
|
|
21
|
+
Single-field primary keys perform better than composite keys for API operations. The SystemId field, when available, provides optimal performance as it's a GUID field with guaranteed uniqueness and efficient indexing characteristics.
|
|
22
|
+
|
|
23
|
+
Composite primary keys require careful consideration of field ordering to ensure the most selective fields appear first in the key definition. This ordering directly impacts query performance when API consumers filter on subset of key fields.
|
|
24
|
+
|
|
25
|
+
## Secondary Key Performance Impact
|
|
26
|
+
|
|
27
|
+
Secondary keys on API Page source tables significantly impact OData query performance. Each secondary key becomes a potential filter path for API consumers, and poorly designed keys can create performance bottlenecks.
|
|
28
|
+
|
|
29
|
+
Keys supporting common API query patterns should be prioritized. Consider the typical filtering, sorting, and grouping requirements of API consumers when designing secondary keys for optimal query execution.
|
|
30
|
+
|
|
31
|
+
The BC platform may automatically select keys for query execution based on OData filter parameters. Understanding this selection logic helps predict and optimize actual query performance under different usage patterns.
|
|
32
|
+
|
|
33
|
+
## Key Field Selection Criteria
|
|
34
|
+
|
|
35
|
+
Choose key fields based on query selectivity and data distribution. Fields with high cardinality and even distribution provide better performance than fields with skewed data patterns or low selectivity.
|
|
36
|
+
|
|
37
|
+
Avoid including large text fields or blob fields in key definitions as these impact both storage requirements and query performance. Keys should focus on efficient identifier and categorization fields.
|
|
38
|
+
|
|
39
|
+
Consider the impact of key fields on data modification operations. Fields that change frequently should be avoided in secondary keys as this requires key maintenance overhead during data updates.
|
|
40
|
+
|
|
41
|
+
## OData Query Optimization
|
|
42
|
+
|
|
43
|
+
API Page key design directly influences OData query compilation and execution. The BC platform analyzes available keys when translating OData filters into SQL query patterns.
|
|
44
|
+
|
|
45
|
+
Complex OData queries may require specific key combinations to avoid performance issues. Understanding common API consumer query patterns helps identify required key structures during design phase.
|
|
46
|
+
|
|
47
|
+
Query performance monitoring should include analysis of key usage patterns to identify optimization opportunities. Unused keys consume storage and maintenance overhead without providing performance benefits.
|
|
48
|
+
|
|
49
|
+
## Multi-Tenancy Considerations
|
|
50
|
+
|
|
51
|
+
In multi-tenant environments, key design must consider tenant isolation requirements. Keys may need to include tenant-specific fields to ensure proper data segregation and performance isolation.
|
|
52
|
+
|
|
53
|
+
DataPerCompany table property affects key performance characteristics. Tables with DataPerCompany = false require additional consideration for key design to maintain performance across tenant boundaries.
|
|
54
|
+
|
|
55
|
+
Global tables require careful key design to prevent cross-tenant data access issues while maintaining query performance for legitimate multi-tenant scenarios.
|
|
56
|
+
|
|
57
|
+
## Performance Monitoring
|
|
58
|
+
|
|
59
|
+
Monitor API Page query performance through BC telemetry and database performance metrics. Key performance indicators include query execution time, index usage patterns, and resource consumption.
|
|
60
|
+
|
|
61
|
+
Identify queries that result in table scans or inefficient key usage. These represent optimization opportunities through key design improvements or query pattern adjustments.
|
|
62
|
+
|
|
63
|
+
Regular performance analysis should include review of key effectiveness and identification of missing key requirements based on actual usage patterns.
|
|
64
|
+
|
|
65
|
+
## Common Implementation Issues
|
|
66
|
+
|
|
67
|
+
Missing or inappropriate primary keys result in poor OData query performance and potential data consistency issues. Ensure every API Page source table has an appropriate primary key definition.
|
|
68
|
+
|
|
69
|
+
Excessive secondary keys can impact data modification performance without providing corresponding query benefits. Focus key design on actual API consumer requirements rather than theoretical optimization.
|
|
70
|
+
|
|
71
|
+
Key field data type mismatches between related tables can prevent efficient join operations in complex OData queries. Maintain consistent data types across related table key fields.
|
|
72
|
+
|
|
73
|
+
## Best Practices
|
|
74
|
+
|
|
75
|
+
Design keys based on actual API consumer requirements rather than generic optimization principles. Understanding real-world usage patterns drives effective key design decisions.
|
|
76
|
+
|
|
77
|
+
Balance query performance requirements with data modification overhead. Keys provide query benefits but incur maintenance costs during data updates.
|
|
78
|
+
|
|
79
|
+
Document key design decisions and performance assumptions for future optimization efforts. This documentation helps maintain design consistency and supports performance troubleshooting.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Telemetry Error Correlation"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["telemetry", "debugging", "correlation", "troubleshooting"]
|
|
7
|
+
prerequisites: ["bc-session-logmessage-methods"]
|
|
8
|
+
samples: "samples/error-correlation.md"
|
|
9
|
+
---
|
|
10
|
+
# Telemetry Error Correlation
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Error correlation links related telemetry events across different system components to provide complete context for troubleshooting. Effective correlation enables rapid root cause analysis by connecting error symptoms with underlying causes across complex business processes.
|
|
15
|
+
|
|
16
|
+
Business Central's telemetry correlation mechanisms support both automatic session-based correlation and custom correlation identifiers that span multiple sessions or system boundaries.
|
|
17
|
+
|
|
18
|
+
## Correlation Mechanisms
|
|
19
|
+
|
|
20
|
+
### Session-Based Correlation
|
|
21
|
+
Business Central automatically correlates telemetry events within the same user session using system-generated session identifiers. This automatic correlation links events from the same user interaction across different codeunits and operations.
|
|
22
|
+
|
|
23
|
+
Session correlation works effectively for single-user operations but has limitations for background processes, integration scenarios, or operations that span multiple sessions.
|
|
24
|
+
|
|
25
|
+
### Custom Correlation Identifiers
|
|
26
|
+
Custom correlation identifiers enable linking related events across session boundaries. These identifiers can represent business processes, document workflows, or integration operations that span multiple system interactions.
|
|
27
|
+
|
|
28
|
+
Implement custom correlation using consistent identifier generation and inclusion in custom dimensions across all related telemetry events. Choose correlation identifiers that meaningfully represent business processes or technical operations.
|
|
29
|
+
|
|
30
|
+
### Operation Context Correlation
|
|
31
|
+
Operation-level correlation links events within specific business operations like document posting, report generation, or integration processing. This correlation level bridges the gap between session correlation and business process correlation.
|
|
32
|
+
|
|
33
|
+
## Implementation Patterns
|
|
34
|
+
|
|
35
|
+
### Error Event Design
|
|
36
|
+
Structure error telemetry events to include comprehensive context for troubleshooting. Include business context (document numbers, customer identifiers), technical context (component names, operation types), and correlation context (session, operation, process identifiers).
|
|
37
|
+
|
|
38
|
+
Design error events to capture both immediate error conditions and related context that supports root cause analysis. Consider including preceding events or system state information that helps explain error conditions.
|
|
39
|
+
|
|
40
|
+
### Correlation Propagation
|
|
41
|
+
Propagate correlation identifiers consistently across all components involved in business processes. Ensure correlation identifiers flow through integration boundaries, background job execution, and external system interactions.
|
|
42
|
+
|
|
43
|
+
Use parameter passing, global variables, or context objects to maintain correlation identifiers throughout business process execution. Design correlation propagation to be resilient to error conditions and system boundaries.
|
|
44
|
+
|
|
45
|
+
### Multi-Level Correlation
|
|
46
|
+
Implement multiple correlation levels to support different troubleshooting scenarios. Combine session-level, operation-level, and business process-level correlation to enable both detailed technical analysis and high-level business impact assessment.
|
|
47
|
+
|
|
48
|
+
## Troubleshooting Applications
|
|
49
|
+
|
|
50
|
+
### Root Cause Analysis
|
|
51
|
+
Use correlation identifiers to trace error conditions back to their originating causes. Link error symptoms visible to users with underlying technical issues across multiple system components.
|
|
52
|
+
|
|
53
|
+
Correlation enables analysis of error cascades where initial problems trigger subsequent failures across related components or business processes.
|
|
54
|
+
|
|
55
|
+
### Integration Debugging
|
|
56
|
+
Correlation is essential for debugging integration scenarios where errors may occur in external systems but manifest as Business Central issues. Link Business Central telemetry with external system logs using shared correlation identifiers.
|
|
57
|
+
|
|
58
|
+
### Performance Issue Investigation
|
|
59
|
+
Use correlation to link performance symptoms with underlying causes. Correlate user-reported performance issues with system resource utilization, database performance, or integration latency across multiple components.
|
|
60
|
+
|
|
61
|
+
## Advanced Correlation Patterns
|
|
62
|
+
|
|
63
|
+
### Hierarchical Correlation
|
|
64
|
+
Implement hierarchical correlation structures that represent complex business processes with multiple sub-operations. Use parent-child correlation relationships to organize telemetry events into logical groupings.
|
|
65
|
+
|
|
66
|
+
### Cross-System Correlation
|
|
67
|
+
Extend correlation across system boundaries to link Business Central events with external system activities. Include shared correlation identifiers in integration messages and API calls to enable comprehensive troubleshooting.
|
|
68
|
+
|
|
69
|
+
### Temporal Correlation
|
|
70
|
+
Consider time-based correlation patterns that link events occurring within specific time windows. This approach helps identify related issues that may not share explicit correlation identifiers.
|
|
71
|
+
|
|
72
|
+
## Analysis and Tooling
|
|
73
|
+
|
|
74
|
+
### Correlation Queries
|
|
75
|
+
Design Application Insights queries that leverage correlation identifiers for effective troubleshooting analysis. Create saved queries and dashboards that utilize correlation patterns for routine troubleshooting tasks.
|
|
76
|
+
|
|
77
|
+
### Automated Correlation Analysis
|
|
78
|
+
Consider implementing automated analysis that identifies correlation patterns and potential root causes. Use correlation data to build troubleshooting decision trees and diagnostic workflows.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Telemetry Performance Considerations"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["telemetry", "performance", "optimization", "monitoring"]
|
|
7
|
+
prerequisites: ["bc-session-logmessage-methods", "custom-dimensions-best-practices"]
|
|
8
|
+
samples: "samples/telemetry-performance.md"
|
|
9
|
+
---
|
|
10
|
+
# Telemetry Performance Considerations
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Telemetry implementation significantly impacts system performance through CPU utilization, memory consumption, and network overhead. Understanding these performance characteristics enables effective telemetry design that balances diagnostic capability with system efficiency.
|
|
15
|
+
|
|
16
|
+
Telemetry overhead scales with event frequency, custom dimension complexity, and verbosity levels. High-volume telemetry scenarios require careful optimization to prevent performance degradation in production environments.
|
|
17
|
+
|
|
18
|
+
## CPU Performance Impact
|
|
19
|
+
|
|
20
|
+
### Message Formatting Overhead
|
|
21
|
+
LogMessage calls incur CPU overhead for message string formatting regardless of verbosity filtering. Complex message formatting with string concatenation or expensive calculations impacts performance even when events are ultimately filtered.
|
|
22
|
+
|
|
23
|
+
Optimize message formatting by using simple string operations and pre-calculating expensive values. Consider lazy evaluation patterns for complex message content that may not be needed in all scenarios.
|
|
24
|
+
|
|
25
|
+
### Custom Dimension Processing
|
|
26
|
+
Custom dimension serialization consumes CPU resources proportional to dimension count and value complexity. Large dimension collections or complex dimension values can significantly impact telemetry performance.
|
|
27
|
+
|
|
28
|
+
Minimize dimension processing overhead by pre-formatting dimension values, reusing dimension collections, and avoiding expensive calculations within dimension generation code.
|
|
29
|
+
|
|
30
|
+
### Frequency Impact
|
|
31
|
+
Telemetry performance impact scales directly with event frequency. High-frequency telemetry in performance-critical code paths can measurably impact overall system performance.
|
|
32
|
+
|
|
33
|
+
Consider telemetry frequency when implementing logging in loops, frequent business operations, or real-time processing scenarios. Use sampling strategies to reduce event volume while preserving analytical value.
|
|
34
|
+
|
|
35
|
+
## Memory Utilization
|
|
36
|
+
|
|
37
|
+
### Event Buffering
|
|
38
|
+
The telemetry system buffers events before transmission, consuming memory proportional to event volume and buffering duration. High-volume telemetry can increase memory pressure, particularly in memory-constrained environments.
|
|
39
|
+
|
|
40
|
+
Monitor telemetry memory utilization and consider event volume in memory capacity planning. Implement backpressure mechanisms if telemetry volume threatens system memory stability.
|
|
41
|
+
|
|
42
|
+
### Custom Dimension Storage
|
|
43
|
+
Custom dimensions consume memory for key-value pair storage and serialization. Large dimension collections or string-heavy dimension values can contribute significantly to overall memory utilization.
|
|
44
|
+
|
|
45
|
+
Optimize dimension memory usage by using efficient data types, minimizing string allocations, and reusing dimension objects where possible.
|
|
46
|
+
|
|
47
|
+
### Correlation Data
|
|
48
|
+
Correlation mechanisms may maintain in-memory state to link related telemetry events across time. Long-running correlations or high-cardinality correlation scenarios can impact memory utilization.
|
|
49
|
+
|
|
50
|
+
## Network and I/O Considerations
|
|
51
|
+
|
|
52
|
+
### Transmission Overhead
|
|
53
|
+
Telemetry events consume network bandwidth for transmission to monitoring systems. High-volume telemetry can impact network performance, particularly in bandwidth-constrained environments.
|
|
54
|
+
|
|
55
|
+
Consider telemetry network impact in overall network capacity planning. Implement local buffering and batch transmission strategies to optimize network utilization efficiency.
|
|
56
|
+
|
|
57
|
+
### Monitoring System Impact
|
|
58
|
+
Large telemetry volumes can overwhelm monitoring systems and impact query performance in Application Insights or other telemetry backends. Consider backend capacity when designing telemetry volume strategies.
|
|
59
|
+
|
|
60
|
+
### Storage and Retention
|
|
61
|
+
Telemetry events consume storage space in monitoring systems with associated cost implications. Balance diagnostic capability with storage costs and retention requirements.
|
|
62
|
+
|
|
63
|
+
## Optimization Strategies
|
|
64
|
+
|
|
65
|
+
### Strategic Verbosity Management
|
|
66
|
+
Use verbosity levels strategically to control telemetry volume in production environments. Filter high-verbosity events in production while maintaining essential diagnostic capability.
|
|
67
|
+
|
|
68
|
+
### Sampling Implementation
|
|
69
|
+
Implement telemetry sampling for high-volume scenarios to reduce data volume while preserving statistical significance. Consider business-aware sampling that maintains critical event capture.
|
|
70
|
+
|
|
71
|
+
### Conditional Telemetry
|
|
72
|
+
Implement conditional telemetry patterns that enable detailed logging during specific scenarios without permanent performance overhead. Use feature flags or configuration settings to control telemetry behavior.
|
|
73
|
+
|
|
74
|
+
### Batch Processing
|
|
75
|
+
Group telemetry events into batches where possible to optimize transmission efficiency and reduce per-event overhead. Balance batching benefits with real-time monitoring requirements.
|
|
76
|
+
|
|
77
|
+
## Performance Monitoring
|
|
78
|
+
|
|
79
|
+
### Telemetry System Monitoring
|
|
80
|
+
Monitor telemetry system performance including event volume, processing latency, and resource utilization. Telemetry overhead should be measured and tracked as part of overall system performance.
|
|
81
|
+
|
|
82
|
+
### Impact Analysis
|
|
83
|
+
Regularly analyze telemetry performance impact through load testing and production monitoring. Understand telemetry overhead trends and optimize configurations based on actual impact measurements.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Telemetry Verbosity Strategy"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["telemetry", "verbosity", "production", "diagnostics"]
|
|
7
|
+
prerequisites: ["bc-session-logmessage-methods"]
|
|
8
|
+
samples: "samples/verbosity-strategy.md"
|
|
9
|
+
---
|
|
10
|
+
# Telemetry Verbosity Strategy
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Telemetry verbosity controls determine which events are captured and transmitted to monitoring systems. Effective verbosity strategy balances diagnostic capability with system performance and storage costs.
|
|
15
|
+
|
|
16
|
+
Business Central provides five verbosity levels from Critical (1) to Verbose (5). Production environments typically filter higher verbosity levels to reduce telemetry volume while preserving essential diagnostic information.
|
|
17
|
+
|
|
18
|
+
## Verbosity Levels
|
|
19
|
+
|
|
20
|
+
### Critical (Level 1)
|
|
21
|
+
Critical events indicate system failures or conditions that prevent normal operation. These events should always be captured and typically trigger immediate alerting in production environments.
|
|
22
|
+
|
|
23
|
+
Use Critical verbosity for unrecoverable errors, system component failures, and conditions that impact business continuity. Critical events warrant immediate attention and investigation.
|
|
24
|
+
|
|
25
|
+
### Error (Level 2)
|
|
26
|
+
Error events indicate recoverable problems that impact specific operations but don't prevent overall system function. These events should be captured in production for troubleshooting and trend analysis.
|
|
27
|
+
|
|
28
|
+
Use Error verbosity for operation failures, data validation issues, and integration problems that affect individual transactions or users.
|
|
29
|
+
|
|
30
|
+
### Warning (Level 3)
|
|
31
|
+
Warning events indicate potential problems or unusual conditions that don't immediately impact operations. These events help identify emerging issues before they become critical problems.
|
|
32
|
+
|
|
33
|
+
Use Warning verbosity for performance degradation, configuration issues, and deprecated functionality usage that may require attention.
|
|
34
|
+
|
|
35
|
+
### Normal (Level 4)
|
|
36
|
+
Normal events capture significant business operations and system activities for operational monitoring and business intelligence. These events provide insight into system usage and business process execution.
|
|
37
|
+
|
|
38
|
+
Use Normal verbosity for successful business transactions, user actions, and integration activities that support operational analysis.
|
|
39
|
+
|
|
40
|
+
### Verbose (Level 5)
|
|
41
|
+
Verbose events provide detailed diagnostic information for troubleshooting and development scenarios. These events are typically filtered in production environments due to volume considerations.
|
|
42
|
+
|
|
43
|
+
Use Verbose verbosity for detailed execution traces, debugging information, and granular operational details needed for development and testing scenarios.
|
|
44
|
+
|
|
45
|
+
## Production Strategy
|
|
46
|
+
|
|
47
|
+
### Baseline Configuration
|
|
48
|
+
Establish production verbosity baselines that capture essential diagnostic information without overwhelming monitoring systems. Typical production configurations capture Critical through Normal levels.
|
|
49
|
+
|
|
50
|
+
Consider business requirements, troubleshooting needs, and storage capacity when establishing baseline verbosity levels. Adjust baselines based on operational experience and incident analysis needs.
|
|
51
|
+
|
|
52
|
+
### Dynamic Adjustment
|
|
53
|
+
Implement capabilities to adjust verbosity levels dynamically during incident investigation or troubleshooting scenarios. Temporary verbosity increases can provide additional diagnostic information without permanent overhead.
|
|
54
|
+
|
|
55
|
+
Consider implementing verbosity level controls that can be adjusted per component or business process to focus additional telemetry on specific problem areas.
|
|
56
|
+
|
|
57
|
+
## Development Strategy
|
|
58
|
+
|
|
59
|
+
### Testing and Development
|
|
60
|
+
Use higher verbosity levels during development and testing to capture detailed execution information. Verbose telemetry supports debugging, performance analysis, and integration testing scenarios.
|
|
61
|
+
|
|
62
|
+
Consider separate verbosity configurations for different environments to optimize telemetry capture for each environment's specific needs.
|
|
63
|
+
|
|
64
|
+
### Performance Testing
|
|
65
|
+
Include telemetry verbosity impact in performance testing scenarios. High verbosity levels can significantly impact system performance and should be considered in capacity planning.
|
|
66
|
+
|
|
67
|
+
## Implementation Considerations
|
|
68
|
+
|
|
69
|
+
### Performance Impact
|
|
70
|
+
Higher verbosity levels increase CPU, memory, and network utilization for telemetry processing and transmission. Consider telemetry overhead in overall system performance planning.
|
|
71
|
+
|
|
72
|
+
### Storage and Cost Management
|
|
73
|
+
Telemetry volume directly impacts monitoring system storage requirements and costs. Balance diagnostic capability with storage capacity and cost constraints.
|
|
74
|
+
|
|
75
|
+
### Filtering and Sampling
|
|
76
|
+
Consider implementing telemetry sampling strategies for high-volume scenarios to reduce data volume while preserving statistical significance for analysis.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "TestField Performance Optimization"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["performance", "validation", "optimization", "best-practices"]
|
|
7
|
+
prerequisites: ["testfield-basic-syntax", "performance-fundamentals"]
|
|
8
|
+
---
|
|
9
|
+
# TestField Performance Optimization
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
TestField operations are lightweight but can impact performance when used extensively in loops or batch processing. Understanding TestField performance characteristics enables optimal validation strategies for high-volume scenarios.
|
|
14
|
+
|
|
15
|
+
**Performance Principle**: TestField has minimal overhead for individual calls but cumulative impact in high-volume operations requires optimization strategies.
|
|
16
|
+
|
|
17
|
+
## Performance Characteristics
|
|
18
|
+
|
|
19
|
+
### Individual Call Performance
|
|
20
|
+
Single TestField calls have negligible performance impact. The method performs simple null/empty checks without database operations.
|
|
21
|
+
|
|
22
|
+
### Batch Processing Impact
|
|
23
|
+
In loops processing hundreds or thousands of records, cumulative TestField overhead becomes measurable and should be optimized.
|
|
24
|
+
|
|
25
|
+
### Error Handling Overhead
|
|
26
|
+
TestField errors trigger exception handling mechanisms. In scenarios with frequent validation failures, this overhead can be significant.
|
|
27
|
+
|
|
28
|
+
## Optimization Strategies
|
|
29
|
+
|
|
30
|
+
### Conditional Validation
|
|
31
|
+
Apply validation intensity based on processing context. Critical validations always execute while optional validations run only when required, reducing overhead in performance-sensitive scenarios.
|
|
32
|
+
|
|
33
|
+
### Early Exit Patterns
|
|
34
|
+
Perform lightweight data checks before expensive TestField calls. Exit processing early when data fails simple validation tests, avoiding unnecessary validation overhead.
|
|
35
|
+
|
|
36
|
+
### Grouped Validation
|
|
37
|
+
Pre-validate multiple fields using simple checks before calling TestField. Only invoke TestField for final validation with proper error messages after confirming basic data validity.
|
|
38
|
+
|
|
39
|
+
## High-Volume Scenarios
|
|
40
|
+
|
|
41
|
+
### Batch Import Optimization
|
|
42
|
+
Combine pre-validation checks with TryFunction patterns to handle validation failures gracefully in batch processing. Prevents single validation failures from terminating entire batch operations.
|
|
43
|
+
|
|
44
|
+
### Loop Processing Optimization
|
|
45
|
+
Use record filters to exclude obviously invalid records before processing loops. Combine with TryFunction patterns to track processing success rates and continue batch processing despite individual record failures.
|
|
46
|
+
|
|
47
|
+
## Memory and Resource Considerations
|
|
48
|
+
|
|
49
|
+
### Temporary Record Usage
|
|
50
|
+
Use temporary records for batch validation scenarios to minimize database locks and improve overall performance.
|
|
51
|
+
|
|
52
|
+
### SetRange Before Validation
|
|
53
|
+
Apply appropriate filters before validation loops to reduce record set size and improve processing efficiency.
|
|
54
|
+
|
|
55
|
+
### Transaction Management
|
|
56
|
+
Group validation operations within appropriate transaction boundaries to minimize database round trips.
|
|
57
|
+
|
|
58
|
+
## Performance Testing Patterns
|
|
59
|
+
|
|
60
|
+
### Baseline Measurement
|
|
61
|
+
```al
|
|
62
|
+
procedure MeasureValidationPerformance(RecordCount: Integer)
|
|
63
|
+
var
|
|
64
|
+
Customer: Record Customer;
|
|
65
|
+
StartTime: Time;
|
|
66
|
+
EndTime: Time;
|
|
67
|
+
Duration: Duration;
|
|
68
|
+
begin
|
|
69
|
+
StartTime := Time();
|
|
70
|
+
|
|
71
|
+
if Customer.FindSet() then
|
|
72
|
+
repeat
|
|
73
|
+
Customer.Name.TestField();
|
|
74
|
+
Customer."Customer Posting Group".TestField();
|
|
75
|
+
until (Customer.Next() = 0) or (Customer.Count >= RecordCount);
|
|
76
|
+
|
|
77
|
+
EndTime := Time();
|
|
78
|
+
Duration := EndTime - StartTime;
|
|
79
|
+
Message('Validation time for %1 records: %2', RecordCount, Duration);
|
|
80
|
+
end;
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Comparative Analysis
|
|
84
|
+
Compare TestField performance against manual validation approaches to identify optimal patterns for specific scenarios.
|
|
85
|
+
|
|
86
|
+
## Integration with Other Performance Patterns
|
|
87
|
+
|
|
88
|
+
### SIFT Integration
|
|
89
|
+
TestField validation combined with SIFT-optimized queries provides efficient data validation patterns.
|
|
90
|
+
|
|
91
|
+
### Caching Strategies
|
|
92
|
+
Cache frequently validated lookup data to minimize database access during intensive validation scenarios.
|
|
93
|
+
|
|
94
|
+
### Parallel Processing
|
|
95
|
+
Consider parallel processing patterns for independent record validation in high-volume scenarios.
|
|
96
|
+
|
|
97
|
+
## Monitoring and Diagnostics
|
|
98
|
+
|
|
99
|
+
### Performance Counter Integration
|
|
100
|
+
Monitor TestField usage patterns in production environments to identify performance bottlenecks.
|
|
101
|
+
|
|
102
|
+
### Error Rate Analysis
|
|
103
|
+
Track validation error rates to optimize validation logic and improve user experience.
|
|
104
|
+
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Codeunit.Run() Error Handling Pattern"
|
|
3
|
+
domain: "eva-errors"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["codeunit-run", "error-handling", "transactions", "commit", "isolation"]
|
|
7
|
+
samples: "samples/codeunit-run-pattern.md"
|
|
8
|
+
related_topics:
|
|
9
|
+
- "try-function-usage.md"
|
|
10
|
+
- "testfield-error-handling.md"
|
|
11
|
+
---
|
|
12
|
+
# Codeunit.Run() Error Handling Pattern
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
The `if Codeunit.Run() then` pattern is a fundamental error handling mechanism in Business Central that enables transaction isolation and error recovery. Unlike try functions, this pattern allows write operations within its scope, making it essential for robust business process implementation.
|
|
17
|
+
|
|
18
|
+
**Core Principle**: Capturing the boolean result from Codeunit.Run() fundamentally changes its behavior—enabling isolated transactions with error suppression and recovery.
|
|
19
|
+
|
|
20
|
+
## How It Works
|
|
21
|
+
|
|
22
|
+
### Standard Codeunit.Run()
|
|
23
|
+
When you call `Codeunit.Run(CodeunitID)` without capturing the result:
|
|
24
|
+
- Executes in the current transaction context
|
|
25
|
+
- Errors propagate up and terminate execution
|
|
26
|
+
- No special transaction handling occurs
|
|
27
|
+
|
|
28
|
+
### Captured Result Pattern
|
|
29
|
+
When you call `if Codeunit.Run(CodeunitID) then`:
|
|
30
|
+
- A **new transaction** is started for the codeunit execution
|
|
31
|
+
- If the codeunit succeeds, the transaction is committed
|
|
32
|
+
- If the codeunit fails, the transaction is rolled back
|
|
33
|
+
- Errors are **suppressed**—they don't terminate execution
|
|
34
|
+
- The calling code continues regardless of success or failure
|
|
35
|
+
- The developer must capture errors using GetLastErrorText()
|
|
36
|
+
|
|
37
|
+
## Transaction Behavior
|
|
38
|
+
|
|
39
|
+
### Transaction Isolation
|
|
40
|
+
The captured Codeunit.Run() creates a transaction boundary:
|
|
41
|
+
- All database operations inside the codeunit are isolated
|
|
42
|
+
- Success commits all changes atomically
|
|
43
|
+
- Failure rolls back all changes completely
|
|
44
|
+
- The calling transaction is unaffected by the codeunit's outcome
|
|
45
|
+
|
|
46
|
+
### Critical Requirement: Commit Before Run
|
|
47
|
+
**Any open transaction MUST be committed before calling Codeunit.Run() with result capture.**
|
|
48
|
+
|
|
49
|
+
This is required because:
|
|
50
|
+
- The new transaction cannot begin while another is pending
|
|
51
|
+
- Uncommitted changes from the caller would be in an undefined state
|
|
52
|
+
- The runtime requires a clean transaction state
|
|
53
|
+
|
|
54
|
+
Failure to commit first will result in a runtime error.
|
|
55
|
+
|
|
56
|
+
## Implementation Guidelines
|
|
57
|
+
|
|
58
|
+
### Proper Placement
|
|
59
|
+
Use this pattern at logical boundaries in your processes:
|
|
60
|
+
- Between major process phases
|
|
61
|
+
- At the start of independent operations
|
|
62
|
+
- When calling potentially failing external integrations
|
|
63
|
+
- For batch processing individual records
|
|
64
|
+
|
|
65
|
+
### Avoid Mid-Process Usage
|
|
66
|
+
Do NOT use this pattern in the middle of a transaction sequence:
|
|
67
|
+
- Commit() has permanent effects—it cannot be undone
|
|
68
|
+
- Partial commits can leave data in inconsistent states
|
|
69
|
+
- Plan your process flow to have clean commit points
|
|
70
|
+
|
|
71
|
+
### Error Capture
|
|
72
|
+
Always capture and handle errors when using this pattern:
|
|
73
|
+
- Check the boolean result immediately
|
|
74
|
+
- Use GetLastErrorText() to get error details
|
|
75
|
+
- Log, notify, or take corrective action as appropriate
|
|
76
|
+
|
|
77
|
+
## Use Cases
|
|
78
|
+
|
|
79
|
+
### Batch Processing
|
|
80
|
+
Process multiple records where individual failures shouldn't stop the entire batch:
|
|
81
|
+
```
|
|
82
|
+
// Conceptual pattern:
|
|
83
|
+
foreach record in batch do begin
|
|
84
|
+
Commit(); // Clean slate for each record
|
|
85
|
+
if Codeunit.Run(ProcessorCodeunit, record) then
|
|
86
|
+
SuccessCount += 1
|
|
87
|
+
else begin
|
|
88
|
+
LogError(record, GetLastErrorText());
|
|
89
|
+
FailureCount += 1;
|
|
90
|
+
end;
|
|
91
|
+
end;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### External Integration Points
|
|
95
|
+
Isolate external system calls that include database updates:
|
|
96
|
+
- Prepare staging data
|
|
97
|
+
- Commit current transaction
|
|
98
|
+
- Run integration codeunit with capture
|
|
99
|
+
- Handle success or failure appropriately
|
|
100
|
+
|
|
101
|
+
### Optional Processing Steps
|
|
102
|
+
For process steps that should not block the main flow:
|
|
103
|
+
- Archive operations
|
|
104
|
+
- Notification sending
|
|
105
|
+
- Audit logging to external systems
|
|
106
|
+
|
|
107
|
+
## Comparison with Try Functions
|
|
108
|
+
|
|
109
|
+
| Aspect | Try Function | Codeunit.Run() Pattern |
|
|
110
|
+
|--------|--------------|------------------------|
|
|
111
|
+
| Write Operations | NOT allowed in call stack | Fully allowed |
|
|
112
|
+
| Transaction | Same transaction | New isolated transaction |
|
|
113
|
+
| Error Behavior | Caught, rolled back | Caught, isolated rollback |
|
|
114
|
+
| Commit Required | No | Yes, before the call |
|
|
115
|
+
| Use Case | External calls, validation | Business processes, batch |
|
|
116
|
+
|
|
117
|
+
## Best Practices
|
|
118
|
+
|
|
119
|
+
### Plan Transaction Boundaries
|
|
120
|
+
Design your process to have natural commit points before using this pattern. Don't force commits just to use Codeunit.Run().
|
|
121
|
+
|
|
122
|
+
### Create Dedicated Codeunits
|
|
123
|
+
Build codeunits specifically designed to be called with result capture:
|
|
124
|
+
- Self-contained logic
|
|
125
|
+
- Clear success/failure semantics
|
|
126
|
+
- Appropriate error messaging
|
|
127
|
+
|
|
128
|
+
### Document the Pattern
|
|
129
|
+
When using Codeunit.Run() with capture, add comments explaining:
|
|
130
|
+
- Why isolation is needed
|
|
131
|
+
- What the commit point means
|
|
132
|
+
- How failures are handled
|
|
133
|
+
|
|
134
|
+
### Error Handling is Mandatory
|
|
135
|
+
Never ignore the return value. The pattern's power comes from handling both success and failure cases appropriately.
|
|
136
|
+
|
|
137
|
+
## Common Mistakes
|
|
138
|
+
|
|
139
|
+
### Forgetting the Commit
|
|
140
|
+
Calling Codeunit.Run() with capture while a transaction is open causes runtime errors. Always commit first.
|
|
141
|
+
|
|
142
|
+
### Using Mid-Transaction
|
|
143
|
+
Forcing a Commit() in the middle of a logical transaction to use this pattern leads to data integrity issues.
|
|
144
|
+
|
|
145
|
+
### Ignoring Failures
|
|
146
|
+
Capturing the result but not acting on failures defeats the purpose and hides problems.
|
|
147
|
+
|
|
148
|
+
### Overusing the Pattern
|
|
149
|
+
Not every codeunit call needs isolation. Use this pattern when you specifically need independent transaction handling.
|
|
150
|
+
|
|
151
|
+
## Summary
|
|
152
|
+
|
|
153
|
+
The Codeunit.Run() pattern with result capture is essential for:
|
|
154
|
+
- Enabling error handling with database operations
|
|
155
|
+
- Isolating transactions for failure recovery
|
|
156
|
+
- Building robust batch and integration processes
|
|
157
|
+
|
|
158
|
+
Remember: **Commit() before, capture the result, handle errors explicitly.**
|
|
159
|
+
|