bc-code-intelligence-mcp 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/cache/cache-manager.d.ts +95 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +328 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cli/bc-code-intel-cli.d.ts +9 -0
- package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
- package/dist/cli/bc-code-intel-cli.js +441 -0
- package/dist/cli/bc-code-intel-cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +21 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +402 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +84 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +604 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/test-config-loader.d.ts +10 -0
- package/dist/config/test-config-loader.d.ts.map +1 -0
- package/dist/config/test-config-loader.js +135 -0
- package/dist/config/test-config-loader.js.map +1 -0
- package/dist/config/test-enhanced-layer-service.d.ts +7 -0
- package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
- package/dist/config/test-enhanced-layer-service.js +104 -0
- package/dist/config/test-enhanced-layer-service.js.map +1 -0
- package/dist/config/test-git-layer.d.ts +7 -0
- package/dist/config/test-git-layer.d.ts.map +1 -0
- package/dist/config/test-git-layer.js +68 -0
- package/dist/config/test-git-layer.js.map +1 -0
- package/dist/dev/hot-reload.d.ts +91 -0
- package/dist/dev/hot-reload.d.ts.map +1 -0
- package/dist/dev/hot-reload.js +358 -0
- package/dist/dev/hot-reload.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +673 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/base-layer.d.ts +83 -0
- package/dist/layers/base-layer.d.ts.map +1 -0
- package/dist/layers/base-layer.js +166 -0
- package/dist/layers/base-layer.js.map +1 -0
- package/dist/layers/embedded-layer.d.ts +53 -0
- package/dist/layers/embedded-layer.d.ts.map +1 -0
- package/dist/layers/embedded-layer.js +238 -0
- package/dist/layers/embedded-layer.js.map +1 -0
- package/dist/layers/git-layer.d.ts +54 -0
- package/dist/layers/git-layer.d.ts.map +1 -0
- package/dist/layers/git-layer.js +369 -0
- package/dist/layers/git-layer.js.map +1 -0
- package/dist/layers/index.d.ts +12 -0
- package/dist/layers/index.d.ts.map +1 -0
- package/dist/layers/index.js +11 -0
- package/dist/layers/index.js.map +1 -0
- package/dist/layers/layer-service.d.ts +129 -0
- package/dist/layers/layer-service.d.ts.map +1 -0
- package/dist/layers/layer-service.js +570 -0
- package/dist/layers/layer-service.js.map +1 -0
- package/dist/layers/project-layer.d.ts +50 -0
- package/dist/layers/project-layer.d.ts.map +1 -0
- package/dist/layers/project-layer.js +256 -0
- package/dist/layers/project-layer.js.map +1 -0
- package/dist/monitoring/production-monitor.d.ts +148 -0
- package/dist/monitoring/production-monitor.d.ts.map +1 -0
- package/dist/monitoring/production-monitor.js +463 -0
- package/dist/monitoring/production-monitor.js.map +1 -0
- package/dist/performance/performance-monitor.d.ts +99 -0
- package/dist/performance/performance-monitor.d.ts.map +1 -0
- package/dist/performance/performance-monitor.js +253 -0
- package/dist/performance/performance-monitor.js.map +1 -0
- package/dist/sdk/bc-code-intel-client.d.ts +175 -0
- package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
- package/dist/sdk/bc-code-intel-client.js +380 -0
- package/dist/sdk/bc-code-intel-client.js.map +1 -0
- package/dist/search/intelligent-search.d.ts +97 -0
- package/dist/search/intelligent-search.d.ts.map +1 -0
- package/dist/search/intelligent-search.js +355 -0
- package/dist/search/intelligent-search.js.map +1 -0
- package/dist/security/access-control.d.ts +110 -0
- package/dist/security/access-control.d.ts.map +1 -0
- package/dist/security/access-control.js +353 -0
- package/dist/security/access-control.js.map +1 -0
- package/dist/services/code-analysis-service.d.ts +72 -0
- package/dist/services/code-analysis-service.d.ts.map +1 -0
- package/dist/services/code-analysis-service.js +811 -0
- package/dist/services/code-analysis-service.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +91 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +370 -0
- package/dist/services/knowledge-service.js.map +1 -0
- package/dist/services/methodology-service.d.ts +91 -0
- package/dist/services/methodology-service.d.ts.map +1 -0
- package/dist/services/methodology-service.js +408 -0
- package/dist/services/methodology-service.js.map +1 -0
- package/dist/services/workflow-service.d.ts +132 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +277 -0
- package/dist/services/workflow-service.js.map +1 -0
- package/dist/setup/post-install.d.ts +12 -0
- package/dist/setup/post-install.d.ts.map +1 -0
- package/dist/setup/post-install.js +81 -0
- package/dist/setup/post-install.js.map +1 -0
- package/dist/streamlined-handlers.d.ts +51 -0
- package/dist/streamlined-handlers.d.ts.map +1 -0
- package/dist/streamlined-handlers.js +287 -0
- package/dist/streamlined-handlers.js.map +1 -0
- package/dist/streamlined-tools.d.ts +316 -0
- package/dist/streamlined-tools.d.ts.map +1 -0
- package/dist/streamlined-tools.js +189 -0
- package/dist/streamlined-tools.js.map +1 -0
- package/dist/test-enhanced-mcp-server.d.ts +7 -0
- package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
- package/dist/test-enhanced-mcp-server.js +177 -0
- package/dist/test-enhanced-mcp-server.js.map +1 -0
- package/dist/types/bc-knowledge.d.ts +294 -0
- package/dist/types/bc-knowledge.d.ts.map +1 -0
- package/dist/types/bc-knowledge.js +44 -0
- package/dist/types/bc-knowledge.js.map +1 -0
- package/dist/types/config-types.d.ts +180 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +104 -0
- package/dist/types/config-types.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/layer-types.d.ts +171 -0
- package/dist/types/layer-types.d.ts.map +1 -0
- package/dist/types/layer-types.js +27 -0
- package/dist/types/layer-types.js.map +1 -0
- package/dist/types/persona-types.d.ts +77 -0
- package/dist/types/persona-types.d.ts.map +1 -0
- package/dist/types/persona-types.js +341 -0
- package/dist/types/persona-types.js.map +1 -0
- package/dist/utils/path-utils.d.ts +5 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +14 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/workflows/domain-workflows.d.ts +8 -0
- package/dist/workflows/domain-workflows.d.ts.map +1 -0
- package/dist/workflows/domain-workflows.js +360 -0
- package/dist/workflows/domain-workflows.js.map +1 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
- package/embedded-knowledge/AGENTS.md +69 -0
- package/embedded-knowledge/CONTRIBUTING.md +58 -0
- package/embedded-knowledge/LICENSE +21 -0
- package/embedded-knowledge/README.md +15 -0
- package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
- package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
- package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
- package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
- package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
- package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
- package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
- package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
- package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +295 -0
- package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
- package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
- package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
- package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
- package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
- package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
- package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
- package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
- package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
- package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
- package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
- package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
- package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
- package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
- package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
- package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
- package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
- package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
- package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
- package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
- package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
- package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
- package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
- package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
- package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
- package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
- package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
- package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
- package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
- package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
- package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
- package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
- package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
- package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
- package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
- package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
- package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
- package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
- package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
- package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
- package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
- package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
- package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
- package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
- package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
- package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
- package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
- package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
- package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
- package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
- package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
- package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
- package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
- package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
- package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
- package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
- package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
- package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
- package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
- package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
- package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
- package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
- package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
- package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
- package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
- package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
- package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
- package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
- package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
- package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
- package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
- package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
- package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
- package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
- package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
- package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
- package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
- package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
- package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
- package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
- package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
- package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
- package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
- package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
- package/embedded-knowledge/indexes/domain-catalog.json +106 -0
- package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
- package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
- package/embedded-knowledge/indexes/tags/access-control.json +1 -0
- package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
- package/embedded-knowledge/indexes/tags/actions.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced.json +1 -0
- package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
- package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
- package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
- package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
- package/embedded-knowledge/indexes/tags/analytics.json +1 -0
- package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
- package/embedded-knowledge/indexes/tags/api-design.json +1 -0
- package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
- package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
- package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
- package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
- package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
- package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
- package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/api.json +1 -0
- package/embedded-knowledge/indexes/tags/architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
- package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
- package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
- package/embedded-knowledge/indexes/tags/binding.json +1 -0
- package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/branching.json +1 -0
- package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
- package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
- package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
- package/embedded-knowledge/indexes/tags/business-process.json +1 -0
- package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
- package/embedded-knowledge/indexes/tags/caching.json +1 -0
- package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/case.json +1 -0
- package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
- package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
- package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
- package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
- package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
- package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
- package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/code-style.json +1 -0
- package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
- package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
- package/embedded-knowledge/indexes/tags/comments.json +1 -0
- package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
- package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional.json +1 -0
- package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
- package/embedded-knowledge/indexes/tags/consistency.json +1 -0
- package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
- package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
- package/embedded-knowledge/indexes/tags/correlation.json +1 -0
- package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/data-access.json +1 -0
- package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
- package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
- package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
- package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
- package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
- package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
- package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/database.json +1 -0
- package/embedded-knowledge/indexes/tags/debugging.json +1 -0
- package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
- package/embedded-knowledge/indexes/tags/declaration.json +1 -0
- package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
- package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
- package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
- package/embedded-knowledge/indexes/tags/deployment.json +1 -0
- package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
- package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
- package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
- package/embedded-knowledge/indexes/tags/documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
- package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
- package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
- package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
- package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
- package/embedded-knowledge/indexes/tags/error-text.json +1 -0
- package/embedded-knowledge/indexes/tags/etag.json +1 -0
- package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
- package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
- package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
- package/embedded-knowledge/indexes/tags/events.json +1 -0
- package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/extensions.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
- package/embedded-knowledge/indexes/tags/field-control.json +1 -0
- package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
- package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/field-state.json +1 -0
- package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
- package/embedded-knowledge/indexes/tags/fields.json +1 -0
- package/embedded-knowledge/indexes/tags/filtering.json +1 -0
- package/embedded-knowledge/indexes/tags/filters.json +1 -0
- package/embedded-knowledge/indexes/tags/formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/http-status.json +1 -0
- package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/implementation.json +1 -0
- package/embedded-knowledge/indexes/tags/indentation.json +1 -0
- package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
- package/embedded-knowledge/indexes/tags/indexing.json +1 -0
- package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
- package/embedded-knowledge/indexes/tags/integration.json +1 -0
- package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
- package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
- package/embedded-knowledge/indexes/tags/isolation.json +1 -0
- package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/keywords.json +1 -0
- package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
- package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
- package/embedded-knowledge/indexes/tags/localization.json +1 -0
- package/embedded-knowledge/indexes/tags/logging.json +1 -0
- package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
- package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/memory.json +1 -0
- package/embedded-knowledge/indexes/tags/message-design.json +1 -0
- package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
- package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
- package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
- package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
- package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
- package/embedded-knowledge/indexes/tags/naming.json +1 -0
- package/embedded-knowledge/indexes/tags/navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series.json +1 -0
- package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
- package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/odata.json +1 -0
- package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
- package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/operators.json +1 -0
- package/embedded-knowledge/indexes/tags/optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/order.json +1 -0
- package/embedded-knowledge/indexes/tags/organization.json +1 -0
- package/embedded-knowledge/indexes/tags/pages.json +1 -0
- package/embedded-knowledge/indexes/tags/parameters.json +1 -0
- package/embedded-knowledge/indexes/tags/patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/performance.json +1 -0
- package/embedded-knowledge/indexes/tags/placement.json +1 -0
- package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
- package/embedded-knowledge/indexes/tags/posting.json +1 -0
- package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
- package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
- package/embedded-knowledge/indexes/tags/privacy.json +1 -0
- package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
- package/embedded-knowledge/indexes/tags/production.json +1 -0
- package/embedded-knowledge/indexes/tags/productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
- package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
- package/embedded-knowledge/indexes/tags/ranges.json +1 -0
- package/embedded-knowledge/indexes/tags/readability.json +1 -0
- package/embedded-knowledge/indexes/tags/record-access.json +1 -0
- package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
- package/embedded-knowledge/indexes/tags/reference.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime.json +1 -0
- package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
- package/embedded-knowledge/indexes/tags/security.json +1 -0
- package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
- package/embedded-knowledge/indexes/tags/serialization.json +1 -0
- package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
- package/embedded-knowledge/indexes/tags/session.json +1 -0
- package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
- package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
- package/embedded-knowledge/indexes/tags/sift.json +1 -0
- package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
- package/embedded-knowledge/indexes/tags/spacing.json +1 -0
- package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
- package/embedded-knowledge/indexes/tags/standards.json +1 -0
- package/embedded-knowledge/indexes/tags/statements.json +1 -0
- package/embedded-knowledge/indexes/tags/streaming.json +1 -0
- package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
- package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/structure.json +1 -0
- package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
- package/embedded-knowledge/indexes/tags/switch.json +1 -0
- package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
- package/embedded-knowledge/indexes/tags/syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/systemid.json +1 -0
- package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
- package/embedded-knowledge/indexes/tags/table-events.json +1 -0
- package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
- package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
- package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
- package/embedded-knowledge/indexes/tags/template-method.json +1 -0
- package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
- package/embedded-knowledge/indexes/tags/testfield.json +1 -0
- package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
- package/embedded-knowledge/indexes/tags/triggers.json +1 -0
- package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
- package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
- package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
- package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/validation.json +1 -0
- package/embedded-knowledge/indexes/tags/variables.json +1 -0
- package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
- package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
- package/embedded-knowledge/indexes/tags/web-services.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
- package/embedded-knowledge/indexes/tags/workspace.json +1 -0
- package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
- package/embedded-knowledge/indexes/topic-relationships.json +128 -0
- package/embedded-knowledge/methodologies/index.json +81 -0
- package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
- package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
- package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
- package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
- package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
- package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
- package/embedded-knowledge/methodologies/phases/performance.md +211 -0
- package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
- package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
- package/embedded-knowledge/methodologies/phases/verification.md +146 -0
- package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
- package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
- package/package.json +74 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "FieldError in Validation Patterns"
|
|
3
|
+
domain: "quinn-tester"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["fielderror", "validation", "business-rules", "onvalidate", "posting-codeunits", "data-integrity"]
|
|
7
|
+
prerequisites: ["fielderror-syntax-usage", "field-triggers", "validation-fundamentals"]
|
|
8
|
+
related_topics: ["business-rule-validation", "posting-procedures", "data-integrity-patterns"]
|
|
9
|
+
samples: "samples/fielderror-validation-patterns.md"
|
|
10
|
+
---
|
|
11
|
+
# FieldError in Validation Patterns
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
FieldError serves as a critical component in Business Central validation patterns, providing immediate user feedback when business rules are violated. The method integrates seamlessly with AL validation triggers and posting procedures to enforce data integrity and guide users toward correct data entry.
|
|
16
|
+
|
|
17
|
+
Understanding how to effectively use FieldError within different validation contexts enables developers to create robust business applications with clear user guidance and consistent error handling.
|
|
18
|
+
|
|
19
|
+
**Validation Philosophy**: FieldError should provide specific, actionable feedback that helps users understand business rule violations and guides them toward successful data correction.
|
|
20
|
+
|
|
21
|
+
## OnValidate Trigger Integration
|
|
22
|
+
|
|
23
|
+
### Field-Level Business Rules
|
|
24
|
+
FieldError commonly appears in OnValidate triggers where field values must meet specific business criteria. The method provides immediate feedback when users enter data that violates established business rules, preventing invalid data from being saved.
|
|
25
|
+
|
|
26
|
+
### Cross-Field Validation
|
|
27
|
+
When field validity depends on other field values within the same record, FieldError helps identify which specific field needs correction while explaining the relationship to other data. This targeted approach guides users efficiently through complex validation scenarios.
|
|
28
|
+
|
|
29
|
+
### State-Dependent Validation
|
|
30
|
+
Fields often have different validation requirements based on record state or document status. FieldError enables context-sensitive validation that adapts to changing business requirements throughout the record lifecycle.
|
|
31
|
+
|
|
32
|
+
## Posting Procedure Validation
|
|
33
|
+
|
|
34
|
+
### Pre-Posting Validation
|
|
35
|
+
Business Central's posting codeunits use FieldError extensively to validate data completeness and business rule compliance before executing posting transactions. This pattern ensures that only valid business documents are posted to the system.
|
|
36
|
+
|
|
37
|
+
### Transaction Integrity
|
|
38
|
+
FieldError respects transaction boundaries during posting procedures, ensuring that validation failures trigger appropriate rollback behavior. This maintains database consistency when complex business processes encounter validation errors.
|
|
39
|
+
|
|
40
|
+
### Batch Processing Validation
|
|
41
|
+
In batch processing scenarios, FieldError provides specific feedback about which records and fields prevent successful processing, enabling users to correct data systematically.
|
|
42
|
+
|
|
43
|
+
## Business Rule Enforcement Patterns
|
|
44
|
+
|
|
45
|
+
### Mandatory Field Validation
|
|
46
|
+
FieldError enforces mandatory field requirements by providing clear feedback about missing data. Unlike TestField, FieldError allows custom messages that explain business context for field requirements.
|
|
47
|
+
|
|
48
|
+
### Value Range Validation
|
|
49
|
+
For fields with acceptable value ranges, FieldError messages can specify valid ranges and explain business rationale for constraints, helping users understand and comply with business rules.
|
|
50
|
+
|
|
51
|
+
### Format and Pattern Validation
|
|
52
|
+
When fields must conform to specific formats or patterns, FieldError provides targeted feedback about format requirements and examples of acceptable values.
|
|
53
|
+
|
|
54
|
+
## Complex Validation Scenarios
|
|
55
|
+
|
|
56
|
+
### Multi-Condition Validation
|
|
57
|
+
For validation scenarios involving multiple conditions, FieldError can be called after comprehensive business rule evaluation, providing specific feedback about which particular condition failed.
|
|
58
|
+
|
|
59
|
+
### Hierarchical Validation
|
|
60
|
+
In scenarios where field validation depends on parent-child relationships or hierarchical data structures, FieldError helps identify specific validation failures within complex data relationships.
|
|
61
|
+
|
|
62
|
+
### Workflow-Dependent Validation
|
|
63
|
+
Fields may have different validation requirements based on document workflow status or approval stages. FieldError enables dynamic validation that adapts to changing business process requirements.
|
|
64
|
+
|
|
65
|
+
## Integration with Validation Procedures
|
|
66
|
+
|
|
67
|
+
### Centralized Validation Logic
|
|
68
|
+
FieldError works effectively within dedicated validation procedures that encapsulate complex business rules. This approach separates validation logic from user interface code while maintaining clear error feedback.
|
|
69
|
+
|
|
70
|
+
### Reusable Validation Components
|
|
71
|
+
Validation procedures using FieldError can be reused across different objects and contexts, providing consistent business rule enforcement throughout the application.
|
|
72
|
+
|
|
73
|
+
### Layered Validation Architecture
|
|
74
|
+
FieldError supports layered validation architectures where basic field validation occurs at the table level, while complex business rule validation happens in specialized validation procedures.
|
|
75
|
+
|
|
76
|
+
## Error Context and User Guidance
|
|
77
|
+
|
|
78
|
+
### Business Process Context
|
|
79
|
+
FieldError messages should provide enough business context for users to understand why specific validation rules exist and how they relate to overall business processes.
|
|
80
|
+
|
|
81
|
+
### Correction Guidance
|
|
82
|
+
Effective FieldError usage includes specific instructions about how users can correct validation failures, reducing frustration and improving data entry efficiency.
|
|
83
|
+
|
|
84
|
+
### Workflow Integration
|
|
85
|
+
FieldError messages can guide users through complex business workflows by explaining next steps and prerequisites for successful process completion.
|
|
86
|
+
|
|
87
|
+
## Performance Considerations in Validation
|
|
88
|
+
|
|
89
|
+
### Validation Timing
|
|
90
|
+
FieldError should be called at appropriate validation phases to minimize performance impact while providing timely user feedback. Consider the cost of validation logic versus the benefit of early error detection.
|
|
91
|
+
|
|
92
|
+
### Batch Validation Efficiency
|
|
93
|
+
In batch processing scenarios, consider whether FieldError provides the most efficient error handling approach, or if collecting validation errors for batch reporting would be more appropriate.
|
|
94
|
+
|
|
95
|
+
### Database Impact
|
|
96
|
+
FieldError calls within validation procedures should consider database access patterns and transaction boundaries to maintain optimal performance during validation operations.
|
|
97
|
+
|
|
98
|
+
## Best Practices for Validation Integration
|
|
99
|
+
|
|
100
|
+
### Validation Separation
|
|
101
|
+
Separate business rule logic from error reporting logic to improve maintainability and testability of validation code. Use FieldError as the reporting mechanism after business rule evaluation.
|
|
102
|
+
|
|
103
|
+
### Consistent Error Standards
|
|
104
|
+
Establish consistent FieldError message formats and content standards across the application to provide predictable user experience during validation scenarios.
|
|
105
|
+
|
|
106
|
+
### Testing Validation Logic
|
|
107
|
+
Design validation procedures using FieldError to be easily testable, enabling thorough verification of business rule enforcement and error message accuracy.
|
|
108
|
+
|
|
109
|
+
## Common Validation Patterns
|
|
110
|
+
|
|
111
|
+
### Document Header Validation
|
|
112
|
+
Document headers often require comprehensive validation before processing. FieldError provides targeted feedback about specific header fields that prevent document progression.
|
|
113
|
+
|
|
114
|
+
### Line Item Validation
|
|
115
|
+
Individual line items within documents may have specific validation requirements. FieldError helps users identify and correct specific line validation issues without losing context of the overall document.
|
|
116
|
+
|
|
117
|
+
### Setup Table Validation
|
|
118
|
+
Configuration and setup tables use FieldError to ensure that system configuration data meets business requirements and maintains system integrity.
|
|
119
|
+
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "API Page Validation Rule Execution"
|
|
3
|
+
domain: "quinn-tester"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["validation", "business-rules", "data-integrity"]
|
|
7
|
+
samples: "samples/rule-execution.md"
|
|
8
|
+
---
|
|
9
|
+
# API Page Validation Rule Execution
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
API Page validation rule execution ensures data integrity and business rule compliance for data operations performed through OData endpoints. Understanding validation execution patterns is critical for implementing reliable API solutions that maintain data quality and business logic consistency.
|
|
14
|
+
|
|
15
|
+
Validation rules execute automatically during API operations, applying the same business logic that governs interactive user operations. This ensures consistent data validation regardless of the interface used to modify business data.
|
|
16
|
+
|
|
17
|
+
Proper validation implementation provides meaningful error feedback to API consumers while preventing invalid data from entering the system and maintaining overall data integrity standards.
|
|
18
|
+
|
|
19
|
+
## Validation Execution Timing
|
|
20
|
+
|
|
21
|
+
Validation rules execute at multiple points during API operations including field-level validation during data entry, record-level validation before commit operations, and cross-table validation for related data integrity.
|
|
22
|
+
|
|
23
|
+
Field validation occurs immediately when field values are modified through API operations, providing early detection of invalid data before complex business logic execution.
|
|
24
|
+
|
|
25
|
+
Record validation executes before database commit operations, ensuring all business rules are satisfied before persisting changes to the database system.
|
|
26
|
+
|
|
27
|
+
## Standard Table Validation
|
|
28
|
+
|
|
29
|
+
API Pages inherit all standard table validation logic including field constraints, table relations, and business logic implemented in table triggers and validation procedures.
|
|
30
|
+
|
|
31
|
+
Standard validations include data type validation, range checking, required field validation, and referential integrity constraints that ensure data consistency with existing business rules.
|
|
32
|
+
|
|
33
|
+
Custom table validation logic executes during API operations with the same behavior as interactive data entry, ensuring consistent business rule enforcement across all data entry mechanisms.
|
|
34
|
+
|
|
35
|
+
## Field-Level Validation Patterns
|
|
36
|
+
|
|
37
|
+
Individual field validation rules execute when field values are modified through PATCH or PUT operations, providing immediate feedback for invalid field values before processing related business logic.
|
|
38
|
+
|
|
39
|
+
Field validation includes format validation, range checking, lookup validation, and custom business logic specific to individual fields or field combinations.
|
|
40
|
+
|
|
41
|
+
Consider the user experience implications of field-level validation errors in API scenarios, providing clear error messages that help API consumers understand and correct validation issues.
|
|
42
|
+
|
|
43
|
+
## Cross-Field and Record Validation
|
|
44
|
+
|
|
45
|
+
Record-level validation rules execute after all field modifications are processed, enabling validation logic that depends on multiple field values or complex business rule combinations.
|
|
46
|
+
|
|
47
|
+
Cross-field validation ensures data consistency across related fields and implements business rules that require analysis of complete record state rather than individual field values.
|
|
48
|
+
|
|
49
|
+
Advanced validation scenarios may require access to related table data or external system information to complete validation rule execution.
|
|
50
|
+
|
|
51
|
+
## Related Table Validation
|
|
52
|
+
|
|
53
|
+
API Page operations may trigger validation rules in related tables when modifications affect data relationships or referential integrity constraints.
|
|
54
|
+
|
|
55
|
+
Related table validation ensures system-wide data integrity is maintained even when modifications originate from API operations rather than direct table access.
|
|
56
|
+
|
|
57
|
+
Consider the performance implications of related table validation, especially in scenarios involving complex table relationships or large data volumes.
|
|
58
|
+
|
|
59
|
+
## Custom Business Logic Integration
|
|
60
|
+
|
|
61
|
+
Custom business logic implemented in table triggers, page triggers, or specialized validation procedures executes during API operations with the same behavior as interactive operations.
|
|
62
|
+
|
|
63
|
+
Integration with custom business logic ensures API operations respect all business rules and constraints without requiring separate validation implementations for API scenarios.
|
|
64
|
+
|
|
65
|
+
Design custom validation logic with API operations in mind, ensuring error messages and validation feedback are appropriate for both interactive and programmatic consumers.
|
|
66
|
+
|
|
67
|
+
## Error Handling and Feedback
|
|
68
|
+
|
|
69
|
+
Validation errors result in appropriate HTTP status codes and error messages that provide meaningful feedback to API consumers about the nature of validation failures.
|
|
70
|
+
|
|
71
|
+
Error messages should provide sufficient information for API consumers to understand and correct validation issues without exposing sensitive system information or internal implementation details.
|
|
72
|
+
|
|
73
|
+
Consider implementing structured error responses that include field-specific validation errors and suggested corrective actions for common validation scenarios.
|
|
74
|
+
|
|
75
|
+
## Validation Performance Considerations
|
|
76
|
+
|
|
77
|
+
Complex validation rules can impact API operation performance, especially in high-volume scenarios where validation overhead becomes significant compared to basic data operations.
|
|
78
|
+
|
|
79
|
+
Monitor validation performance to identify optimization opportunities including caching validation results, optimizing validation logic, or restructuring validation approaches for better performance.
|
|
80
|
+
|
|
81
|
+
Balance validation thoroughness with performance requirements, ensuring critical business rules are enforced while maintaining acceptable API response times.
|
|
82
|
+
|
|
83
|
+
## Batch Operation Validation
|
|
84
|
+
|
|
85
|
+
Batch API operations require special consideration for validation rule execution, as validation errors in individual records may affect the entire batch operation depending on transaction and error handling strategies.
|
|
86
|
+
|
|
87
|
+
Implement appropriate error handling for batch scenarios including partial success scenarios, rollback strategies, and error reporting that identifies specific validation failures within batch operations.
|
|
88
|
+
|
|
89
|
+
Consider the business impact of validation failures in batch operations and design appropriate handling strategies that balance data integrity requirements with operational efficiency.
|
|
90
|
+
|
|
91
|
+
## Integration Testing Strategies
|
|
92
|
+
|
|
93
|
+
Implement comprehensive testing for validation rule execution in API scenarios, including positive validation cases, negative validation cases, and edge cases that may not occur in interactive usage.
|
|
94
|
+
|
|
95
|
+
Test validation behavior across different API operation types including creation, modification, and deletion operations to ensure consistent validation enforcement.
|
|
96
|
+
|
|
97
|
+
Validate error handling and feedback mechanisms to ensure API consumers receive appropriate information for resolving validation issues.
|
|
98
|
+
|
|
99
|
+
## Security and Validation
|
|
100
|
+
|
|
101
|
+
Validation rules may include security-related constraints that prevent unauthorized data modifications or enforce data access restrictions based on user context or business rules.
|
|
102
|
+
|
|
103
|
+
Ensure validation logic properly integrates with BC security systems to prevent security bypass through API operations while maintaining appropriate functionality for legitimate use cases.
|
|
104
|
+
|
|
105
|
+
Consider the security implications of validation error messages, ensuring they provide helpful feedback without exposing sensitive information that could be exploited by unauthorized users.
|
|
106
|
+
|
|
107
|
+
## Documentation and Communication
|
|
108
|
+
|
|
109
|
+
Document validation behavior for API consumers including common validation scenarios, error message formats, and recommended approaches for handling validation failures in client applications.
|
|
110
|
+
|
|
111
|
+
Provide clear guidance on validation requirements during API integration development to help API consumers implement appropriate error handling and data validation strategies.
|
|
112
|
+
|
|
113
|
+
Maintain documentation consistency between interactive validation behavior and API validation behavior to ensure developers have accurate expectations for validation rule execution.
|
|
114
|
+
|
|
115
|
+
## Best Practices
|
|
116
|
+
|
|
117
|
+
Design validation rules with both interactive and API usage in mind, ensuring validation logic provides appropriate feedback and behavior for different consumption scenarios.
|
|
118
|
+
|
|
119
|
+
Implement comprehensive error handling for validation scenarios including graceful degradation, meaningful error messages, and appropriate HTTP status codes for different validation failure types.
|
|
120
|
+
|
|
121
|
+
Monitor validation rule performance and effectiveness in API scenarios, identifying optimization opportunities and ensuring validation rules continue to meet business requirements over time.
|
|
122
|
+
|
|
123
|
+
Test validation behavior thoroughly across different API usage patterns and data scenarios to ensure robust validation enforcement that maintains data integrity without compromising API usability.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Case Statement Error Handling - AL Code Samples
|
|
2
|
+
|
|
3
|
+
## Basic Error Handling Pattern
|
|
4
|
+
|
|
5
|
+
```al
|
|
6
|
+
procedure ProcessOrderStatus(OrderStatus: Enum "Sales Document Status")
|
|
7
|
+
begin
|
|
8
|
+
case OrderStatus of
|
|
9
|
+
OrderStatus::Open:
|
|
10
|
+
ProcessOpenOrder();
|
|
11
|
+
OrderStatus::Released:
|
|
12
|
+
ProcessReleasedOrder();
|
|
13
|
+
OrderStatus::"Pending Approval":
|
|
14
|
+
ProcessPendingOrder();
|
|
15
|
+
else
|
|
16
|
+
Error('Unsupported order status: %1', OrderStatus);
|
|
17
|
+
end;
|
|
18
|
+
end;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Safe Processing with TryFunction
|
|
22
|
+
|
|
23
|
+
```al
|
|
24
|
+
[TryFunction]
|
|
25
|
+
procedure ProcessOrderStatusSafe(OrderStatus: Enum "Sales Document Status"): Boolean
|
|
26
|
+
begin
|
|
27
|
+
case OrderStatus of
|
|
28
|
+
OrderStatus::Open:
|
|
29
|
+
exit(TryProcessOpenOrder());
|
|
30
|
+
OrderStatus::Released:
|
|
31
|
+
exit(TryProcessReleasedOrder());
|
|
32
|
+
else
|
|
33
|
+
exit(false);
|
|
34
|
+
end;
|
|
35
|
+
end;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Exception Recovery Pattern
|
|
39
|
+
|
|
40
|
+
```al
|
|
41
|
+
procedure ProcessWithRecovery(ProcessingType: Text; MaxAttempts: Integer)
|
|
42
|
+
var
|
|
43
|
+
Attempts: Integer;
|
|
44
|
+
Success: Boolean;
|
|
45
|
+
begin
|
|
46
|
+
repeat
|
|
47
|
+
Attempts += 1;
|
|
48
|
+
case ProcessingType of
|
|
49
|
+
'STANDARD':
|
|
50
|
+
Success := TryStandardProcessing();
|
|
51
|
+
'FALLBACK':
|
|
52
|
+
Success := TryFallbackProcessing();
|
|
53
|
+
else
|
|
54
|
+
Success := false;
|
|
55
|
+
end;
|
|
56
|
+
|
|
57
|
+
if not Success and (Attempts < MaxAttempts) then
|
|
58
|
+
Sleep(1000);
|
|
59
|
+
until Success or (Attempts >= MaxAttempts);
|
|
60
|
+
|
|
61
|
+
if not Success then
|
|
62
|
+
Error('Failed after %1 attempts', MaxAttempts);
|
|
63
|
+
end;
|
|
64
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# FieldError Message Construction Examples
|
|
2
|
+
|
|
3
|
+
## Descriptive Error Messages
|
|
4
|
+
```al
|
|
5
|
+
trigger OnValidate()
|
|
6
|
+
begin
|
|
7
|
+
if "Unit Price" < 0 then
|
|
8
|
+
FieldError("Unit Price", 'Unit price cannot be negative. Please enter a positive value.');
|
|
9
|
+
|
|
10
|
+
if ("Discount %" < 0) or ("Discount %" > 100) then
|
|
11
|
+
FieldError("Discount %", 'Discount percentage must be between 0 and 100.');
|
|
12
|
+
end;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Context-Aware Messages
|
|
16
|
+
```al
|
|
17
|
+
procedure ValidateItemForLocation()
|
|
18
|
+
begin
|
|
19
|
+
Item.Get("Item No.");
|
|
20
|
+
Location.Get("Location Code");
|
|
21
|
+
|
|
22
|
+
if not Location."Allow Negative Inventory" and (CalculateAvailableQty() < Quantity) then
|
|
23
|
+
FieldError(Quantity, StrSubstNo('Insufficient inventory at location %1. Available: %2, Required: %3',
|
|
24
|
+
"Location Code", CalculateAvailableQty(), Quantity));
|
|
25
|
+
end;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Business Rule Explanations
|
|
29
|
+
```al
|
|
30
|
+
trigger OnValidate()
|
|
31
|
+
var
|
|
32
|
+
SalesSetup: Record "Sales & Receivables Setup";
|
|
33
|
+
begin
|
|
34
|
+
SalesSetup.Get();
|
|
35
|
+
|
|
36
|
+
if SalesSetup."Credit Warnings" = SalesSetup."Credit Warnings"::"No Warning" then
|
|
37
|
+
exit;
|
|
38
|
+
|
|
39
|
+
Customer.Get("Sell-to Customer No.");
|
|
40
|
+
Customer.CalcFields("Balance (LCY)");
|
|
41
|
+
|
|
42
|
+
if Customer."Balance (LCY)" > Customer."Credit Limit (LCY)" then
|
|
43
|
+
FieldError("Sell-to Customer No.",
|
|
44
|
+
StrSubstNo('Customer %1 exceeds credit limit. Current balance: %2, Credit limit: %3. Please contact credit department.',
|
|
45
|
+
Customer.Name, Customer."Balance (LCY)", Customer."Credit Limit (LCY)"));
|
|
46
|
+
end;
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Corrective Action Guidance
|
|
50
|
+
```al
|
|
51
|
+
procedure ValidateShippingSetup()
|
|
52
|
+
begin
|
|
53
|
+
if "Shipment Method Code" = '' then
|
|
54
|
+
FieldError("Shipment Method Code", 'Shipment method is required. Select a method from the dropdown or create a new one in Shipment Methods setup.');
|
|
55
|
+
|
|
56
|
+
if ("Shipping Agent Code" <> '') and ("Shipping Agent Service Code" = '') then
|
|
57
|
+
FieldError("Shipping Agent Service Code",
|
|
58
|
+
'Service code is required when shipping agent is specified. Use the lookup to select an available service.');
|
|
59
|
+
end;
|
|
60
|
+
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# FieldError Validation Patterns
|
|
2
|
+
|
|
3
|
+
## OnValidate Trigger Integration
|
|
4
|
+
```al
|
|
5
|
+
trigger OnValidate()
|
|
6
|
+
begin
|
|
7
|
+
if "Starting Date" > "Ending Date" then
|
|
8
|
+
FieldError("Starting Date", 'Starting date must be earlier than or equal to ending date.');
|
|
9
|
+
|
|
10
|
+
if ("Starting Date" < WorkDate()) and ("Document Status" = "Document Status"::Draft) then
|
|
11
|
+
FieldError("Starting Date", 'Starting date cannot be in the past for draft documents.');
|
|
12
|
+
end;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Cross-Field Validation
|
|
16
|
+
```al
|
|
17
|
+
trigger OnValidate()
|
|
18
|
+
var
|
|
19
|
+
Item: Record Item;
|
|
20
|
+
begin
|
|
21
|
+
if "Item No." <> '' then begin
|
|
22
|
+
Item.Get("Item No.");
|
|
23
|
+
|
|
24
|
+
if (Item.Type = Item.Type::Service) and ("Location Code" <> '') then
|
|
25
|
+
FieldError("Location Code", 'Location cannot be specified for service items.');
|
|
26
|
+
|
|
27
|
+
if (Item."Item Tracking Code" <> '') and ("Lot No." = '') and ("Serial No." = '') then
|
|
28
|
+
FieldError("Lot No.", 'Either lot number or serial number must be specified for tracked items.');
|
|
29
|
+
end;
|
|
30
|
+
end;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Business Rule Enforcement
|
|
34
|
+
```al
|
|
35
|
+
procedure ValidateCustomerCreditLimit()
|
|
36
|
+
var
|
|
37
|
+
Customer: Record Customer;
|
|
38
|
+
CustomerLedgerEntry: Record "Cust. Ledger Entry";
|
|
39
|
+
OutstandingAmount: Decimal;
|
|
40
|
+
begin
|
|
41
|
+
Customer.Get("Customer No.");
|
|
42
|
+
|
|
43
|
+
if Customer."Credit Limit (LCY)" = 0 then
|
|
44
|
+
exit; // No credit limit enforced
|
|
45
|
+
|
|
46
|
+
CustomerLedgerEntry.SetRange("Customer No.", "Customer No.");
|
|
47
|
+
CustomerLedgerEntry.SetRange(Open, true);
|
|
48
|
+
CustomerLedgerEntry.CalcSums("Remaining Amt. (LCY)");
|
|
49
|
+
OutstandingAmount := CustomerLedgerEntry."Remaining Amt. (LCY)";
|
|
50
|
+
|
|
51
|
+
if OutstandingAmount + "Amount Including VAT" > Customer."Credit Limit (LCY)" then
|
|
52
|
+
FieldError("Amount Including VAT",
|
|
53
|
+
StrSubstNo('Transaction exceeds credit limit. Outstanding: %1, Credit Limit: %2, This Transaction: %3',
|
|
54
|
+
OutstandingAmount, Customer."Credit Limit (LCY)", "Amount Including VAT"));
|
|
55
|
+
end;
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Posting Procedure Validation
|
|
59
|
+
```al
|
|
60
|
+
procedure ValidateForPosting()
|
|
61
|
+
begin
|
|
62
|
+
TestField("Document Type");
|
|
63
|
+
TestField("No.");
|
|
64
|
+
|
|
65
|
+
case "Document Type" of
|
|
66
|
+
"Document Type"::Quote:
|
|
67
|
+
FieldError("Document Type", 'Quotes cannot be posted. Convert to order or invoice first.');
|
|
68
|
+
"Document Type"::Order:
|
|
69
|
+
ValidateOrderForPosting();
|
|
70
|
+
"Document Type"::Invoice:
|
|
71
|
+
ValidateInvoiceForPosting();
|
|
72
|
+
end;
|
|
73
|
+
end;
|
|
74
|
+
|
|
75
|
+
local procedure ValidateOrderForPosting()
|
|
76
|
+
begin
|
|
77
|
+
if "Shipment Date" = 0D then
|
|
78
|
+
FieldError("Shipment Date", 'Shipment date is required for posting orders.');
|
|
79
|
+
|
|
80
|
+
if not LinesExist() then
|
|
81
|
+
FieldError("Document Type", 'Document must have at least one line to post.');
|
|
82
|
+
end;
|
|
83
|
+
```
|