@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,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Task Scheduler Pattern Implementation"
|
|
3
|
+
domain: "jordan-bridge"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["task-scheduler", "job-processing", "async-patterns", "workflow-management"]
|
|
7
|
+
prerequisites: ["task-scheduler-basics", "queue-processing", "error-handling"]
|
|
8
|
+
samples: "samples/task-scheduler-pattern.md"
|
|
9
|
+
related_topics: ["command-queue-pattern-al", "event-bridge-pattern-al"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Task Scheduler Pattern Implementation
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
The Task Scheduler Pattern provides structured approaches for managing asynchronous task execution, job scheduling, and workflow automation in Business Central. This pattern enables reliable background processing while maintaining system responsiveness and providing robust error handling.
|
|
17
|
+
|
|
18
|
+
**Key Benefit**: Enables reliable, scalable background processing with comprehensive monitoring, error handling, and recovery capabilities.
|
|
19
|
+
|
|
20
|
+
## Core Scheduling Architecture
|
|
21
|
+
|
|
22
|
+
### Task Queue Management
|
|
23
|
+
Implement task queues that can handle different priority levels, execution timing requirements, and retry policies for failed tasks.
|
|
24
|
+
|
|
25
|
+
### Scheduler Engine Design
|
|
26
|
+
Design scheduler engines that can efficiently manage task execution timing, resource allocation, and concurrent task processing.
|
|
27
|
+
|
|
28
|
+
### Task State Management
|
|
29
|
+
Implement comprehensive task state tracking that supports monitoring, debugging, and recovery operations for scheduled tasks.
|
|
30
|
+
|
|
31
|
+
## Implementation Strategies
|
|
32
|
+
|
|
33
|
+
### Priority-Based Scheduling
|
|
34
|
+
Design scheduling systems that support task prioritization, ensuring critical tasks receive appropriate execution priority and resource allocation.
|
|
35
|
+
|
|
36
|
+
### Resource-Aware Execution
|
|
37
|
+
Implement resource monitoring that can adjust task execution based on system load, available resources, and performance requirements.
|
|
38
|
+
|
|
39
|
+
### Distributed Scheduling
|
|
40
|
+
Design scheduling patterns that can work across multiple Business Central instances or integrate with external scheduling systems.
|
|
41
|
+
|
|
42
|
+
## Advanced Scheduling Features
|
|
43
|
+
|
|
44
|
+
### Dependency Management
|
|
45
|
+
Implement task dependency tracking that ensures prerequisite tasks complete successfully before dependent tasks execute.
|
|
46
|
+
|
|
47
|
+
### Conditional Scheduling
|
|
48
|
+
Design conditional scheduling logic that can dynamically adjust task execution based on business rules, system state, or external conditions.
|
|
49
|
+
|
|
50
|
+
### Batch Processing Integration
|
|
51
|
+
Integrate scheduling with batch processing capabilities to enable efficient processing of large task volumes.
|
|
52
|
+
|
|
53
|
+
## Error Handling and Recovery
|
|
54
|
+
|
|
55
|
+
### Retry Mechanisms
|
|
56
|
+
- Implement sophisticated retry policies with exponential backoff
|
|
57
|
+
- Support different retry strategies based on error types
|
|
58
|
+
- Provide maximum retry limits to prevent infinite retry loops
|
|
59
|
+
- Log retry attempts for debugging and monitoring
|
|
60
|
+
|
|
61
|
+
### Failure Management
|
|
62
|
+
- Design comprehensive failure handling for different error scenarios
|
|
63
|
+
- Implement dead letter queues for tasks that cannot be processed
|
|
64
|
+
- Support manual task recovery and reprocessing
|
|
65
|
+
- Provide failure notification and alerting capabilities
|
|
66
|
+
|
|
67
|
+
## Performance Optimization
|
|
68
|
+
|
|
69
|
+
### Execution Efficiency
|
|
70
|
+
Optimize task execution patterns to minimize resource usage and maximize throughput for high-volume scheduling scenarios.
|
|
71
|
+
|
|
72
|
+
### Memory Management
|
|
73
|
+
Implement efficient memory management for task data and scheduling metadata to prevent memory leaks and resource exhaustion.
|
|
74
|
+
|
|
75
|
+
### Concurrency Control
|
|
76
|
+
Design concurrency controls that enable parallel task execution while preventing resource conflicts and data corruption.
|
|
77
|
+
|
|
78
|
+
## Monitoring and Diagnostics
|
|
79
|
+
|
|
80
|
+
### Task Execution Tracking
|
|
81
|
+
Implement comprehensive tracking of task execution including timing, resource usage, success rates, and error patterns.
|
|
82
|
+
|
|
83
|
+
### Performance Metrics
|
|
84
|
+
Provide detailed performance metrics for scheduling operations, task execution times, and system resource utilization.
|
|
85
|
+
|
|
86
|
+
### Health Monitoring
|
|
87
|
+
Design health monitoring capabilities that can detect scheduling system issues and provide early warning of potential problems.
|
|
88
|
+
|
|
89
|
+
## Integration Patterns
|
|
90
|
+
|
|
91
|
+
### Workflow Integration
|
|
92
|
+
Integrate task scheduling with workflow systems to enable complex business process automation and orchestration.
|
|
93
|
+
|
|
94
|
+
### Event-Driven Scheduling
|
|
95
|
+
Connect scheduling systems with event-driven architectures to enable reactive task scheduling based on business events.
|
|
96
|
+
|
|
97
|
+
### External System Integration
|
|
98
|
+
Design integration patterns that enable scheduling coordination with external systems and services.
|
|
99
|
+
|
|
100
|
+
## Security and Compliance
|
|
101
|
+
|
|
102
|
+
### Access Control
|
|
103
|
+
- Implement authorization controls for task scheduling and management
|
|
104
|
+
- Support role-based access to different scheduling capabilities
|
|
105
|
+
- Validate user permissions for task creation and modification
|
|
106
|
+
- Audit task scheduling operations for compliance requirements
|
|
107
|
+
|
|
108
|
+
### Data Protection
|
|
109
|
+
- Ensure sensitive data in task parameters is properly protected
|
|
110
|
+
- Implement encryption for task data at rest and in transit
|
|
111
|
+
- Support data retention policies for task execution history
|
|
112
|
+
- Provide secure cleanup of task data after completion
|
|
113
|
+
|
|
114
|
+
## Best Practices
|
|
115
|
+
|
|
116
|
+
### Design Principles
|
|
117
|
+
- Keep task implementations idempotent to support safe retry operations
|
|
118
|
+
- Implement comprehensive logging for task execution and scheduling operations
|
|
119
|
+
- Use dependency injection for task implementation flexibility
|
|
120
|
+
- Design for horizontal scaling in high-volume scenarios
|
|
121
|
+
|
|
122
|
+
### Operational Excellence
|
|
123
|
+
- Provide clear documentation for task configuration and management
|
|
124
|
+
- Implement automated testing for scheduling logic and task execution
|
|
125
|
+
- Support task scheduling simulation and testing capabilities
|
|
126
|
+
- Maintain clear operational procedures for scheduling system management
|
|
127
|
+
|
|
128
|
+
## Common Pitfalls
|
|
129
|
+
|
|
130
|
+
### Resource Exhaustion
|
|
131
|
+
Avoid scheduling patterns that can exhaust system resources through excessive concurrent task execution or poor resource management.
|
|
132
|
+
|
|
133
|
+
### Error Amplification
|
|
134
|
+
Prevent error scenarios where failed tasks create cascading failures or exponentially increasing retry attempts.
|
|
135
|
+
|
|
136
|
+
### State Corruption
|
|
137
|
+
Avoid task scheduling patterns that can lead to inconsistent state or data corruption during error scenarios.
|
|
138
|
+
|
|
139
|
+
### Monitoring Gaps
|
|
140
|
+
Ensure comprehensive monitoring coverage to prevent silent failures or performance degradation in scheduling systems.
|
|
141
|
+
|
|
142
|
+
*Complete scheduler implementation: samples/task-scheduler-pattern.md*
|
|
143
|
+
*Command queue patterns: command-queue-pattern-al.md*
|
|
144
|
+
*Event-driven integration: event-bridge-pattern-al.md*
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "API Page URL Structure and Entity Naming Patterns"
|
|
3
|
+
domain: "jordan-bridge"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["api-endpoints", "url-structure", "naming-conventions"]
|
|
7
|
+
samples: "samples/api-url-naming.md"
|
|
8
|
+
---
|
|
9
|
+
# API Page URL Structure and Entity Naming Patterns
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Business Central API pages follow predictable URL patterns that directly correlate with entity naming conventions. Understanding these patterns is essential for API design consistency and client integration predictability.
|
|
14
|
+
|
|
15
|
+
The URL structure determines how external systems discover and interact with your BC data, making proper naming a critical architectural decision that affects long-term maintainability and integration success.
|
|
16
|
+
|
|
17
|
+
## URL Structure Components
|
|
18
|
+
|
|
19
|
+
### Base URL Pattern
|
|
20
|
+
Business Central APIs follow the standard OData URL structure:
|
|
21
|
+
```
|
|
22
|
+
https://{server}/BC{version}/api/{publisher}/{group}/{version}/{entity}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Each component serves a specific purpose in API discoverability and versioning strategy.
|
|
26
|
+
|
|
27
|
+
### Entity Naming Requirements
|
|
28
|
+
Entity names in API pages must follow specific BC conventions:
|
|
29
|
+
- Must be plural nouns (e.g., "customers", not "customer")
|
|
30
|
+
- Use lowercase with hyphens for multi-word entities
|
|
31
|
+
- Cannot exceed 30 characters in length
|
|
32
|
+
- Must be unique within the API group scope
|
|
33
|
+
|
|
34
|
+
### Publisher and Group Naming
|
|
35
|
+
Publisher identifies the extension owner, while group logically organizes related entities. Both impact the final URL structure and should follow consistent organizational patterns.
|
|
36
|
+
|
|
37
|
+
## Naming Pattern Guidelines
|
|
38
|
+
|
|
39
|
+
### Standard Entity Patterns
|
|
40
|
+
Follow established BC naming patterns for consistency with Microsoft's own APIs:
|
|
41
|
+
- Master data: "customers", "vendors", "items"
|
|
42
|
+
- Transactional data: "sales-orders", "purchase-invoices"
|
|
43
|
+
- Setup data: "payment-terms", "shipping-methods"
|
|
44
|
+
|
|
45
|
+
### Multi-Word Entity Handling
|
|
46
|
+
When entity names contain multiple words, use hyphen separation for URL readability while maintaining camelCase in AL object naming for code consistency.
|
|
47
|
+
|
|
48
|
+
### Abbreviation Strategy
|
|
49
|
+
Avoid abbreviations in entity names unless they are widely understood business terms. Full words improve API discoverability and reduce integration confusion.
|
|
50
|
+
|
|
51
|
+
## Implementation Considerations
|
|
52
|
+
|
|
53
|
+
### EntityName vs EntitySetName
|
|
54
|
+
The EntityName property defines the singular form used in metadata, while EntitySetName defines the plural form used in URLs. Both properties must be carefully coordinated.
|
|
55
|
+
|
|
56
|
+
### Backward Compatibility
|
|
57
|
+
Entity name changes break existing integrations. Plan naming carefully from initial implementation to avoid forced breaking changes in future versions.
|
|
58
|
+
|
|
59
|
+
### Regional Considerations
|
|
60
|
+
Entity names should use English terminology regardless of BC deployment region to maintain consistency across global implementations.
|
|
61
|
+
|
|
62
|
+
## URL Pattern Validation
|
|
63
|
+
|
|
64
|
+
### Discoverability Testing
|
|
65
|
+
Verify that entity URLs are discoverable through the standard OData metadata endpoints and follow expected RESTful resource patterns.
|
|
66
|
+
|
|
67
|
+
### Integration Impact Assessment
|
|
68
|
+
Consider how entity naming affects client code generation tools and SDK implementations that consume your APIs.
|
|
69
|
+
|
|
70
|
+
### Documentation Alignment
|
|
71
|
+
Ensure entity names align with business terminology used in API documentation and integration guides.
|
|
72
|
+
|
|
73
|
+
## Common Naming Pitfalls
|
|
74
|
+
|
|
75
|
+
### Inconsistent Pluralization
|
|
76
|
+
Mixing singular and plural forms across related entities creates confusion and breaks client expectations about resource collections.
|
|
77
|
+
|
|
78
|
+
### Technical vs Business Names
|
|
79
|
+
Using internal technical names instead of business-friendly terms reduces API adoption and increases integration complexity.
|
|
80
|
+
|
|
81
|
+
### Overly Generic Names
|
|
82
|
+
Names like "data" or "records" provide no semantic meaning and make APIs difficult to understand and maintain.
|
|
83
|
+
|
|
84
|
+
## Best Practices
|
|
85
|
+
|
|
86
|
+
### Domain-Driven Naming
|
|
87
|
+
Align entity names with business domain terminology to improve API usability and reduce the learning curve for integrators.
|
|
88
|
+
|
|
89
|
+
### Future-Proof Patterns
|
|
90
|
+
Choose names that can accommodate business evolution without requiring breaking changes to maintain API contract stability.
|
|
91
|
+
|
|
92
|
+
### Consistent Conventions
|
|
93
|
+
Establish and document naming conventions across all API entities within your solution to create predictable integration patterns.
|
|
94
|
+
|
|
95
|
+
### Validation Rules
|
|
96
|
+
Implement automated validation to ensure all API entity names follow established patterns and conventions before publication.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Case Statement Multiple Conditions and Ranges"
|
|
3
|
+
domain: "maya-mentor"
|
|
4
|
+
subdomain: "maya-mentor"
|
|
5
|
+
difficulty: "intermediate"
|
|
6
|
+
bc_versions: "14+"
|
|
7
|
+
al_version: "6.0+"
|
|
8
|
+
tags: ["case", "ranges", "multiple-values", "advanced-patterns", "conditional-logic"]
|
|
9
|
+
prerequisites: ["case-statement-syntax", "data-types", "operators"]
|
|
10
|
+
related_topics: ["case-statement-syntax", "case-performance", "numeric-operations"]
|
|
11
|
+
samples: "samples/case-statement-multiple-conditions.md"
|
|
12
|
+
---
|
|
13
|
+
# Case Statement Multiple Conditions and Ranges
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
AL Case statements support sophisticated pattern matching beyond simple value comparison. Multiple values and numeric ranges enable elegant solutions for classification, tiering, and categorical logic common in Business Central applications.
|
|
18
|
+
|
|
19
|
+
**Key Capabilities:**
|
|
20
|
+
- **Multiple Values**: Single branch handling multiple discrete values
|
|
21
|
+
- **Numeric Ranges**: Continuous value ranges using dotdot (..) operator
|
|
22
|
+
- **Mixed Patterns**: Combining discrete values and ranges in same statement
|
|
23
|
+
- **Type-Safe Matching**: Compile-time validation of value compatibility
|
|
24
|
+
|
|
25
|
+
These advanced patterns eliminate complex IF-THEN chains and provide more maintainable conditional logic.
|
|
26
|
+
|
|
27
|
+
## Multiple Value Syntax
|
|
28
|
+
|
|
29
|
+
### Comma-Separated Values
|
|
30
|
+
Single case branches can handle multiple discrete values using comma-separated syntax. This pattern groups values that require identical processing logic.
|
|
31
|
+
|
|
32
|
+
### Enum Multiple Values
|
|
33
|
+
Enum values can be grouped using comma separation for branches that process multiple related document types or states with common handling logic.
|
|
34
|
+
|
|
35
|
+
### Best Practices for Multiple Values
|
|
36
|
+
- **Logical Grouping**: Group values that require identical processing
|
|
37
|
+
- **Clear Relationships**: Ensure grouped values share common business logic
|
|
38
|
+
- **Maintainability**: Document why specific values are grouped together
|
|
39
|
+
|
|
40
|
+
## Numeric Range Operations
|
|
41
|
+
|
|
42
|
+
### Basic Range Syntax
|
|
43
|
+
The dotdot (..) operator creates inclusive ranges for numeric types. Range bounds include both start and end values, covering all integers between specified limits.
|
|
44
|
+
|
|
45
|
+
### Range Characteristics
|
|
46
|
+
- **Inclusive Bounds**: Both start and end values are included in the range
|
|
47
|
+
- **Continuous Coverage**: Ranges cover all integer values between bounds
|
|
48
|
+
- **Type Requirements**: Range bounds must be compatible numeric types
|
|
49
|
+
- **Compile-Time Validation**: Invalid ranges detected during compilation
|
|
50
|
+
|
|
51
|
+
## Advanced Range Patterns
|
|
52
|
+
|
|
53
|
+
### Age-Based Classification
|
|
54
|
+
Age ranges enable automatic classification into demographic categories with appropriate processing for minors, adults, and seniors.
|
|
55
|
+
|
|
56
|
+
### Price Tier Determination
|
|
57
|
+
Amount ranges determine discount percentages based on order values, with higher volumes receiving increased discount rates.
|
|
58
|
+
|
|
59
|
+
### Scoring and Grading
|
|
60
|
+
Test score ranges automatically assign letter grades using standard academic grading scales with error handling for invalid scores.
|
|
61
|
+
|
|
62
|
+
## Mixed Pattern Implementation
|
|
63
|
+
|
|
64
|
+
### Combining Discrete Values and Ranges
|
|
65
|
+
Single case statements can mix discrete string values with numeric ranges, enabling flexible processing based on different data types within the same logic structure.
|
|
66
|
+
|
|
67
|
+
### Complex Business Logic
|
|
68
|
+
Complex business scenarios combine multiple value types with multi-statement branches to handle VIP customers, loyalty levels, and default processing paths.
|
|
69
|
+
|
|
70
|
+
## Range Validation and Error Handling
|
|
71
|
+
|
|
72
|
+
### Gap Detection
|
|
73
|
+
Ensure complete coverage of expected value ranges by designing consecutive ranges that cover all valid input values without gaps.
|
|
74
|
+
|
|
75
|
+
### Overlap Prevention
|
|
76
|
+
Avoid overlapping ranges that create ambiguous conditions where multiple branches could match the same input value.
|
|
77
|
+
|
|
78
|
+
## Performance Considerations
|
|
79
|
+
|
|
80
|
+
### Range Evaluation Efficiency
|
|
81
|
+
- **Ordered Ranges**: Place most common ranges first for optimal performance
|
|
82
|
+
- **Large Ranges**: Consider breaking very large ranges into smaller segments
|
|
83
|
+
- **Range Density**: Dense ranges (consecutive values) perform better than sparse ranges
|
|
84
|
+
|
|
85
|
+
### Optimization Strategies
|
|
86
|
+
Order case branches by frequency, placing most common ranges first to minimize average execution time through reduced branch traversal.
|
|
87
|
+
|
|
88
|
+
## AL-Specific Implementation Notes
|
|
89
|
+
|
|
90
|
+
### Data Type Compatibility
|
|
91
|
+
- **Integer Ranges**: Support full integer range with MAXINTEGER constant
|
|
92
|
+
- **Decimal Ranges**: Limited precision considerations for decimal ranges
|
|
93
|
+
- **Date Ranges**: Supported but consider DateTime for time-sensitive logic
|
|
94
|
+
- **Time Ranges**: Available for time-based processing windows
|
|
95
|
+
|
|
96
|
+
### Constants and Variables
|
|
97
|
+
Use constants for maintainable range bounds to centralize business rules and enable easy modification of threshold values across the application.
|
|
98
|
+
|
|
99
|
+
## CodeCop Compliance Considerations
|
|
100
|
+
|
|
101
|
+
### Official AL Guidelines Conflict
|
|
102
|
+
|
|
103
|
+
**Important Note**: The patterns described in this topic conflict with Microsoft's CodeCop rule AA0005, which governs the use of BEGIN..END blocks in case statements.
|
|
104
|
+
|
|
105
|
+
This represents a common styling debate in AL development:
|
|
106
|
+
|
|
107
|
+
#### AA0005: BEGIN..END Usage in Case Branches
|
|
108
|
+
- **CodeCop Compliance**: Only use BEGIN..END when the case branch contains multiple statements
|
|
109
|
+
- **Alternative Approach**: Use BEGIN..END consistently for visual alignment and easier future modification
|
|
110
|
+
|
|
111
|
+
**CodeCop Compliant:**
|
|
112
|
+
Only use BEGIN..END when case branches contain multiple statements, keeping simple branches without block structure.
|
|
113
|
+
|
|
114
|
+
**Alternative Approach:**
|
|
115
|
+
Use BEGIN..END consistently across all branches for visual alignment and easier future modification.
|
|
116
|
+
|
|
117
|
+
### Team Decision Framework
|
|
118
|
+
|
|
119
|
+
Consider these factors when choosing your approach:
|
|
120
|
+
- **Future Modification**: Consistent BEGIN..END makes adding statements to branches easier
|
|
121
|
+
- **Code Density**: CodeCop compliance reduces visual noise for simple case statements
|
|
122
|
+
- **Team Consistency**: Align with existing patterns in your codebase and team preferences
|
|
123
|
+
- **Maintenance Style**: Consider whether developers typically add logging or debugging to case branches
|
|
124
|
+
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Case Statement Syntax and Structure"
|
|
3
|
+
domain: "maya-mentor"
|
|
4
|
+
subdomain: "maya-mentor"
|
|
5
|
+
difficulty: "beginner"
|
|
6
|
+
bc_versions: "14+"
|
|
7
|
+
al_version: "6.0+"
|
|
8
|
+
tags: ["case", "switch", "control-flow", "syntax", "branching"]
|
|
9
|
+
prerequisites: ["if-statements", "variable-types", "basic-syntax"]
|
|
10
|
+
related_topics: ["case-multiple-conditions", "case-performance", "case-error-handling"]
|
|
11
|
+
samples: "samples/case-statement-syntax-structure.md"
|
|
12
|
+
---
|
|
13
|
+
# AL Case Statement Syntax and Structure
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
The AL Case statement provides a structured approach to multi-branch conditional logic in Business Central. It offers cleaner, more readable code compared to multiple IF-THEN-ELSE chains when evaluating a single expression against multiple possible values.
|
|
18
|
+
|
|
19
|
+
**Core Syntax Pattern:**
|
|
20
|
+
```
|
|
21
|
+
CASE Expression OF
|
|
22
|
+
Value1: Statement1;
|
|
23
|
+
Value2: Statement2;
|
|
24
|
+
ELSE
|
|
25
|
+
DefaultStatement;
|
|
26
|
+
END;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The CASE statement evaluates the expression once and executes the matching branch, providing better performance than cascaded IF statements for multiple conditions.
|
|
30
|
+
|
|
31
|
+
## Fundamental Structure Components
|
|
32
|
+
|
|
33
|
+
### Expression Evaluation
|
|
34
|
+
The case expression is evaluated once at statement entry. Supported expression types include:
|
|
35
|
+
- **Integer values** and ranges
|
|
36
|
+
- **Enum values** and option strings
|
|
37
|
+
- **Text and Code fields** with exact matching
|
|
38
|
+
- **Boolean values** (though IF statements are typically preferred)
|
|
39
|
+
- **Date and DateTime** values for temporal branching
|
|
40
|
+
|
|
41
|
+
### Value Matching and Execution
|
|
42
|
+
Case values must exactly match the expression and be compile-time constants. Only the first matching branch executes with no fall-through behavior. Each branch can contain single statements or BEGIN-END blocks.
|
|
43
|
+
|
|
44
|
+
## AL-Specific Implementation Details
|
|
45
|
+
|
|
46
|
+
### Supported Data Types
|
|
47
|
+
AL case statements support integer values, enum types, option fields, text/code fields, boolean values, and date/datetime expressions. Each data type follows specific matching rules and syntax patterns.
|
|
48
|
+
|
|
49
|
+
### Multi-Statement Branches
|
|
50
|
+
When branches require multiple statements, use BEGIN..END blocks to group related operations. Single statements can be placed directly after the colon without additional grouping.
|
|
51
|
+
|
|
52
|
+
## Best Practices for Structure
|
|
53
|
+
|
|
54
|
+
### Expression and Branch Guidelines
|
|
55
|
+
- **Simple Expressions**: Use expressions that evaluate to basic types
|
|
56
|
+
- **Logical Organization**: Order branches by frequency and group related cases
|
|
57
|
+
- **Default Handling**: Always include ELSE clause for robust error handling
|
|
58
|
+
- **Readable Code**: Use consistent indentation and descriptive value names
|
|
59
|
+
|
|
60
|
+
## Common Implementation Patterns
|
|
61
|
+
|
|
62
|
+
### Enum-Based Switching
|
|
63
|
+
Most effective pattern for type-safe branching with IntelliSense support. Use enum values with appropriate ELSE clause for error handling.
|
|
64
|
+
|
|
65
|
+
### Status Processing
|
|
66
|
+
Common pattern for processing different record states with specific handling procedures for each status value.
|
|
67
|
+
|
|
68
|
+
## Structural Guidelines
|
|
69
|
+
|
|
70
|
+
### When to Use Case vs IF
|
|
71
|
+
- **Use CASE**: 3+ conditions on same expression, enum/option switching
|
|
72
|
+
- **Use IF**: Complex boolean logic, different expressions per condition, 1-2 simple conditions
|
|
73
|
+
|
|
74
|
+
### Nesting Considerations
|
|
75
|
+
- **Avoid Deep Nesting**: Prefer flat structure with helper procedures
|
|
76
|
+
- **Extract Complex Logic**: Move complex branch logic to separate procedures
|
|
77
|
+
- **Maintain Readability**: Keep case statements focused and scannable
|
|
78
|
+
|
|
79
|
+
## CodeCop Compliance Notes
|
|
80
|
+
|
|
81
|
+
Case statements should follow Microsoft's AL coding standards, particularly regarding BEGIN..END usage and error message handling. Teams may choose different approaches based on their specific requirements and coding standards.
|
|
82
|
+
|
|
83
|
+
See companion sample file for CodeCop-compliant examples and alternative approaches.
|
|
84
|
+
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "FieldError Syntax and Usage"
|
|
3
|
+
domain: "maya-mentor"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["fielderror", "error-handling", "validation", "record-methods", "user-feedback", "field-validation", "runtime-errors"]
|
|
7
|
+
prerequisites: ["record-basics", "field-access"]
|
|
8
|
+
samples: "samples/fielderror-syntax-usage.md"
|
|
9
|
+
related_topics: ["testfield-method", "error-method", "field-validation", "record-validation"]
|
|
10
|
+
---
|
|
11
|
+
# FieldError Syntax and Usage
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
FieldError is a fundamental AL method that displays an error dialog with a field-specific error message and terminates current processing. Unlike the generic Error method, FieldError automatically includes the field caption and current field value in the error message, providing better user context for validation failures.
|
|
16
|
+
|
|
17
|
+
The method belongs to the Record data type and operates on specific fields within record instances. When called, FieldError immediately stops code execution and displays a formatted error message to the user.
|
|
18
|
+
|
|
19
|
+
**Core Purpose**: Provide field-specific error feedback with automatic context inclusion for better user experience during validation failures.
|
|
20
|
+
|
|
21
|
+
## Method Signature and Variations
|
|
22
|
+
|
|
23
|
+
### Basic Syntax
|
|
24
|
+
The FieldError method follows the pattern: Record.FieldError(Field [, Text])
|
|
25
|
+
|
|
26
|
+
The FieldError method accepts the target field as the first parameter and an optional custom error text as the second parameter. When no custom text is provided, BC generates a standard error message using the field's caption and current value.
|
|
27
|
+
|
|
28
|
+
### Parameter Details
|
|
29
|
+
- **Field**: The specific field reference where the error occurred
|
|
30
|
+
- **Text**: Optional custom error message to display instead of the default message
|
|
31
|
+
- **Return Type**: None (method terminates execution)
|
|
32
|
+
|
|
33
|
+
## Automatic Message Construction
|
|
34
|
+
|
|
35
|
+
### Default Message Format
|
|
36
|
+
When called without custom text, FieldError constructs messages following the pattern: "Field Caption must not be Value in Table Caption: Primary Key Values". This automatic formatting provides consistent error messaging across the application.
|
|
37
|
+
|
|
38
|
+
The system automatically retrieves the field caption from the field's metadata, includes the current field value, and adds table context with primary key identification for precise error location.
|
|
39
|
+
|
|
40
|
+
### Custom Message Integration
|
|
41
|
+
When custom text is provided, FieldError still includes field context but uses the custom message as the primary error description. The field caption and value are typically appended to maintain context while allowing specific error guidance.
|
|
42
|
+
|
|
43
|
+
## Execution Behavior
|
|
44
|
+
|
|
45
|
+
### Immediate Termination
|
|
46
|
+
FieldError causes immediate code execution termination at the point of call. No subsequent code in the current procedure executes after a FieldError call, making it suitable for validation scenarios where further processing is meaningless.
|
|
47
|
+
|
|
48
|
+
### User Interface Impact
|
|
49
|
+
The error displays in a modal dialog that requires user acknowledgment before continuing. Users see the complete error context including field identification, current value, and record location.
|
|
50
|
+
|
|
51
|
+
### Transaction Handling
|
|
52
|
+
FieldError respects current transaction boundaries and triggers appropriate rollback behavior when called within database transactions. This ensures data consistency when validation failures occur during data modification operations.
|
|
53
|
+
|
|
54
|
+
## Common Usage Patterns
|
|
55
|
+
|
|
56
|
+
### Field Value Validation
|
|
57
|
+
FieldError commonly validates field values against business rules, checking for invalid data ranges, forbidden values, or constraint violations. The method provides immediate feedback when field contents violate established business logic.
|
|
58
|
+
|
|
59
|
+
### State-Dependent Validation
|
|
60
|
+
Fields often require different validation based on record state or related field values. FieldError enables context-sensitive validation that considers the complete record state when evaluating individual field validity.
|
|
61
|
+
|
|
62
|
+
### Cross-Field Validation
|
|
63
|
+
When field validity depends on other field values, FieldError provides targeted feedback while maintaining awareness of the broader record context. This enables complex validation scenarios with clear user guidance.
|
|
64
|
+
|
|
65
|
+
## Best Practices
|
|
66
|
+
|
|
67
|
+
### Message Clarity
|
|
68
|
+
When providing custom error messages, focus on actionable guidance that helps users understand both the problem and the solution. Combine BC's automatic field context with specific correction instructions.
|
|
69
|
+
|
|
70
|
+
### Validation Timing
|
|
71
|
+
Call FieldError during appropriate validation phases, typically in OnValidate triggers or validation procedures. Avoid FieldError in contexts where graceful error handling might be more appropriate.
|
|
72
|
+
|
|
73
|
+
### User Experience
|
|
74
|
+
Consider the user's workflow when implementing FieldError calls. Provide enough context for users to understand and correct the validation failure without requiring deep system knowledge.
|
|
75
|
+
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "FieldError vs TestField Decision Guide"
|
|
3
|
+
domain: "maya-mentor"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["fielderror", "testfield", "validation", "error-handling", "method-comparison", "decision-making", "field-validation"]
|
|
7
|
+
prerequisites: ["fielderror-syntax-usage", "testfield-basic-syntax"]
|
|
8
|
+
related_topics: ["validation-patterns", "error-handling-strategies", "field-validation"]
|
|
9
|
+
---
|
|
10
|
+
# FieldError vs TestField Decision Guide
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
FieldError and TestField serve different purposes in AL validation scenarios, though both handle field validation errors. Understanding when to use each method is crucial for creating effective validation logic that provides appropriate user feedback and maintains proper execution flow.
|
|
15
|
+
|
|
16
|
+
The fundamental difference lies in their validation approach: TestField performs validation checks and conditionally throws errors, while FieldError assumes validation has already failed and immediately displays an error message.
|
|
17
|
+
|
|
18
|
+
**Decision Principle**: Use TestField for conditional validation based on field content; use FieldError for unconditional error reporting when business rules are violated.
|
|
19
|
+
|
|
20
|
+
## Core Behavioral Differences
|
|
21
|
+
|
|
22
|
+
### TestField Validation Logic
|
|
23
|
+
TestField evaluates field conditions before throwing errors. It checks if a field is empty (or doesn't match an expected value) and only throws an error when the validation condition fails. TestField combines validation logic with error reporting in a single method call.
|
|
24
|
+
|
|
25
|
+
### FieldError Error Reporting
|
|
26
|
+
FieldError does not perform validation checks. It assumes that validation has already been performed elsewhere and simply displays an error message with field context. FieldError is purely an error reporting mechanism.
|
|
27
|
+
|
|
28
|
+
### Execution Flow Impact
|
|
29
|
+
TestField allows code to continue when validation passes, making it suitable for prerequisite checking at the beginning of procedures. FieldError always terminates execution, making it appropriate for definitive validation failure scenarios.
|
|
30
|
+
|
|
31
|
+
## Usage Context Guidelines
|
|
32
|
+
|
|
33
|
+
### TestField Scenarios
|
|
34
|
+
Use TestField when you need to verify that required fields contain appropriate values before proceeding with business logic. TestField works well for mandatory field checking, prerequisite validation, and simple conditional requirements.
|
|
35
|
+
|
|
36
|
+
TestField is ideal for validating field presence or specific expected values where the validation condition can be evaluated in a single expression.
|
|
37
|
+
|
|
38
|
+
### FieldError Scenarios
|
|
39
|
+
Use FieldError when complex business rule validation has already determined that a field contains invalid data. FieldError works well in OnValidate triggers, complex validation procedures, and scenarios where the validation logic is too complex for TestField's simple condition checking.
|
|
40
|
+
|
|
41
|
+
FieldError is appropriate when you need custom error messages that provide specific guidance about validation failures beyond simple "field is required" messages.
|
|
42
|
+
|
|
43
|
+
## Message Customization Capabilities
|
|
44
|
+
|
|
45
|
+
### TestField Message Options
|
|
46
|
+
TestField provides limited message customization options. The error messages follow standard patterns: field requirement messages or field value mismatch messages. Custom messaging requires using alternative validation approaches.
|
|
47
|
+
|
|
48
|
+
### FieldError Message Flexibility
|
|
49
|
+
FieldError supports extensive message customization through the optional text parameter. This enables specific business context, correction instructions, and user-friendly explanations of validation failures.
|
|
50
|
+
|
|
51
|
+
## Validation Pattern Integration
|
|
52
|
+
|
|
53
|
+
### Simple Validation Patterns
|
|
54
|
+
For straightforward field requirement checking, TestField provides concise, readable code that clearly expresses validation intent. The method name self-documents the validation purpose.
|
|
55
|
+
|
|
56
|
+
### Complex Validation Patterns
|
|
57
|
+
For multi-condition validation, business rule enforcement, and context-dependent field checking, FieldError provides better control over error messaging and validation logic separation.
|
|
58
|
+
|
|
59
|
+
## Performance Considerations
|
|
60
|
+
|
|
61
|
+
### TestField Efficiency
|
|
62
|
+
TestField performs simple field value checking with minimal overhead. The method is optimized for common validation scenarios and provides good performance for straightforward field validation.
|
|
63
|
+
|
|
64
|
+
### FieldError Efficiency
|
|
65
|
+
FieldError has similar performance characteristics to TestField for error display but requires separate validation logic. The total performance impact depends on the complexity of the accompanying validation code.
|
|
66
|
+
|
|
67
|
+
## Code Readability and Maintenance
|
|
68
|
+
|
|
69
|
+
### TestField Clarity
|
|
70
|
+
TestField code clearly expresses validation intent through the method name and parameters. Code readers can quickly understand that field validation is occurring and what conditions are being checked.
|
|
71
|
+
|
|
72
|
+
### FieldError Documentation
|
|
73
|
+
FieldError requires accompanying validation logic, which can make the complete validation more verbose but also more explicit about business rules being enforced.
|
|
74
|
+
|
|
75
|
+
## Integration with Error Handling Patterns
|
|
76
|
+
|
|
77
|
+
### TestField in Try Functions
|
|
78
|
+
TestField works seamlessly with try function patterns for non-blocking validation scenarios. The method's conditional nature aligns well with try-catch error handling approaches.
|
|
79
|
+
|
|
80
|
+
### FieldError in Validation Procedures
|
|
81
|
+
FieldError integrates effectively with dedicated validation procedures that perform comprehensive business rule checking before reporting specific validation failures.
|
|
82
|
+
|
|
83
|
+
## Decision Framework
|
|
84
|
+
|
|
85
|
+
### Use TestField When:
|
|
86
|
+
- Performing simple field presence validation
|
|
87
|
+
- Checking field values against expected constants
|
|
88
|
+
- Implementing prerequisite checks at procedure entry points
|
|
89
|
+
- Default error messages are sufficient for user guidance
|
|
90
|
+
|
|
91
|
+
### Use FieldError When:
|
|
92
|
+
- Custom error messages are required for user guidance
|
|
93
|
+
- Complex business rule validation precedes error reporting
|
|
94
|
+
- Validation logic is too complex for TestField's condition checking
|
|
95
|
+
- Error reporting needs to occur within validation procedures
|
|
96
|
+
|