@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,356 @@
|
|
|
1
|
+
# FieldError Default Messages - AL Code Sample
|
|
2
|
+
|
|
3
|
+
## Empty Field Default Messages
|
|
4
|
+
|
|
5
|
+
```al
|
|
6
|
+
table 50200 "Document Header"
|
|
7
|
+
{
|
|
8
|
+
fields
|
|
9
|
+
{
|
|
10
|
+
field(1; "Document Type"; Enum "Sales Document Type") { }
|
|
11
|
+
field(2; "Document No."; Code[20]) { }
|
|
12
|
+
field(3; "Customer No."; Code[20]) { }
|
|
13
|
+
field(10; "Posting Date"; Date) { }
|
|
14
|
+
field(20; "Amount"; Decimal) { }
|
|
15
|
+
field(30; "Currency Code"; Code[10]) { }
|
|
16
|
+
field(40; "Description"; Text[100]) { }
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
keys
|
|
20
|
+
{
|
|
21
|
+
key(PK; "Document Type", "Document No.") { Clustered = true; }
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
procedure DemonstrateEmptyFieldMessages()
|
|
25
|
+
begin
|
|
26
|
+
// For empty Code field - generates specific "must have a value" message
|
|
27
|
+
"Customer No." := '';
|
|
28
|
+
// Output: "Customer No. must have a value in Document Header Document Type='Order', Document No.='DOC001'."
|
|
29
|
+
FieldError("Customer No.");
|
|
30
|
+
|
|
31
|
+
// For zero Date field - generates specific "must be filled in" message
|
|
32
|
+
"Posting Date" := 0D;
|
|
33
|
+
// Output: "Posting Date must be filled in in Document Header Document Type='Order', Document No.='DOC001'."
|
|
34
|
+
FieldError("Posting Date");
|
|
35
|
+
|
|
36
|
+
// For zero Decimal field - generates "must not be 0" message
|
|
37
|
+
Amount := 0;
|
|
38
|
+
// Output: "Amount must not be 0 in Document Header Document Type='Order', Document No.='DOC001'."
|
|
39
|
+
FieldError(Amount);
|
|
40
|
+
|
|
41
|
+
// For empty Text field - generates "must have a value" message
|
|
42
|
+
Description := '';
|
|
43
|
+
// Output: "Description must have a value in Document Header Document Type='Order', Document No.='DOC001'."
|
|
44
|
+
FieldError(Description);
|
|
45
|
+
end;
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Non-Empty Field Default Messages
|
|
50
|
+
|
|
51
|
+
```al
|
|
52
|
+
table 50201 "Validation Examples"
|
|
53
|
+
{
|
|
54
|
+
fields
|
|
55
|
+
{
|
|
56
|
+
field(1; "Entry No."; Integer) { }
|
|
57
|
+
field(10; "Status"; Option) { OptionMembers = " ",Open,Released,Closed; }
|
|
58
|
+
field(20; "Item No."; Code[20]) { }
|
|
59
|
+
field(30; "Quantity"; Decimal) { }
|
|
60
|
+
field(40; "Unit Price"; Decimal) { }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
keys
|
|
64
|
+
{
|
|
65
|
+
key(PK; "Entry No.") { Clustered = true; }
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
procedure DemonstrateNonEmptyFieldMessages()
|
|
69
|
+
begin
|
|
70
|
+
"Entry No." := 1001;
|
|
71
|
+
"Item No." := 'ITEM001';
|
|
72
|
+
Quantity := 5.5;
|
|
73
|
+
"Unit Price" := 100.00;
|
|
74
|
+
Status := Status::Released;
|
|
75
|
+
|
|
76
|
+
// For non-empty Code field - generates "is not valid" message
|
|
77
|
+
// Output: "Item No. ITEM001 is not valid in Validation Examples Entry No.='1001'."
|
|
78
|
+
FieldError("Item No.");
|
|
79
|
+
|
|
80
|
+
// For non-zero Decimal field - generates "is not valid" message
|
|
81
|
+
// Output: "Quantity 5.5 is not valid in Validation Examples Entry No.='1001'."
|
|
82
|
+
FieldError(Quantity);
|
|
83
|
+
|
|
84
|
+
// For non-zero Option field - generates "is not valid" message
|
|
85
|
+
// Output: "Status Released is not valid in Validation Examples Entry No.='1001'."
|
|
86
|
+
FieldError(Status);
|
|
87
|
+
end;
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Record Context in Error Messages
|
|
92
|
+
|
|
93
|
+
```al
|
|
94
|
+
table 50202 "Customer Transaction"
|
|
95
|
+
{
|
|
96
|
+
fields
|
|
97
|
+
{
|
|
98
|
+
field(1; "Customer No."; Code[20]) { }
|
|
99
|
+
field(2; "Transaction Date"; Date) { }
|
|
100
|
+
field(3; "Transaction No."; Code[20]) { }
|
|
101
|
+
field(10; "Amount"; Decimal) { }
|
|
102
|
+
field(20; "Currency Code"; Code[10]) { }
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
keys
|
|
106
|
+
{
|
|
107
|
+
key(PK; "Customer No.", "Transaction Date", "Transaction No.") { Clustered = true; }
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
procedure DemonstrateRecordContextMessages()
|
|
111
|
+
begin
|
|
112
|
+
"Customer No." := 'CUST001';
|
|
113
|
+
"Transaction Date" := Today;
|
|
114
|
+
"Transaction No." := 'TXN001';
|
|
115
|
+
Amount := 0;
|
|
116
|
+
|
|
117
|
+
// BC automatically includes primary key fields in error message
|
|
118
|
+
// Output: "Amount must not be 0 in Customer Transaction Customer No.='CUST001', Transaction Date='01/28/25', Transaction No.='TXN001'."
|
|
119
|
+
FieldError(Amount);
|
|
120
|
+
|
|
121
|
+
// Even with custom message, record context is automatically included
|
|
122
|
+
// Output: "Amount cannot be zero for transactions in Customer Transaction Customer No.='CUST001', Transaction Date='01/28/25', Transaction No.='TXN001'."
|
|
123
|
+
FieldError(Amount, 'cannot be zero for transactions');
|
|
124
|
+
end;
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Default vs Custom Message Comparison
|
|
129
|
+
|
|
130
|
+
```al
|
|
131
|
+
codeunit 50200 "Message Comparison Examples"
|
|
132
|
+
{
|
|
133
|
+
procedure CompareDefaultAndCustomMessages()
|
|
134
|
+
var
|
|
135
|
+
SalesHeader: Record "Sales Header";
|
|
136
|
+
Customer: Record Customer;
|
|
137
|
+
begin
|
|
138
|
+
SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
|
|
139
|
+
SalesHeader."No." := 'SO001';
|
|
140
|
+
SalesHeader."Sell-to Customer No." := '';
|
|
141
|
+
|
|
142
|
+
// DEFAULT MESSAGE EXAMPLES
|
|
143
|
+
|
|
144
|
+
// Empty field default message
|
|
145
|
+
// "Sell-to Customer No. must have a value in Sales Header Document Type='Order', No.='SO001'."
|
|
146
|
+
// SalesHeader.FieldError("Sell-to Customer No.");
|
|
147
|
+
|
|
148
|
+
// Non-empty field default message
|
|
149
|
+
SalesHeader."Sell-to Customer No." := 'INVALID';
|
|
150
|
+
// "Sell-to Customer No. INVALID is not valid in Sales Header Document Type='Order', No.='SO001'."
|
|
151
|
+
// SalesHeader.FieldError("Sell-to Customer No.");
|
|
152
|
+
|
|
153
|
+
// CUSTOM MESSAGE EXAMPLES
|
|
154
|
+
|
|
155
|
+
// Custom message with empty field
|
|
156
|
+
SalesHeader."Sell-to Customer No." := '';
|
|
157
|
+
// "Sell-to Customer No. is required for sales orders in Sales Header Document Type='Order', No.='SO001'."
|
|
158
|
+
// SalesHeader.FieldError("Sell-to Customer No.", 'is required for sales orders');
|
|
159
|
+
|
|
160
|
+
// Custom message with non-empty field
|
|
161
|
+
SalesHeader."Sell-to Customer No." := 'BLOCKED';
|
|
162
|
+
// "Sell-to Customer No. customer is blocked in Sales Header Document Type='Order', No.='SO001'."
|
|
163
|
+
// SalesHeader.FieldError("Sell-to Customer No.", 'customer is blocked');
|
|
164
|
+
|
|
165
|
+
// Complex custom message with context
|
|
166
|
+
if not Customer.Get(SalesHeader."Sell-to Customer No.") then
|
|
167
|
+
// "Sell-to Customer No. does not exist in customer master in Sales Header Document Type='Order', No.='SO001'."
|
|
168
|
+
SalesHeader.FieldError("Sell-to Customer No.", 'does not exist in customer master');
|
|
169
|
+
end;
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Real-World Message Generation Scenarios
|
|
174
|
+
|
|
175
|
+
```al
|
|
176
|
+
codeunit 50201 "Real-World Validation Messages"
|
|
177
|
+
{
|
|
178
|
+
// Scenario 1: Document Processing Validation
|
|
179
|
+
procedure ValidateDocumentForPosting(var SalesHeader: Record "Sales Header")
|
|
180
|
+
begin
|
|
181
|
+
// Required field validations - using default messages for consistency
|
|
182
|
+
if SalesHeader."Sell-to Customer No." = '' then
|
|
183
|
+
// "Sell-to Customer No. must have a value in Sales Header..."
|
|
184
|
+
SalesHeader.FieldError("Sell-to Customer No.");
|
|
185
|
+
|
|
186
|
+
if SalesHeader."Posting Date" = 0D then
|
|
187
|
+
// "Posting Date must be filled in in Sales Header..."
|
|
188
|
+
SalesHeader.FieldError("Posting Date");
|
|
189
|
+
|
|
190
|
+
// Business rule validations - using custom messages for clarity
|
|
191
|
+
if SalesHeader."Posting Date" > WorkDate() + 30 then
|
|
192
|
+
// "Posting Date cannot be more than 30 days in future in Sales Header..."
|
|
193
|
+
SalesHeader.FieldError("Posting Date", 'cannot be more than 30 days in future');
|
|
194
|
+
end;
|
|
195
|
+
|
|
196
|
+
// Scenario 2: Setup Validation with Detailed Messages
|
|
197
|
+
procedure ValidateCustomerSetup(var Customer: Record Customer)
|
|
198
|
+
var
|
|
199
|
+
PostCode: Record "Post Code";
|
|
200
|
+
begin
|
|
201
|
+
// Default message for required field
|
|
202
|
+
if Customer."No." = '' then
|
|
203
|
+
// "No. must have a value in Customer..."
|
|
204
|
+
Customer.FieldError("No.");
|
|
205
|
+
|
|
206
|
+
// Custom message for business logic
|
|
207
|
+
if Customer."Credit Limit (LCY)" < 0 then
|
|
208
|
+
// "Credit Limit (LCY) cannot be negative in Customer No.='CUST001'."
|
|
209
|
+
Customer.FieldError("Credit Limit (LCY)", 'cannot be negative');
|
|
210
|
+
|
|
211
|
+
// Validation with lookup and detailed custom message
|
|
212
|
+
if (Customer."Post Code" <> '') and not PostCode.Get(Customer."Post Code", Customer.City) then
|
|
213
|
+
// "Post Code is not valid for the specified city in Customer No.='CUST001'."
|
|
214
|
+
Customer.FieldError("Post Code", 'is not valid for the specified city');
|
|
215
|
+
end;
|
|
216
|
+
|
|
217
|
+
// Scenario 3: Line Validation with Context
|
|
218
|
+
procedure ValidateSalesLine(var SalesLine: Record "Sales Line")
|
|
219
|
+
var
|
|
220
|
+
Item: Record Item;
|
|
221
|
+
AvailableInventory: Decimal;
|
|
222
|
+
begin
|
|
223
|
+
// Standard required field validation
|
|
224
|
+
if SalesLine."No." = '' then
|
|
225
|
+
// "No. must have a value in Sales Line Document Type='Order', Document No.='SO001', Line No.='10000'."
|
|
226
|
+
SalesLine.FieldError("No.");
|
|
227
|
+
|
|
228
|
+
// Business logic with calculated values in message
|
|
229
|
+
if SalesLine.Type = SalesLine.Type::Item then begin
|
|
230
|
+
Item.Get(SalesLine."No.");
|
|
231
|
+
Item.CalcFields(Inventory);
|
|
232
|
+
AvailableInventory := Item.Inventory;
|
|
233
|
+
|
|
234
|
+
if SalesLine.Quantity > AvailableInventory then
|
|
235
|
+
// "Quantity exceeds available inventory (50 units available) in Sales Line..."
|
|
236
|
+
SalesLine.FieldError(Quantity,
|
|
237
|
+
StrSubstNo('exceeds available inventory (%1 units available)', AvailableInventory));
|
|
238
|
+
end;
|
|
239
|
+
|
|
240
|
+
// Price validation with business context
|
|
241
|
+
if SalesLine."Unit Price" <= 0 then
|
|
242
|
+
// "Unit Price must be positive for sales transactions in Sales Line..."
|
|
243
|
+
SalesLine.FieldError("Unit Price", 'must be positive for sales transactions');
|
|
244
|
+
end;
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Message Formatting Rules and Patterns
|
|
249
|
+
|
|
250
|
+
```al
|
|
251
|
+
codeunit 50202 "Message Formatting Examples"
|
|
252
|
+
{
|
|
253
|
+
procedure DemonstrateFormattingRules()
|
|
254
|
+
var
|
|
255
|
+
Item: Record Item;
|
|
256
|
+
PurchaseLine: Record "Purchase Line";
|
|
257
|
+
begin
|
|
258
|
+
Item."No." := 'ITEM001';
|
|
259
|
+
|
|
260
|
+
// RULE 1: Default messages automatically include field value for non-empty fields
|
|
261
|
+
Item.Description := 'Invalid Description Content';
|
|
262
|
+
// "Description Invalid Description Content is not valid in Item No.='ITEM001'."
|
|
263
|
+
// Item.FieldError(Description);
|
|
264
|
+
|
|
265
|
+
// RULE 2: Custom messages start with lowercase (BC convention)
|
|
266
|
+
// CORRECT:
|
|
267
|
+
// "Description must not contain special characters in Item No.='ITEM001'."
|
|
268
|
+
// Item.FieldError(Description, 'must not contain special characters');
|
|
269
|
+
|
|
270
|
+
// INCORRECT (would still work but doesn't follow BC conventions):
|
|
271
|
+
// Item.FieldError(Description, 'Must not contain special characters');
|
|
272
|
+
|
|
273
|
+
// RULE 3: Record context automatically appended using primary key
|
|
274
|
+
PurchaseLine."Document Type" := PurchaseLine."Document Type"::Order;
|
|
275
|
+
PurchaseLine."Document No." := 'PO001';
|
|
276
|
+
PurchaseLine."Line No." := 10000;
|
|
277
|
+
PurchaseLine.Quantity := -5;
|
|
278
|
+
|
|
279
|
+
// "Quantity cannot be negative in Purchase Line Document Type='Order', Document No.='PO001', Line No.='10000'."
|
|
280
|
+
PurchaseLine.FieldError(Quantity, 'cannot be negative');
|
|
281
|
+
|
|
282
|
+
// RULE 4: Multiple primary key fields included in order
|
|
283
|
+
// All key fields shown in error context for complete record identification
|
|
284
|
+
end;
|
|
285
|
+
|
|
286
|
+
procedure DemonstrateMessageCustomization()
|
|
287
|
+
var
|
|
288
|
+
Customer: Record Customer;
|
|
289
|
+
CreditLimit: Decimal;
|
|
290
|
+
begin
|
|
291
|
+
Customer."No." := 'CUST001';
|
|
292
|
+
Customer."Credit Limit (LCY)" := 5000;
|
|
293
|
+
CreditLimit := 10000; // Required limit for this customer
|
|
294
|
+
|
|
295
|
+
// Pattern: Specific business context in custom messages
|
|
296
|
+
// "Credit Limit (LCY) insufficient for customer risk category (minimum 10000 required) in Customer No.='CUST001'."
|
|
297
|
+
Customer.FieldError("Credit Limit (LCY)",
|
|
298
|
+
StrSubstNo('insufficient for customer risk category (minimum %1 required)', CreditLimit));
|
|
299
|
+
|
|
300
|
+
// Pattern: Action guidance in custom messages
|
|
301
|
+
// "Credit Limit (LCY) requires manager approval for amounts above 50000 in Customer No.='CUST001'."
|
|
302
|
+
Customer.FieldError("Credit Limit (LCY)", 'requires manager approval for amounts above 50000');
|
|
303
|
+
|
|
304
|
+
// Pattern: Reference to related data in custom messages
|
|
305
|
+
// "Credit Limit (LCY) conflicts with existing payment terms (Net 60) in Customer No.='CUST001'."
|
|
306
|
+
Customer.FieldError("Credit Limit (LCY)", 'conflicts with existing payment terms (Net 60)');
|
|
307
|
+
end;
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
## Advanced Default Message Scenarios
|
|
312
|
+
|
|
313
|
+
```al
|
|
314
|
+
table 50203 "Advanced Message Examples"
|
|
315
|
+
{
|
|
316
|
+
fields
|
|
317
|
+
{
|
|
318
|
+
field(1; "Primary Key"; Code[20]) { }
|
|
319
|
+
field(10; "Boolean Field"; Boolean) { }
|
|
320
|
+
field(20; "DateTime Field"; DateTime) { }
|
|
321
|
+
field(30; "GUID Field"; Guid) { }
|
|
322
|
+
field(40; "Blob Field"; Blob) { }
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
procedure DemonstrateAdvancedDefaultMessages()
|
|
326
|
+
begin
|
|
327
|
+
"Primary Key" := 'TEST001';
|
|
328
|
+
|
|
329
|
+
// Boolean field default messages
|
|
330
|
+
"Boolean Field" := false;
|
|
331
|
+
// "Boolean Field No is not valid in Advanced Message Examples Primary Key='TEST001'."
|
|
332
|
+
// FieldError("Boolean Field");
|
|
333
|
+
|
|
334
|
+
"Boolean Field" := true;
|
|
335
|
+
// "Boolean Field Yes is not valid in Advanced Message Examples Primary Key='TEST001'."
|
|
336
|
+
// FieldError("Boolean Field");
|
|
337
|
+
|
|
338
|
+
// DateTime field default messages
|
|
339
|
+
"DateTime Field" := 0DT;
|
|
340
|
+
// "DateTime Field must be filled in in Advanced Message Examples Primary Key='TEST001'."
|
|
341
|
+
// FieldError("DateTime Field");
|
|
342
|
+
|
|
343
|
+
"DateTime Field" := CurrentDateTime;
|
|
344
|
+
// "DateTime Field 01/28/25 09:30:00 is not valid in Advanced Message Examples Primary Key='TEST001'."
|
|
345
|
+
// FieldError("DateTime Field");
|
|
346
|
+
|
|
347
|
+
// GUID field default messages
|
|
348
|
+
Clear("GUID Field");
|
|
349
|
+
// "GUID Field must have a value in Advanced Message Examples Primary Key='TEST001'."
|
|
350
|
+
// FieldError("GUID Field");
|
|
351
|
+
|
|
352
|
+
"GUID Field" := CreateGuid();
|
|
353
|
+
// "GUID Field {12345678-1234-1234-1234-123456789012} is not valid in Advanced Message Examples Primary Key='TEST001'."
|
|
354
|
+
// FieldError("GUID Field");
|
|
355
|
+
end;
|
|
356
|
+
}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# FieldError Method Syntax - AL Code Sample
|
|
2
|
+
|
|
3
|
+
## Basic FieldError Syntax
|
|
4
|
+
|
|
5
|
+
```al
|
|
6
|
+
// Basic FieldError syntax with automatic message
|
|
7
|
+
table 50100 "Sales Document"
|
|
8
|
+
{
|
|
9
|
+
fields
|
|
10
|
+
{
|
|
11
|
+
field(1; "Document Type"; Enum "Sales Document Type") { }
|
|
12
|
+
field(2; "Document No."; Code[20]) { }
|
|
13
|
+
field(3; "Sell-to Customer No."; Code[20]) { }
|
|
14
|
+
field(10; "Currency Code"; Code[10]) { }
|
|
15
|
+
field(20; "Amount"; Decimal) { }
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
trigger OnInsert()
|
|
19
|
+
begin
|
|
20
|
+
// Validate required fields before insert
|
|
21
|
+
ValidateRequiredFields();
|
|
22
|
+
end;
|
|
23
|
+
|
|
24
|
+
local procedure ValidateRequiredFields()
|
|
25
|
+
begin
|
|
26
|
+
// FieldError assumes validation already failed - no testing performed
|
|
27
|
+
if "Sell-to Customer No." = '' then
|
|
28
|
+
FieldError("Sell-to Customer No."); // Generates: "Sell-to Customer No. must have a value in Sales Document Document Type='Order', Document No.='SO001'."
|
|
29
|
+
|
|
30
|
+
if Amount <= 0 then
|
|
31
|
+
FieldError(Amount); // Generates: "Amount must not be 0 in Sales Document..."
|
|
32
|
+
end;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## FieldError vs TestField Comparison
|
|
37
|
+
|
|
38
|
+
```al
|
|
39
|
+
codeunit 50100 "Validation Examples"
|
|
40
|
+
{
|
|
41
|
+
procedure DemonstrateFieldErrorVsTestField()
|
|
42
|
+
var
|
|
43
|
+
SalesHeader: Record "Sales Header";
|
|
44
|
+
Customer: Record Customer;
|
|
45
|
+
begin
|
|
46
|
+
SalesHeader.Get(SalesHeader."Document Type"::Order, 'SO001');
|
|
47
|
+
|
|
48
|
+
// TestField approach - tests condition AND throws error if failed
|
|
49
|
+
SalesHeader.TestField("Sell-to Customer No."); // Tests if empty, then errors
|
|
50
|
+
SalesHeader.TestField(Amount); // Tests if zero, then errors
|
|
51
|
+
|
|
52
|
+
// FieldError approach - assumes you already validated the condition
|
|
53
|
+
if SalesHeader."Sell-to Customer No." = '' then
|
|
54
|
+
SalesHeader.FieldError("Sell-to Customer No."); // Only errors, no testing
|
|
55
|
+
|
|
56
|
+
if SalesHeader.Amount <= 0 then
|
|
57
|
+
SalesHeader.FieldError(Amount, 'must be positive'); // Custom message
|
|
58
|
+
|
|
59
|
+
// Practical usage: FieldError for complex validation logic
|
|
60
|
+
if not Customer.Get(SalesHeader."Sell-to Customer No.") then
|
|
61
|
+
SalesHeader.FieldError("Sell-to Customer No.", 'customer does not exist');
|
|
62
|
+
|
|
63
|
+
if Customer.Blocked <> Customer.Blocked::" " then
|
|
64
|
+
SalesHeader.FieldError("Sell-to Customer No.",
|
|
65
|
+
StrSubstNo('customer is blocked (%1)', Customer.Blocked));
|
|
66
|
+
end;
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Custom Message Examples
|
|
71
|
+
|
|
72
|
+
```al
|
|
73
|
+
table 50101 "Purchase Document"
|
|
74
|
+
{
|
|
75
|
+
fields
|
|
76
|
+
{
|
|
77
|
+
field(1; "Document Type"; Enum "Purchase Document Type") { }
|
|
78
|
+
field(2; "Document No."; Code[20]) { }
|
|
79
|
+
field(3; "Buy-from Vendor No."; Code[20]) { }
|
|
80
|
+
field(10; "Expected Receipt Date"; Date) { }
|
|
81
|
+
field(20; "Amount Including VAT"; Decimal) { }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
procedure ValidateBusinessRules()
|
|
85
|
+
var
|
|
86
|
+
Vendor: Record Vendor;
|
|
87
|
+
begin
|
|
88
|
+
// Custom message examples - note lowercase first word convention
|
|
89
|
+
if "Expected Receipt Date" < WorkDate() then
|
|
90
|
+
FieldError("Expected Receipt Date", 'cannot be in the past');
|
|
91
|
+
|
|
92
|
+
if "Amount Including VAT" > 10000 then
|
|
93
|
+
FieldError("Amount Including VAT", 'exceeds approval limit');
|
|
94
|
+
|
|
95
|
+
// Complex validation with detailed custom message
|
|
96
|
+
if Vendor.Get("Buy-from Vendor No.") then begin
|
|
97
|
+
if Vendor.Blocked <> Vendor.Blocked::" " then
|
|
98
|
+
FieldError("Buy-from Vendor No.",
|
|
99
|
+
StrSubstNo('vendor is blocked for %1', Vendor.Blocked));
|
|
100
|
+
|
|
101
|
+
if (Vendor."Payment Terms Code" = '') and ("Amount Including VAT" > 1000) then
|
|
102
|
+
FieldError("Buy-from Vendor No.",
|
|
103
|
+
'requires payment terms for amounts over 1000');
|
|
104
|
+
end else
|
|
105
|
+
FieldError("Buy-from Vendor No.", 'vendor does not exist');
|
|
106
|
+
end;
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Real-World Posting Codeunit Pattern
|
|
111
|
+
|
|
112
|
+
```al
|
|
113
|
+
codeunit 50102 "Sales Document Validation"
|
|
114
|
+
{
|
|
115
|
+
// Pattern used in standard BC posting codeunits (12, 80, 90)
|
|
116
|
+
|
|
117
|
+
procedure ValidateSalesDocument(var SalesHeader: Record "Sales Header")
|
|
118
|
+
begin
|
|
119
|
+
// Comprehensive validation before posting
|
|
120
|
+
with SalesHeader do begin
|
|
121
|
+
// Required field validation
|
|
122
|
+
if "Sell-to Customer No." = '' then
|
|
123
|
+
FieldError("Sell-to Customer No.");
|
|
124
|
+
|
|
125
|
+
if "Document Date" = 0D then
|
|
126
|
+
FieldError("Document Date");
|
|
127
|
+
|
|
128
|
+
// Business logic validation with custom messages
|
|
129
|
+
if "Posting Date" < "Document Date" then
|
|
130
|
+
FieldError("Posting Date", 'cannot be before document date');
|
|
131
|
+
|
|
132
|
+
if Status <> Status::Released then
|
|
133
|
+
FieldError(Status, 'must be Released before posting');
|
|
134
|
+
|
|
135
|
+
// Complex validation scenarios
|
|
136
|
+
ValidateCustomerCredit(SalesHeader);
|
|
137
|
+
ValidateDimensions(SalesHeader);
|
|
138
|
+
end;
|
|
139
|
+
end;
|
|
140
|
+
|
|
141
|
+
local procedure ValidateCustomerCredit(var SalesHeader: Record "Sales Header")
|
|
142
|
+
var
|
|
143
|
+
Customer: Record Customer;
|
|
144
|
+
CustLedgerEntry: Record "Cust. Ledger Entry";
|
|
145
|
+
RemainingAmount: Decimal;
|
|
146
|
+
begin
|
|
147
|
+
Customer.Get(SalesHeader."Sell-to Customer No.");
|
|
148
|
+
|
|
149
|
+
// Calculate customer's remaining credit
|
|
150
|
+
CustLedgerEntry.SetRange("Customer No.", Customer."No.");
|
|
151
|
+
CustLedgerEntry.SetRange(Open, true);
|
|
152
|
+
CustLedgerEntry.CalcSums("Remaining Amt. (LCY)");
|
|
153
|
+
RemainingAmount := CustLedgerEntry."Remaining Amt. (LCY)";
|
|
154
|
+
|
|
155
|
+
// Validate credit limit
|
|
156
|
+
if (Customer."Credit Limit (LCY)" > 0) and
|
|
157
|
+
(RemainingAmount + SalesHeader."Amount Including VAT" > Customer."Credit Limit (LCY)") then
|
|
158
|
+
SalesHeader.FieldError("Sell-to Customer No.",
|
|
159
|
+
StrSubstNo('credit limit exceeded. Available credit: %1',
|
|
160
|
+
Customer."Credit Limit (LCY)" - RemainingAmount));
|
|
161
|
+
end;
|
|
162
|
+
|
|
163
|
+
local procedure ValidateDimensions(var SalesHeader: Record "Sales Header")
|
|
164
|
+
var
|
|
165
|
+
DimMgt: Codeunit DimensionManagement;
|
|
166
|
+
DimSetID: Integer;
|
|
167
|
+
begin
|
|
168
|
+
DimSetID := SalesHeader."Dimension Set ID";
|
|
169
|
+
|
|
170
|
+
// Validate required dimensions
|
|
171
|
+
if not DimMgt.CheckDimIDComb(DimSetID) then
|
|
172
|
+
SalesHeader.FieldError("Dimension Set ID", 'invalid dimension combination');
|
|
173
|
+
|
|
174
|
+
// Validate dimension values against posting rules
|
|
175
|
+
if not DimMgt.CheckDimValuePosting(DimSetID, DATABASE::"Sales Header", SalesHeader."No.") then
|
|
176
|
+
SalesHeader.FieldError("Dimension Set ID", 'dimension values not allowed for posting');
|
|
177
|
+
end;
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Advanced FieldError Patterns
|
|
182
|
+
|
|
183
|
+
```al
|
|
184
|
+
codeunit 50103 "Advanced Validation Patterns"
|
|
185
|
+
{
|
|
186
|
+
// Pattern: Conditional validation with detailed context
|
|
187
|
+
procedure ValidateItemAvailability(var SalesLine: Record "Sales Line")
|
|
188
|
+
var
|
|
189
|
+
Item: Record Item;
|
|
190
|
+
AvailableQty: Decimal;
|
|
191
|
+
begin
|
|
192
|
+
if SalesLine.Type <> SalesLine.Type::Item then
|
|
193
|
+
exit; // Only validate items
|
|
194
|
+
|
|
195
|
+
Item.Get(SalesLine."No.");
|
|
196
|
+
Item.CalcFields(Inventory, "Reserved Qty. on Inventory");
|
|
197
|
+
AvailableQty := Item.Inventory - Item."Reserved Qty. on Inventory";
|
|
198
|
+
|
|
199
|
+
if SalesLine.Quantity > AvailableQty then
|
|
200
|
+
SalesLine.FieldError(Quantity,
|
|
201
|
+
StrSubstNo('exceeds available inventory (%1 available)', AvailableQty));
|
|
202
|
+
end;
|
|
203
|
+
|
|
204
|
+
// Pattern: Multi-field validation with specific field error
|
|
205
|
+
procedure ValidatePriceAndDiscount(var SalesLine: Record "Sales Line")
|
|
206
|
+
begin
|
|
207
|
+
// Validate that discount doesn't exceed unit price
|
|
208
|
+
if (SalesLine."Unit Price" > 0) and
|
|
209
|
+
(SalesLine."Line Discount Amount" > SalesLine."Unit Price" * SalesLine.Quantity) then
|
|
210
|
+
SalesLine.FieldError("Line Discount Amount",
|
|
211
|
+
'cannot exceed line amount');
|
|
212
|
+
|
|
213
|
+
// Validate price against minimum price rules
|
|
214
|
+
if SalesLine."Unit Price" < GetMinimumPrice(SalesLine) then
|
|
215
|
+
SalesLine.FieldError("Unit Price",
|
|
216
|
+
StrSubstNo('cannot be below minimum price (%1)', GetMinimumPrice(SalesLine)));
|
|
217
|
+
end;
|
|
218
|
+
|
|
219
|
+
local procedure GetMinimumPrice(SalesLine: Record "Sales Line"): Decimal
|
|
220
|
+
var
|
|
221
|
+
Item: Record Item;
|
|
222
|
+
begin
|
|
223
|
+
if Item.Get(SalesLine."No.") then
|
|
224
|
+
exit(Item."Unit Cost" * 1.1) // 10% markup minimum
|
|
225
|
+
else
|
|
226
|
+
exit(0);
|
|
227
|
+
end;
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Error Context and Message Output Examples
|
|
232
|
+
|
|
233
|
+
```al
|
|
234
|
+
// When this validation fails:
|
|
235
|
+
procedure ExampleValidationScenarios()
|
|
236
|
+
var
|
|
237
|
+
SalesHeader: Record "Sales Header";
|
|
238
|
+
begin
|
|
239
|
+
SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
|
|
240
|
+
SalesHeader."No." := 'SO001';
|
|
241
|
+
SalesHeader."Sell-to Customer No." := ''; // Empty value
|
|
242
|
+
|
|
243
|
+
// This will generate message:
|
|
244
|
+
// "Sell-to Customer No. must have a value in Sales Header Document Type='Order', No.='SO001'."
|
|
245
|
+
SalesHeader.FieldError("Sell-to Customer No.");
|
|
246
|
+
|
|
247
|
+
// With custom message:
|
|
248
|
+
// "Sell-to Customer No. is required for orders in Sales Header Document Type='Order', No.='SO001'."
|
|
249
|
+
SalesHeader.FieldError("Sell-to Customer No.", 'is required for orders');
|
|
250
|
+
|
|
251
|
+
// For non-empty field with custom message:
|
|
252
|
+
SalesHeader."Sell-to Customer No." := 'INVALID';
|
|
253
|
+
// "Sell-to Customer No. customer does not exist in Sales Header Document Type='Order', No.='SO001'."
|
|
254
|
+
SalesHeader.FieldError("Sell-to Customer No.", 'customer does not exist');
|
|
255
|
+
end;
|
|
256
|
+
```
|