@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,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
|
+
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "FieldError Message Construction Patterns"
|
|
3
|
+
domain: "eva-errors"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["fielderror", "error-messages", "user-experience", "localization", "message-formatting", "validation-feedback"]
|
|
7
|
+
prerequisites: ["fielderror-syntax-usage", "text-constants", "label-variables"]
|
|
8
|
+
samples: "samples/fielderror-message-construction.md"
|
|
9
|
+
related_topics: ["localization-patterns", "user-feedback-design", "validation-error-handling"]
|
|
10
|
+
---
|
|
11
|
+
# FieldError Message Construction Patterns
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
FieldError message construction combines automatic field context with custom messaging to provide meaningful validation feedback. Understanding how FieldError builds error messages enables developers to create user-friendly validation experiences that guide users toward successful data entry.
|
|
16
|
+
|
|
17
|
+
The method automatically includes field captions, current values, and record identification, while allowing custom text to provide specific business context and correction guidance.
|
|
18
|
+
|
|
19
|
+
**Key Principle**: Effective FieldError messages combine system-generated field context with business-specific guidance to create actionable user feedback.
|
|
20
|
+
|
|
21
|
+
## Automatic Message Components
|
|
22
|
+
|
|
23
|
+
### Field Context Integration
|
|
24
|
+
FieldError automatically includes the field caption from table metadata, ensuring consistent field identification across different user interface languages. The system retrieves localized field captions when multiple languages are configured.
|
|
25
|
+
|
|
26
|
+
The current field value is included in the error message, providing users with immediate context about the data that triggered the validation failure. This eliminates ambiguity about which specific value caused the problem.
|
|
27
|
+
|
|
28
|
+
### Record Identification
|
|
29
|
+
FieldError includes the table name and primary key values to identify the specific record where the validation failure occurred. This record context helps users navigate back to the problematic data when working with large datasets.
|
|
30
|
+
|
|
31
|
+
## Default Message Patterns
|
|
32
|
+
|
|
33
|
+
### Empty Field Messages
|
|
34
|
+
When a field is empty and FieldError is called without custom text, the system generates messages following the pattern: "You must specify [Field Caption] in [Table Caption] [Primary Key Values]". This pattern clearly indicates missing required data.
|
|
35
|
+
|
|
36
|
+
### Invalid Value Messages
|
|
37
|
+
When a field contains data and FieldError is called without custom text, the system generates messages following the pattern: "[Field Caption] must not be [Field Value] in [Table Caption] [Primary Key Values]". This pattern indicates that the current value is invalid.
|
|
38
|
+
|
|
39
|
+
## Custom Message Integration
|
|
40
|
+
|
|
41
|
+
### Text Parameter Usage
|
|
42
|
+
The optional text parameter allows developers to provide specific validation guidance while maintaining automatic field context. Custom text becomes the primary error description, with field context appended for complete user guidance.
|
|
43
|
+
|
|
44
|
+
### Message Formatting Rules
|
|
45
|
+
Custom FieldError text should not begin with capital letters, as the system automatically capitalizes the complete error message. This formatting rule ensures grammatically correct error messages when combined with automatic field context.
|
|
46
|
+
|
|
47
|
+
### Business Context Addition
|
|
48
|
+
Custom messages should provide business rule context that helps users understand why the validation failed and what action they need to take to correct the data.
|
|
49
|
+
|
|
50
|
+
## Localization Considerations
|
|
51
|
+
|
|
52
|
+
### Label Variable Integration
|
|
53
|
+
Use Label variables for custom FieldError text to support multilingual applications. Label variables automatically provide localized text based on user language preferences, ensuring consistent user experience across language configurations.
|
|
54
|
+
|
|
55
|
+
### Field Caption Localization
|
|
56
|
+
FieldError automatically uses localized field captions from table metadata, ensuring field names appear in the user's preferred language without additional development effort.
|
|
57
|
+
|
|
58
|
+
### Message Consistency
|
|
59
|
+
Maintain consistent message formatting patterns across the application by establishing standard Label variables for common validation scenarios.
|
|
60
|
+
|
|
61
|
+
## Message Construction Strategies
|
|
62
|
+
|
|
63
|
+
### Actionable Guidance
|
|
64
|
+
Construct custom messages that tell users not only what is wrong but also what they should do to fix the problem. Include specific value ranges, acceptable formats, or procedural steps when appropriate.
|
|
65
|
+
|
|
66
|
+
### Business Rule Explanation
|
|
67
|
+
When FieldError is triggered by complex business rules, provide enough context for users to understand the underlying business logic without overwhelming them with technical details.
|
|
68
|
+
|
|
69
|
+
### Progressive Information
|
|
70
|
+
For complex validation scenarios, consider whether a single FieldError message can adequately explain the problem, or if multiple validation steps with different error messages would provide better user guidance.
|
|
71
|
+
|
|
72
|
+
## Integration with Validation Logic
|
|
73
|
+
|
|
74
|
+
### OnValidate Trigger Usage
|
|
75
|
+
FieldError integrates seamlessly with OnValidate triggers, where business rule validation typically occurs. The method provides immediate feedback when field changes violate business constraints.
|
|
76
|
+
|
|
77
|
+
### Posting Routine Integration
|
|
78
|
+
Business Central's posting codeunits extensively use FieldError to provide specific feedback about data validation failures during complex business processes. This pattern ensures users receive targeted guidance about posting failures.
|
|
79
|
+
|
|
80
|
+
### Cross-Field Validation
|
|
81
|
+
When validation involves multiple fields, FieldError can focus user attention on the specific field that needs correction while explaining the relationship to other field values in the custom message text.
|
|
82
|
+
|
|
83
|
+
## User Experience Design
|
|
84
|
+
|
|
85
|
+
### Clear Problem Identification
|
|
86
|
+
Effective FieldError messages clearly identify what specific validation rule was violated, helping users understand the exact nature of the problem.
|
|
87
|
+
|
|
88
|
+
### Solution Guidance
|
|
89
|
+
Include positive instructions about correct data entry rather than just negative statements about what is wrong. Guide users toward successful completion of their data entry task.
|
|
90
|
+
|
|
91
|
+
### Context Preservation
|
|
92
|
+
Leverage FieldError's automatic context inclusion to help users maintain orientation within complex data entry scenarios, especially when working with large forms or multi-step processes.
|
|
93
|
+
|
|
94
|
+
## Common Message Patterns
|
|
95
|
+
|
|
96
|
+
### Range Validation
|
|
97
|
+
For numeric or date range validation, FieldError messages should specify the acceptable range and explain any business rationale for the constraints.
|
|
98
|
+
|
|
99
|
+
### Format Validation
|
|
100
|
+
For data format requirements, FieldError messages should provide examples of acceptable formats and explain any special formatting rules.
|
|
101
|
+
|
|
102
|
+
### Dependency Validation
|
|
103
|
+
For fields that depend on other field values, FieldError messages should explain the relationship and guide users toward consistent data entry.
|
|
104
|
+
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "FieldError Method Syntax and Behavior"
|
|
3
|
+
domain: "eva-errors"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["fielderror", "validation", "error-messages", "posting"]
|
|
7
|
+
samples: "samples/fielderror-syntax.md"
|
|
8
|
+
---
|
|
9
|
+
# FieldError Method Syntax and Behavior
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The FieldError method generates field-specific error messages with automatic field name inclusion and record context. Unlike TestField, FieldError assumes validation has already failed and focuses on error message generation rather than condition checking.
|
|
14
|
+
|
|
15
|
+
**Core Purpose**: Generate contextual error messages that clearly identify the problematic field and its current state.
|
|
16
|
+
|
|
17
|
+
## Method Signatures
|
|
18
|
+
|
|
19
|
+
### Basic Syntax
|
|
20
|
+
The FieldError method accepts two forms:
|
|
21
|
+
- `Record.FieldError(FieldNo: Integer)` - Uses default message generation
|
|
22
|
+
- `Record.FieldError(FieldNo: Integer, MsgText: Text)` - Uses custom message text
|
|
23
|
+
|
|
24
|
+
### Parameter Details
|
|
25
|
+
- **FieldNo**: Integer identifying the field causing the error
|
|
26
|
+
- **MsgText**: Optional custom error message text (follows lowercase convention)
|
|
27
|
+
|
|
28
|
+
## Behavioral Characteristics
|
|
29
|
+
|
|
30
|
+
### Automatic Context Building
|
|
31
|
+
FieldError automatically constructs error messages including:
|
|
32
|
+
- Field caption from table metadata
|
|
33
|
+
- Current field value (when not blank)
|
|
34
|
+
- Record identification (primary key values)
|
|
35
|
+
- Table name context
|
|
36
|
+
|
|
37
|
+
### Error Message Structure
|
|
38
|
+
Messages follow the pattern: `[Field Caption] [Current Value] [Custom Message] in [Table Name] [Record Key]`
|
|
39
|
+
|
|
40
|
+
Example output: "Document No. SO-001 must be unique in Sales Header Document Type='Order',No.='SO-001'"
|
|
41
|
+
|
|
42
|
+
## Implementation Patterns
|
|
43
|
+
|
|
44
|
+
### Standard Posting Codeunit Usage
|
|
45
|
+
FieldError is extensively used in standard BC posting codeunits (12 Gen. Jnl.-Post Line, 80 Sales-Post, 90 Purch.-Post) for validation failure reporting after conditions have been tested.
|
|
46
|
+
|
|
47
|
+
### Field Validation Context
|
|
48
|
+
Common usage involves testing business conditions first, then calling FieldError when validation fails. This pattern separates condition testing from error reporting.
|
|
49
|
+
|
|
50
|
+
## FieldError vs TestField Comparison
|
|
51
|
+
|
|
52
|
+
### Use FieldError When
|
|
53
|
+
- **Validation already failed**: Error condition has been determined
|
|
54
|
+
- **Custom error context needed**: Standard TestField message insufficient
|
|
55
|
+
- **Complex validation logic**: Multiple conditions or calculations involved
|
|
56
|
+
- **Posting routine errors**: Standard pattern in posting codeunits
|
|
57
|
+
|
|
58
|
+
### Use TestField When
|
|
59
|
+
- **Simple null/empty checks**: Standard "must have a value" scenarios
|
|
60
|
+
- **Direct field validation**: Single condition testing
|
|
61
|
+
- **Setup validation**: Configuration fields that must be populated
|
|
62
|
+
|
|
63
|
+
### Behavioral Differences
|
|
64
|
+
- **TestField**: Tests condition AND generates error
|
|
65
|
+
- **FieldError**: Only generates error (assumes condition already tested)
|
|
66
|
+
- **TestField**: Limited to empty/non-empty and value matching
|
|
67
|
+
- **FieldError**: Accepts any custom error message
|
|
68
|
+
|
|
69
|
+
## Best Practices
|
|
70
|
+
|
|
71
|
+
### Message Design
|
|
72
|
+
- **Be specific**: Describe exactly what's wrong and why
|
|
73
|
+
- **Include context**: Reference related fields or business rules when relevant
|
|
74
|
+
- **Provide guidance**: Suggest how to resolve the issue when possible
|
|
75
|
+
- **Follow conventions**: Start custom messages with lowercase letter
|
|
76
|
+
|
|
77
|
+
### Error Timing
|
|
78
|
+
- **Use after validation**: Don't duplicate condition checking
|
|
79
|
+
- **Fail fast**: Call FieldError immediately when error is detected
|
|
80
|
+
- **Single responsibility**: One FieldError per validation condition
|
|
81
|
+
|
|
82
|
+
### Performance Considerations
|
|
83
|
+
- **Field number constants**: Use field number constants, not field names
|
|
84
|
+
- **Message construction**: Keep custom messages concise but informative
|
|
85
|
+
- **Early exit**: Place FieldError calls after all condition checks
|
|
86
|
+
|
|
87
|
+
## Common Implementation Scenarios
|
|
88
|
+
|
|
89
|
+
### Required Field Validation
|
|
90
|
+
Use FieldError without custom message for standard empty field scenarios where default messaging is sufficient.
|
|
91
|
+
|
|
92
|
+
### Range Validation
|
|
93
|
+
Combine condition testing with FieldError for numeric range violations, providing specific boundary information in custom messages.
|
|
94
|
+
|
|
95
|
+
### Business Rule Violations
|
|
96
|
+
Apply FieldError for complex business logic failures, including cross-field dependencies and calculated validation scenarios.
|
|
97
|
+
|
|
98
|
+
### Cross-Field Dependencies
|
|
99
|
+
Validate relationships between fields using FieldError to identify the specific field causing the constraint violation.
|
|
100
|
+
|
|
101
|
+
## Anti-Patterns
|
|
102
|
+
|
|
103
|
+
### Avoid These Approaches
|
|
104
|
+
- **Redundant condition checking**: Don't test condition if already validated
|
|
105
|
+
- **Generic error messages**: Don't use FieldError for non-field-specific errors
|
|
106
|
+
- **Message duplication**: Don't repeat information already included automatically
|
|
107
|
+
- **Complex message logic**: Keep message construction simple and direct
|
|
108
|
+
|
|
109
|
+
## Usage Guidelines
|
|
110
|
+
|
|
111
|
+
FieldError is most effective when integrated into structured validation routines where business logic testing precedes error reporting. The method's strength lies in automatic context generation combined with flexible custom messaging.
|
|
112
|
+
|
|
113
|
+
For comprehensive implementation examples and working code samples, see the companion AL code file referenced below.
|
|
114
|
+
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# Codeunit.Run() Pattern Samples
|
|
2
|
+
|
|
3
|
+
## Basic Pattern: Isolated Processing
|
|
4
|
+
```al
|
|
5
|
+
procedure ProcessDocumentSafely(DocumentNo: Code[20]): Boolean
|
|
6
|
+
var
|
|
7
|
+
ProcessingCodeunit: Codeunit "Document Processor";
|
|
8
|
+
DocumentRec: Record "My Document";
|
|
9
|
+
begin
|
|
10
|
+
DocumentRec.Get(DocumentNo);
|
|
11
|
+
|
|
12
|
+
// CRITICAL: Commit any pending transaction first
|
|
13
|
+
Commit();
|
|
14
|
+
|
|
15
|
+
// Run with result capture - creates new transaction
|
|
16
|
+
if ProcessingCodeunit.Run(DocumentRec) then begin
|
|
17
|
+
Message('Document %1 processed successfully', DocumentNo);
|
|
18
|
+
exit(true);
|
|
19
|
+
end else begin
|
|
20
|
+
// Error captured, transaction rolled back
|
|
21
|
+
LogError(DocumentNo, GetLastErrorText());
|
|
22
|
+
Message('Processing failed: %1', GetLastErrorText());
|
|
23
|
+
exit(false);
|
|
24
|
+
end;
|
|
25
|
+
end;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Batch Processing with Continuation
|
|
29
|
+
```al
|
|
30
|
+
procedure ProcessSalesOrderBatch(var TempOrdersToProcess: Record "Sales Header" temporary)
|
|
31
|
+
var
|
|
32
|
+
PostingCodeunit: Codeunit "Sales-Post";
|
|
33
|
+
SalesHeader: Record "Sales Header";
|
|
34
|
+
SuccessCount: Integer;
|
|
35
|
+
FailureCount: Integer;
|
|
36
|
+
begin
|
|
37
|
+
if TempOrdersToProcess.FindSet() then
|
|
38
|
+
repeat
|
|
39
|
+
// Get fresh record for each iteration
|
|
40
|
+
SalesHeader.Get(TempOrdersToProcess."Document Type", TempOrdersToProcess."No.");
|
|
41
|
+
|
|
42
|
+
// Commit before each run - clean transaction boundary
|
|
43
|
+
Commit();
|
|
44
|
+
|
|
45
|
+
// Each posting runs in its own transaction
|
|
46
|
+
if PostingCodeunit.Run(SalesHeader) then
|
|
47
|
+
SuccessCount += 1
|
|
48
|
+
else begin
|
|
49
|
+
FailureCount += 1;
|
|
50
|
+
LogPostingError(SalesHeader."No.", GetLastErrorText());
|
|
51
|
+
end;
|
|
52
|
+
|
|
53
|
+
// Clear for next iteration
|
|
54
|
+
Clear(PostingCodeunit);
|
|
55
|
+
until TempOrdersToProcess.Next() = 0;
|
|
56
|
+
|
|
57
|
+
Message('Processed: %1 successful, %2 failed', SuccessCount, FailureCount);
|
|
58
|
+
end;
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Integration with Error Recovery
|
|
62
|
+
```al
|
|
63
|
+
procedure SyncInventoryWithRetry(ItemNo: Code[20]): Boolean
|
|
64
|
+
var
|
|
65
|
+
InventorySyncCodeunit: Codeunit "Inventory Sync";
|
|
66
|
+
Item: Record Item;
|
|
67
|
+
RetryCount: Integer;
|
|
68
|
+
MaxRetries: Integer;
|
|
69
|
+
begin
|
|
70
|
+
MaxRetries := 3;
|
|
71
|
+
Item.Get(ItemNo);
|
|
72
|
+
|
|
73
|
+
for RetryCount := 1 to MaxRetries do begin
|
|
74
|
+
// Must commit before each attempt
|
|
75
|
+
Commit();
|
|
76
|
+
|
|
77
|
+
if InventorySyncCodeunit.Run(Item) then
|
|
78
|
+
exit(true);
|
|
79
|
+
|
|
80
|
+
LogRetry(ItemNo, RetryCount, GetLastErrorText());
|
|
81
|
+
|
|
82
|
+
if RetryCount < MaxRetries then begin
|
|
83
|
+
Sleep(2000); // Wait before retry
|
|
84
|
+
Clear(InventorySyncCodeunit);
|
|
85
|
+
end;
|
|
86
|
+
end;
|
|
87
|
+
|
|
88
|
+
LogFinalFailure(ItemNo, 'Max retries exceeded');
|
|
89
|
+
exit(false);
|
|
90
|
+
end;
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## WRONG: Missing Commit
|
|
94
|
+
```al
|
|
95
|
+
// ❌ THIS WILL FAIL AT RUNTIME
|
|
96
|
+
procedure WrongPattern(CustomerNo: Code[20])
|
|
97
|
+
var
|
|
98
|
+
Customer: Record Customer;
|
|
99
|
+
ProcessCodeunit: Codeunit "Customer Processor";
|
|
100
|
+
begin
|
|
101
|
+
Customer.Get(CustomerNo);
|
|
102
|
+
Customer.Status := Customer.Status::Pending;
|
|
103
|
+
Customer.Modify(); // Transaction is now open
|
|
104
|
+
|
|
105
|
+
// ❌ ERROR: Cannot start new transaction with pending changes
|
|
106
|
+
if ProcessCodeunit.Run(Customer) then
|
|
107
|
+
Message('Success')
|
|
108
|
+
else
|
|
109
|
+
Message('Failed');
|
|
110
|
+
end;
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## CORRECT: Proper Commit Placement
|
|
114
|
+
```al
|
|
115
|
+
// ✅ CORRECT PATTERN
|
|
116
|
+
procedure CorrectPattern(CustomerNo: Code[20])
|
|
117
|
+
var
|
|
118
|
+
Customer: Record Customer;
|
|
119
|
+
ProcessCodeunit: Codeunit "Customer Processor";
|
|
120
|
+
begin
|
|
121
|
+
Customer.Get(CustomerNo);
|
|
122
|
+
Customer.Status := Customer.Status::Pending;
|
|
123
|
+
Customer.Modify();
|
|
124
|
+
|
|
125
|
+
// ✅ Commit pending changes first
|
|
126
|
+
Commit();
|
|
127
|
+
|
|
128
|
+
// Now safe to run with result capture
|
|
129
|
+
if ProcessCodeunit.Run(Customer) then
|
|
130
|
+
Message('Success')
|
|
131
|
+
else begin
|
|
132
|
+
Message('Processing failed: %1', GetLastErrorText());
|
|
133
|
+
// Note: The status change IS committed,
|
|
134
|
+
// only the processor's changes are rolled back
|
|
135
|
+
end;
|
|
136
|
+
end;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Optional Processing Steps
|
|
140
|
+
```al
|
|
141
|
+
procedure PostInvoiceWithNotification(var SalesHeader: Record "Sales Header")
|
|
142
|
+
var
|
|
143
|
+
PostingCodeunit: Codeunit "Sales-Post";
|
|
144
|
+
NotificationCodeunit: Codeunit "Customer Notifier";
|
|
145
|
+
begin
|
|
146
|
+
// Main posting - must succeed
|
|
147
|
+
PostingCodeunit.Run(SalesHeader); // No capture - errors propagate
|
|
148
|
+
|
|
149
|
+
// Notification is optional - failure shouldn't block posting
|
|
150
|
+
Commit(); // Commit the successful posting
|
|
151
|
+
|
|
152
|
+
if not NotificationCodeunit.Run(SalesHeader) then
|
|
153
|
+
// Log but don't fail - invoice is already posted
|
|
154
|
+
LogWarning('Customer notification failed: ' + GetLastErrorText());
|
|
155
|
+
end;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Archive Operation Pattern
|
|
159
|
+
```al
|
|
160
|
+
procedure ProcessAndArchive(var SourceRecord: Record "Source Document")
|
|
161
|
+
var
|
|
162
|
+
MainProcessor: Codeunit "Main Processor";
|
|
163
|
+
ArchiveProcessor: Codeunit "Archive Processor";
|
|
164
|
+
begin
|
|
165
|
+
// Main processing - required
|
|
166
|
+
MainProcessor.Run(SourceRecord);
|
|
167
|
+
|
|
168
|
+
// Archive - nice to have but not critical
|
|
169
|
+
Commit();
|
|
170
|
+
|
|
171
|
+
if not ArchiveProcessor.Run(SourceRecord) then begin
|
|
172
|
+
// Archive failed but main process succeeded
|
|
173
|
+
LogWarning('Archive failed for ' + SourceRecord."No." +
|
|
174
|
+
': ' + GetLastErrorText());
|
|
175
|
+
// Continue - don't fail the entire operation
|
|
176
|
+
end;
|
|
177
|
+
end;
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Comparison: Without vs With Result Capture
|
|
181
|
+
```al
|
|
182
|
+
// WITHOUT result capture - errors propagate
|
|
183
|
+
procedure StandardRun()
|
|
184
|
+
var
|
|
185
|
+
MyCodeunit: Codeunit "My Codeunit";
|
|
186
|
+
begin
|
|
187
|
+
MyCodeunit.Run(); // Error here stops everything
|
|
188
|
+
Message('This only runs if codeunit succeeded');
|
|
189
|
+
end;
|
|
190
|
+
|
|
191
|
+
// WITH result capture - errors are caught
|
|
192
|
+
procedure CapturedRun(): Boolean
|
|
193
|
+
var
|
|
194
|
+
MyCodeunit: Codeunit "My Codeunit";
|
|
195
|
+
begin
|
|
196
|
+
Commit(); // Required before captured run
|
|
197
|
+
|
|
198
|
+
if MyCodeunit.Run() then begin
|
|
199
|
+
Message('Codeunit succeeded');
|
|
200
|
+
exit(true);
|
|
201
|
+
end else begin
|
|
202
|
+
Message('Codeunit failed: ' + GetLastErrorText());
|
|
203
|
+
exit(false);
|
|
204
|
+
end;
|
|
205
|
+
// Execution continues either way
|
|
206
|
+
end;
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Multi-Step Process with Clean Boundaries
|
|
210
|
+
```al
|
|
211
|
+
procedure CompleteOrderFulfillment(OrderNo: Code[20])
|
|
212
|
+
var
|
|
213
|
+
Order: Record "Sales Header";
|
|
214
|
+
PickProcessor: Codeunit "Pick Processor";
|
|
215
|
+
ShipProcessor: Codeunit "Ship Processor";
|
|
216
|
+
InvoiceProcessor: Codeunit "Invoice Processor";
|
|
217
|
+
begin
|
|
218
|
+
Order.Get(Order."Document Type"::Order, OrderNo);
|
|
219
|
+
|
|
220
|
+
// Phase 1: Picking
|
|
221
|
+
Commit();
|
|
222
|
+
if not PickProcessor.Run(Order) then
|
|
223
|
+
Error('Pick failed: %1', GetLastErrorText());
|
|
224
|
+
|
|
225
|
+
// Phase 2: Shipping
|
|
226
|
+
Order.Get(Order."Document Type"::Order, OrderNo); // Refresh
|
|
227
|
+
Commit();
|
|
228
|
+
if not ShipProcessor.Run(Order) then
|
|
229
|
+
Error('Ship failed: %1', GetLastErrorText());
|
|
230
|
+
|
|
231
|
+
// Phase 3: Invoicing
|
|
232
|
+
Order.Get(Order."Document Type"::Order, OrderNo); // Refresh
|
|
233
|
+
Commit();
|
|
234
|
+
if not InvoiceProcessor.Run(Order) then
|
|
235
|
+
Error('Invoice failed: %1', GetLastErrorText());
|
|
236
|
+
|
|
237
|
+
Message('Order %1 fully fulfilled', OrderNo);
|
|
238
|
+
end;
|
|
239
|
+
```
|