bc-code-intelligence-mcp 1.1.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 +107 -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 +441 -0
- package/dist/cli/bc-code-intel-cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +21 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +402 -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 +604 -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 +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +673 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/base-layer.d.ts +83 -0
- package/dist/layers/base-layer.d.ts.map +1 -0
- package/dist/layers/base-layer.js +166 -0
- package/dist/layers/base-layer.js.map +1 -0
- package/dist/layers/embedded-layer.d.ts +53 -0
- package/dist/layers/embedded-layer.d.ts.map +1 -0
- package/dist/layers/embedded-layer.js +238 -0
- package/dist/layers/embedded-layer.js.map +1 -0
- package/dist/layers/git-layer.d.ts +54 -0
- package/dist/layers/git-layer.d.ts.map +1 -0
- package/dist/layers/git-layer.js +369 -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 +129 -0
- package/dist/layers/layer-service.d.ts.map +1 -0
- package/dist/layers/layer-service.js +570 -0
- package/dist/layers/layer-service.js.map +1 -0
- package/dist/layers/project-layer.d.ts +50 -0
- package/dist/layers/project-layer.d.ts.map +1 -0
- package/dist/layers/project-layer.js +256 -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 +355 -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 +811 -0
- package/dist/services/code-analysis-service.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +91 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +370 -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 +408 -0
- package/dist/services/methodology-service.js.map +1 -0
- package/dist/services/workflow-service.d.ts +132 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +277 -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 +51 -0
- package/dist/streamlined-handlers.d.ts.map +1 -0
- package/dist/streamlined-handlers.js +287 -0
- package/dist/streamlined-handlers.js.map +1 -0
- package/dist/streamlined-tools.d.ts +316 -0
- package/dist/streamlined-tools.d.ts.map +1 -0
- package/dist/streamlined-tools.js +189 -0
- package/dist/streamlined-tools.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/types/bc-knowledge.d.ts +294 -0
- package/dist/types/bc-knowledge.d.ts.map +1 -0
- package/dist/types/bc-knowledge.js +44 -0
- package/dist/types/bc-knowledge.js.map +1 -0
- package/dist/types/config-types.d.ts +180 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +104 -0
- package/dist/types/config-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 +171 -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/persona-types.d.ts +77 -0
- package/dist/types/persona-types.d.ts.map +1 -0
- package/dist/types/persona-types.js +341 -0
- package/dist/types/persona-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 +69 -0
- package/embedded-knowledge/CONTRIBUTING.md +58 -0
- package/embedded-knowledge/LICENSE +21 -0
- package/embedded-knowledge/README.md +15 -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/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/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/subscriber-codeunit-size-optimization.md +66 -0
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +295 -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/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/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/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/testfield-error-handling.md +80 -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/quinn-tester/fielderror-validation-patterns.md +119 -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/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/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/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/package.json +74 -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,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "FieldError Default Message Logic"
|
|
3
|
+
domain: "eva-errors"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["fielderror", "default-messages", "field-state", "error-text"]
|
|
7
|
+
samples: "samples/fielderror-default-messages.md"
|
|
8
|
+
---
|
|
9
|
+
# FieldError Default Message Logic
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
When FieldError is called without the MsgText parameter, Business Central automatically generates contextual error messages based on field state and metadata. This default message logic provides consistent, informative error reporting with minimal code.
|
|
14
|
+
|
|
15
|
+
**Key Advantage**: Automatic message generation reduces code maintenance while providing rich contextual information.
|
|
16
|
+
|
|
17
|
+
## Default Message Construction
|
|
18
|
+
|
|
19
|
+
### Message Components
|
|
20
|
+
Business Central constructs default error messages using five key components:
|
|
21
|
+
1. **Field Caption**: From table field definition
|
|
22
|
+
2. **Current Value**: Field content (if not empty)
|
|
23
|
+
3. **Standard Text**: Context-appropriate default message
|
|
24
|
+
4. **Record Context**: Primary key fields for record identification
|
|
25
|
+
5. **Table Name**: Source table identification
|
|
26
|
+
|
|
27
|
+
### Field State Detection
|
|
28
|
+
|
|
29
|
+
#### Empty Field Messages
|
|
30
|
+
For empty fields, BC generates "must have a value" or "must be filled in" messages depending on field type. Code and Text fields use "must have a value" while Date fields use "must be filled in".
|
|
31
|
+
|
|
32
|
+
#### Non-Empty Field Messages
|
|
33
|
+
For fields containing data, BC generates "is not valid" messages that include the current field value, helping users identify exactly what data caused the validation failure.
|
|
34
|
+
|
|
35
|
+
#### Record Context Inclusion
|
|
36
|
+
All FieldError messages automatically include primary key field values to provide complete record identification, enabling users to locate the specific record causing the error.
|
|
37
|
+
|
|
38
|
+
## Default Message Patterns
|
|
39
|
+
|
|
40
|
+
### Standard Empty Field Pattern
|
|
41
|
+
Structure follows: "[Field Caption] must have a value in [Table Name] [Record Key]"
|
|
42
|
+
- **Use Case**: Required field validation
|
|
43
|
+
- **Common Scenario**: Setup tables, document headers, required configuration
|
|
44
|
+
|
|
45
|
+
### Standard Value Conflict Pattern
|
|
46
|
+
Structure follows: "[Field Caption] [Current Value] already exists in [Table Name] [Record Key]"
|
|
47
|
+
- **Use Case**: Uniqueness violations, duplicate detection
|
|
48
|
+
- **Common Scenario**: Primary key conflicts, unique index violations
|
|
49
|
+
|
|
50
|
+
### Context-Specific Patterns
|
|
51
|
+
Business Central applies different default messages based on:
|
|
52
|
+
- Field data type and properties
|
|
53
|
+
- Table relationships and constraints
|
|
54
|
+
- Current field state and validation context
|
|
55
|
+
|
|
56
|
+
## Strategic Decision Matrix
|
|
57
|
+
|
|
58
|
+
### Use Default Messages When
|
|
59
|
+
- **Standard validation scenarios**: Common empty/duplicate field errors
|
|
60
|
+
- **Consistent user experience desired**: Uniform error message formatting
|
|
61
|
+
- **Minimal maintenance required**: Automatic message updates with metadata changes
|
|
62
|
+
- **Field caption changes**: Messages automatically reflect caption updates
|
|
63
|
+
|
|
64
|
+
### Use Custom Messages When
|
|
65
|
+
- **Business rule violations**: Complex validation logic requiring explanation
|
|
66
|
+
- **Specific guidance needed**: Error messages should guide user resolution
|
|
67
|
+
- **Context-sensitive information**: Additional fields or calculations referenced
|
|
68
|
+
- **User experience optimization**: Tailored messages for specific user workflows
|
|
69
|
+
|
|
70
|
+
## Implementation Examples
|
|
71
|
+
|
|
72
|
+
### Leveraging Default Messages
|
|
73
|
+
Setup validation scenarios benefit from default messaging where standard "must have a value" text provides adequate user guidance without additional context.
|
|
74
|
+
|
|
75
|
+
### Mixed Default and Custom Messages
|
|
76
|
+
Combining default empty field detection with custom business logic provides optimal balance between consistency and specificity in error reporting.
|
|
77
|
+
|
|
78
|
+
### Record State-Aware Validation
|
|
79
|
+
Different validation approaches based on record state allow for appropriate use of default messages for standard scenarios while applying custom messages for complex business rules.
|
|
80
|
+
|
|
81
|
+
## Best Practices
|
|
82
|
+
|
|
83
|
+
### Default Message Optimization
|
|
84
|
+
- **Field captions**: Ensure field captions are user-friendly and descriptive
|
|
85
|
+
- **Table design**: Structure primary keys to provide meaningful record context
|
|
86
|
+
- **Consistent patterns**: Use default messages for standard validation scenarios
|
|
87
|
+
- **Message testing**: Verify default messages provide adequate user guidance
|
|
88
|
+
|
|
89
|
+
### Custom vs Default Decision Process
|
|
90
|
+
1. **Evaluate standard patterns**: Does default message adequately describe the problem?
|
|
91
|
+
2. **Consider user guidance**: Do users need additional context or resolution steps?
|
|
92
|
+
3. **Assess business rules**: Does the error involve complex business logic?
|
|
93
|
+
4. **Plan for maintenance**: Will custom messages require ongoing updates?
|
|
94
|
+
|
|
95
|
+
### Performance Considerations
|
|
96
|
+
- **Default message efficiency**: BC generates default messages efficiently
|
|
97
|
+
- **Custom message overhead**: Complex custom messages may impact performance
|
|
98
|
+
- **Field access patterns**: Default messages access field metadata, not additional data
|
|
99
|
+
- **Localization support**: Default messages automatically support multiple languages
|
|
100
|
+
|
|
101
|
+
## Message Quality Assessment
|
|
102
|
+
|
|
103
|
+
### Effective Default Messages
|
|
104
|
+
- **Clear field identification**: Field caption clearly identifies the problematic field
|
|
105
|
+
- **Sufficient context**: Record key provides adequate record identification
|
|
106
|
+
- **Consistent formatting**: Uniform message structure across application
|
|
107
|
+
- **Automatic updates**: Messages reflect metadata changes without code updates
|
|
108
|
+
|
|
109
|
+
### When Defaults Fall Short
|
|
110
|
+
- **Insufficient business context**: Generic messages don't explain business rules
|
|
111
|
+
- **Poor field captions**: Technical field names don't guide users effectively
|
|
112
|
+
- **Complex relationships**: Multi-field or cross-table validation scenarios
|
|
113
|
+
- **Specific user workflows**: Messages don't align with user task patterns
|
|
114
|
+
|
|
115
|
+
## Localization and Maintenance
|
|
116
|
+
|
|
117
|
+
### Automatic Benefits
|
|
118
|
+
- **Language support**: Default messages automatically support BC language packs
|
|
119
|
+
- **Metadata synchronization**: Messages update when field captions change
|
|
120
|
+
- **Consistent terminology**: Standard message patterns across entire application
|
|
121
|
+
- **Reduced translation overhead**: No custom message translation required
|
|
122
|
+
|
|
123
|
+
### Maintenance Advantages
|
|
124
|
+
- **Code simplification**: Fewer message strings to maintain
|
|
125
|
+
- **Automatic updates**: Metadata changes propagate to error messages
|
|
126
|
+
- **Quality consistency**: Standard message quality across all validation scenarios
|
|
127
|
+
- **Development efficiency**: Faster implementation of standard validation patterns
|
|
128
|
+
|
|
129
|
+
## Advanced Default Message Behavior
|
|
130
|
+
|
|
131
|
+
### Field Type Variations
|
|
132
|
+
Different field types generate contextually appropriate default messages. Boolean fields show "Yes/No" states, DateTime fields include full timestamp information, and GUID fields display the complete identifier.
|
|
133
|
+
|
|
134
|
+
### Multi-Language Considerations
|
|
135
|
+
Default messages automatically adapt to user language settings without requiring additional translation effort, making them ideal for international deployments.
|
|
136
|
+
|
|
137
|
+
### Record Key Complexity
|
|
138
|
+
Tables with complex primary keys automatically include all key fields in error context, providing comprehensive record identification regardless of table structure complexity.
|
|
139
|
+
|
|
140
|
+
## Implementation Guidelines
|
|
141
|
+
|
|
142
|
+
Default message logic works most effectively when field captions accurately represent user-facing terminology and primary key structures provide meaningful record identification. Strategic use of default messages reduces maintenance overhead while maintaining user experience quality.
|
|
143
|
+
|
|
144
|
+
For detailed implementation examples and working code samples demonstrating default message behavior across various field types and scenarios, see the companion AL code file.
|
|
145
|
+
|