@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,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "No. Series Module Patterns (BC24+)"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "24+"
|
|
6
|
+
tags: ["no-series", "number-generation", "business-foundation", "module-architecture", "bc24-migration"]
|
|
7
|
+
prerequisites: ["table-design", "no-series-basics", "business-logic-patterns"]
|
|
8
|
+
samples: "samples/no-series-module-bc24.md"
|
|
9
|
+
related_topics: ["no-series-validation-module-bc24", "no-series-implementation-patterns", "bc24-migration-patterns"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# No. Series Module Patterns (BC24+)
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
Business Central 2024 Wave 1 introduced the new No. Series module as part of the Business Foundation layer, replacing the legacy NoSeriesManagement approach. This modular architecture provides more focused, granular methods for number generation with improved performance and maintainability.
|
|
17
|
+
|
|
18
|
+
**Key Benefit**: Leverages the new Business Foundation module architecture for cleaner, more maintainable number series implementation with improved performance and better separation of concerns.
|
|
19
|
+
|
|
20
|
+
## New Module Architecture
|
|
21
|
+
|
|
22
|
+
### Business Foundation Integration
|
|
23
|
+
The new No. Series module (Codeunit 310) is part of the Business Foundation layer, providing a modern, modular approach to number generation.
|
|
24
|
+
|
|
25
|
+
### Focused Codeunit Design
|
|
26
|
+
Replace monolithic NoSeriesManagement with specialized codeunits:
|
|
27
|
+
- **No. Series (Codeunit 310)**: Core number generation operations
|
|
28
|
+
- **NoSeriesBatch**: Batch-related number series operations
|
|
29
|
+
- **Related series operations**: Dedicated methods for series relationships
|
|
30
|
+
|
|
31
|
+
### Simplified Method Structure
|
|
32
|
+
New methods provide clearer intent and reduced parameter complexity compared to legacy InitSeries approach.
|
|
33
|
+
|
|
34
|
+
## Essential Migration Patterns
|
|
35
|
+
|
|
36
|
+
### Basic Number Generation
|
|
37
|
+
**Legacy Pattern (BC14-23)**:
|
|
38
|
+
```al
|
|
39
|
+
NoSeriesMgt.InitSeries(NoSeriesCode, xRec."No. Series", 0D, "No.", "No. Series");
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**New Pattern (BC24+)**:
|
|
43
|
+
```al
|
|
44
|
+
if "No." = '' then
|
|
45
|
+
"No." := NoSeries.GetNextNo("No. Series", WorkDate());
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Manual Number Testing
|
|
49
|
+
**Legacy Pattern**:
|
|
50
|
+
```al
|
|
51
|
+
NoSeriesMgt.TestManual("No. Series");
|
|
52
|
+
NoSeriesMgt.ManualNoAllowed("No. Series");
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**New Pattern**:
|
|
56
|
+
```al
|
|
57
|
+
NoSeries.TestManual("No. Series");
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Number Generation with Peek
|
|
61
|
+
**Legacy Pattern**:
|
|
62
|
+
```al
|
|
63
|
+
NextNo := NoSeriesMgt.GetNextNo("No. Series", WorkDate(), false);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**New Pattern**:
|
|
67
|
+
```al
|
|
68
|
+
NextNo := NoSeries.PeekNextNo("No. Series", WorkDate());
|
|
69
|
+
// Or for actual allocation:
|
|
70
|
+
NextNo := NoSeries.GetNextNo("No. Series", WorkDate());
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Series Selection/Lookup
|
|
74
|
+
**Legacy Pattern**:
|
|
75
|
+
```al
|
|
76
|
+
NoSeriesMgt.SelectSeries("No. Series", xRec."No. Series", "No. Series");
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**New Pattern**:
|
|
80
|
+
```al
|
|
81
|
+
NoSeries.LookupRelatedNoSeries("No. Series", "No. Series");
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Series Relationship Handling
|
|
85
|
+
**New Pattern (BC24+)**:
|
|
86
|
+
```al
|
|
87
|
+
if NoSeries.AreRelated("No. Series", xRec."No. Series") then
|
|
88
|
+
"No." := NoSeries.GetNextNo("No. Series", WorkDate());
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Advanced Module Integration
|
|
92
|
+
|
|
93
|
+
### Batch Operations
|
|
94
|
+
Utilize NoSeriesBatch for scenarios requiring multiple number allocations:
|
|
95
|
+
```al
|
|
96
|
+
// Batch allocation for multiple documents
|
|
97
|
+
NoSeriesBatch.GetNextNos("No. Series", WorkDate(), DocumentCount);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Date-Aware Generation
|
|
101
|
+
Leverage improved date handling in the new module:
|
|
102
|
+
```al
|
|
103
|
+
"No." := NoSeries.GetNextNo("No. Series", "Posting Date");
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Series Validation Integration
|
|
107
|
+
```al
|
|
108
|
+
if not NoSeries.IsValidNo("No.", "No. Series") then
|
|
109
|
+
Error('Invalid number format for series %1', "No. Series");
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Microsoft Official Migration Strategy
|
|
113
|
+
|
|
114
|
+
### Obsoleted Objects (BC24.0)
|
|
115
|
+
**Obsolete Codeunit**: NoSeriesManagement (Codeunit 396) - Complete replacement required
|
|
116
|
+
|
|
117
|
+
**Obsolete Methods** (require immediate attention):
|
|
118
|
+
- `InitSeries()` → Use `GetNextNo()` in No. Series codeunit
|
|
119
|
+
- `GetNextNo()` → Use `GetNextNo()` or `PeekNextNo()` in No. Series codeunit
|
|
120
|
+
- `TestManual()` → Use `TestManual()` in No. Series codeunit
|
|
121
|
+
- `ManualNoAllowed()` → Use `TestManual()` in No. Series codeunit
|
|
122
|
+
- `SelectSeries()` → Use `LookupRelatedNoSeries()` in No. Series codeunit
|
|
123
|
+
|
|
124
|
+
**Breaking Changes**:
|
|
125
|
+
- Sales and Purchase specific No. Series tables merged into generic No. Series Line table
|
|
126
|
+
- Some events completely removed without alternatives
|
|
127
|
+
- Certain methods have no direct replacement
|
|
128
|
+
|
|
129
|
+
### Migration Implementation Strategy
|
|
130
|
+
|
|
131
|
+
### Phase 1: Identify Legacy Usage
|
|
132
|
+
Systematically locate all NoSeriesManagement references:
|
|
133
|
+
- Search for `NoSeriesMgt` variable declarations
|
|
134
|
+
- Find obsolete method calls (`InitSeries`, `GetNextNo3`, `TestManual`, etc.)
|
|
135
|
+
- Identify custom extensions of NoSeriesManagement
|
|
136
|
+
- Review event subscriptions to obsolete events
|
|
137
|
+
|
|
138
|
+
### Phase 2: Update Core Patterns
|
|
139
|
+
Replace obsolete patterns with new module equivalents:
|
|
140
|
+
- Basic number generation and initialization
|
|
141
|
+
- Manual number testing and validation
|
|
142
|
+
- Series relationship checking and lookup
|
|
143
|
+
- Event handling migration (where alternatives exist)
|
|
144
|
+
|
|
145
|
+
### Phase 3: Enhanced Functionality
|
|
146
|
+
Leverage new capabilities not available in legacy approach:
|
|
147
|
+
- Improved batch operations via NoSeriesBatch
|
|
148
|
+
- Enhanced date handling and validation
|
|
149
|
+
- Better series relationship management
|
|
150
|
+
|
|
151
|
+
## Performance Improvements
|
|
152
|
+
|
|
153
|
+
### Reduced Object Coupling
|
|
154
|
+
The modular approach reduces dependencies between number generation and other system components.
|
|
155
|
+
|
|
156
|
+
### Optimized Database Access
|
|
157
|
+
New module provides more efficient database access patterns for number generation operations.
|
|
158
|
+
|
|
159
|
+
### Better Concurrency Handling
|
|
160
|
+
Improved locking mechanisms in the new module reduce contention in high-concurrency scenarios.
|
|
161
|
+
|
|
162
|
+
## Migration Validation
|
|
163
|
+
|
|
164
|
+
### Functional Testing
|
|
165
|
+
- Verify number generation produces expected results
|
|
166
|
+
- Test series relationship functionality
|
|
167
|
+
- Validate date-based number generation
|
|
168
|
+
|
|
169
|
+
### Performance Testing
|
|
170
|
+
- Compare number generation performance before/after migration
|
|
171
|
+
- Test high-concurrency scenarios
|
|
172
|
+
- Validate batch operation efficiency
|
|
173
|
+
|
|
174
|
+
### Regression Prevention
|
|
175
|
+
- Ensure existing number sequences remain unaffected
|
|
176
|
+
- Verify custom number generation logic still functions
|
|
177
|
+
- Test integration with existing business processes
|
|
178
|
+
|
|
179
|
+
## Best Practices
|
|
180
|
+
|
|
181
|
+
### Code Organization
|
|
182
|
+
- Group related number series operations in dedicated procedures
|
|
183
|
+
- Use meaningful variable names reflecting the new module structure
|
|
184
|
+
- Document migration changes for team knowledge sharing
|
|
185
|
+
|
|
186
|
+
### Error Handling
|
|
187
|
+
- Implement proper error handling for new module methods
|
|
188
|
+
- Provide clear error messages referencing the new architecture
|
|
189
|
+
- Handle potential exceptions from improved validation
|
|
190
|
+
|
|
191
|
+
### Future-Proofing
|
|
192
|
+
- Follow Microsoft's guidance for Business Foundation patterns
|
|
193
|
+
- Prepare for additional enhancements in future releases
|
|
194
|
+
- Design code to leverage evolving module capabilities
|
|
195
|
+
|
|
196
|
+
## Common Migration Pitfalls
|
|
197
|
+
|
|
198
|
+
### Incomplete Method Replacement
|
|
199
|
+
Ensure all NoSeriesManagement method calls are properly replaced with equivalent new module methods.
|
|
200
|
+
|
|
201
|
+
### Parameter Mapping Issues
|
|
202
|
+
Carefully map parameters between old and new method signatures to maintain functional equivalence.
|
|
203
|
+
|
|
204
|
+
### Testing Coverage Gaps
|
|
205
|
+
Thoroughly test all number generation scenarios, especially edge cases that may behave differently.
|
|
206
|
+
|
|
207
|
+
*Complete BC24+ implementation examples: samples/no-series-module-bc24.md*
|
|
208
|
+
*Legacy migration guide: bc24-no-series-conversion-guide.md*
|
|
209
|
+
*New validation patterns: no-series-validation-module-bc24.md*
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "No. Series Validation Module Patterns (BC24+)"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "24+"
|
|
6
|
+
tags: ["no-series-validation", "business-foundation", "module-validation", "bc24-migration", "data-integrity"]
|
|
7
|
+
prerequisites: ["no-series-module-patterns-bc24", "validation-frameworks", "business-foundation-architecture"]
|
|
8
|
+
samples: "samples/no-series-validation-module-bc24.md"
|
|
9
|
+
related_topics: ["no-series-module-patterns-bc24", "no-series-validation-patterns", "bc24-migration-patterns"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# No. Series Validation Module Patterns (BC24+)
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
The new No. Series module in BC24+ provides enhanced validation capabilities through the Business Foundation layer. These patterns leverage the improved validation methods and modular architecture to ensure number sequence integrity with better performance and clearer error handling.
|
|
17
|
+
|
|
18
|
+
**Key Benefit**: Utilizes the new No. Series module's built-in validation capabilities for more reliable and maintainable number sequence validation with enhanced error reporting.
|
|
19
|
+
|
|
20
|
+
## New Validation Architecture
|
|
21
|
+
|
|
22
|
+
### Business Foundation Integration
|
|
23
|
+
The No. Series module provides native validation methods that integrate seamlessly with the Business Foundation layer's error handling and logging systems.
|
|
24
|
+
|
|
25
|
+
### Enhanced Validation Methods
|
|
26
|
+
New dedicated validation methods replace complex custom validation logic:
|
|
27
|
+
- Built-in format validation
|
|
28
|
+
- Automatic relationship validation
|
|
29
|
+
- Improved error messaging and diagnostics
|
|
30
|
+
|
|
31
|
+
### Modular Validation Design
|
|
32
|
+
Validation is now distributed across focused codeunits rather than centralized in legacy NoSeriesManagement.
|
|
33
|
+
|
|
34
|
+
## Essential Validation Patterns
|
|
35
|
+
|
|
36
|
+
### Number Format Validation
|
|
37
|
+
**Legacy Pattern (BC14-23)**:
|
|
38
|
+
```al
|
|
39
|
+
// Custom validation logic required
|
|
40
|
+
if not NoSeriesMgt.CheckFormat("No.", "No. Series") then
|
|
41
|
+
Error('Invalid format');
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**New Pattern (BC24+)**:
|
|
45
|
+
```al
|
|
46
|
+
if not NoSeries.IsValidNo("No.", "No. Series") then
|
|
47
|
+
Error('Number %1 is not valid for series %2', "No.", "No. Series");
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Series Existence Validation
|
|
51
|
+
**New Pattern (BC24+)**:
|
|
52
|
+
```al
|
|
53
|
+
NoSeries.VerifySeriesExists("No. Series");
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Manual Number Validation
|
|
57
|
+
**Legacy Pattern**:
|
|
58
|
+
```al
|
|
59
|
+
NoSeriesMgt.TestManual("No. Series");
|
|
60
|
+
if not NoSeriesMgt.ManualNoAllowed("No. Series") then
|
|
61
|
+
Error('Manual numbers not allowed');
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**New Pattern**:
|
|
65
|
+
```al
|
|
66
|
+
NoSeries.TestManual("No. Series");
|
|
67
|
+
// Built-in error handling provides clear messaging
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Series Relationship Validation
|
|
71
|
+
**New Pattern (BC24+)**:
|
|
72
|
+
```al
|
|
73
|
+
if not NoSeries.AreRelated(CurrentSeries, NewSeries) then
|
|
74
|
+
Error('Series %1 and %2 are not related', CurrentSeries, NewSeries);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Advanced Validation Integration
|
|
78
|
+
|
|
79
|
+
### Batch Validation
|
|
80
|
+
Utilize NoSeriesBatch for validating multiple number allocations:
|
|
81
|
+
```al
|
|
82
|
+
// Validate batch allocation feasibility
|
|
83
|
+
if not NoSeriesBatch.CanAllocateNumbers("No. Series", RequiredCount) then
|
|
84
|
+
Error('Cannot allocate %1 numbers from series %2', RequiredCount, "No. Series");
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Date-Based Validation
|
|
88
|
+
Leverage enhanced date validation in the new module:
|
|
89
|
+
```al
|
|
90
|
+
if not NoSeries.IsValidForDate("No. Series", "Posting Date") then
|
|
91
|
+
Error('Series %1 is not valid for date %2', "No. Series", "Posting Date");
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Cross-Series Validation
|
|
95
|
+
```al
|
|
96
|
+
// Validate consistency across related series
|
|
97
|
+
NoSeries.ValidateRelatedSeries("Primary Series", "Related Series");
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Migration from Legacy Validation
|
|
101
|
+
|
|
102
|
+
### Obsolete Validation Patterns
|
|
103
|
+
**Remove Legacy Patterns**:
|
|
104
|
+
- Custom format checking logic
|
|
105
|
+
- Manual series relationship validation
|
|
106
|
+
- Complex date range validation
|
|
107
|
+
- Direct table validation queries
|
|
108
|
+
|
|
109
|
+
**Replace with Module Methods**:
|
|
110
|
+
- Use built-in `IsValidNo()` for format validation
|
|
111
|
+
- Use `AreRelated()` for relationship checking
|
|
112
|
+
- Use `TestManual()` for manual number validation
|
|
113
|
+
- Use `VerifySeriesExists()` for existence checking
|
|
114
|
+
|
|
115
|
+
### Event Migration Strategy
|
|
116
|
+
**Obsolete Events** (no direct replacement):
|
|
117
|
+
- OnBeforeGetNextNo events
|
|
118
|
+
- OnAfterGetNextNo events
|
|
119
|
+
- Custom validation events in NoSeriesManagement
|
|
120
|
+
|
|
121
|
+
**New Approach**:
|
|
122
|
+
```al
|
|
123
|
+
// Implement validation through direct method calls
|
|
124
|
+
// Use error handling for validation failures
|
|
125
|
+
// Leverage module's built-in logging capabilities
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Enhanced Error Handling
|
|
129
|
+
|
|
130
|
+
### Improved Error Messages
|
|
131
|
+
The new module provides more descriptive error messages with context:
|
|
132
|
+
```al
|
|
133
|
+
// Automatic error context from module
|
|
134
|
+
NoSeries.GetNextNo("No. Series", WorkDate());
|
|
135
|
+
// Provides detailed error if series is invalid, exhausted, or misconfigured
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Structured Exception Handling
|
|
139
|
+
```al
|
|
140
|
+
if not NoSeries.TryGetNextNo(NextNo, "No. Series", WorkDate()) then begin
|
|
141
|
+
// Handle specific validation failure scenarios
|
|
142
|
+
HandleNumberGenerationError("No. Series");
|
|
143
|
+
end;
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Validation Result Processing
|
|
147
|
+
```al
|
|
148
|
+
ValidationResult := NoSeries.ValidateSeriesConfiguration("No. Series");
|
|
149
|
+
if not ValidationResult.Success then
|
|
150
|
+
ProcessValidationErrors(ValidationResult);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Performance-Optimized Validation
|
|
154
|
+
|
|
155
|
+
### Reduced Database Queries
|
|
156
|
+
The new module optimizes validation with fewer database round-trips:
|
|
157
|
+
```al
|
|
158
|
+
// Single call validates multiple aspects
|
|
159
|
+
if NoSeries.IsReadyForGeneration("No. Series", WorkDate()) then
|
|
160
|
+
ProcessNumberGeneration();
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Cached Validation Results
|
|
164
|
+
```al
|
|
165
|
+
// Module handles caching internally
|
|
166
|
+
// Repeated validation calls are optimized
|
|
167
|
+
for i := 1 to DocumentCount do
|
|
168
|
+
NoSeries.GetNextNo("No. Series", WorkDate()); // Cached validation
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Batch Validation Optimization
|
|
172
|
+
```al
|
|
173
|
+
// Validate entire batch before processing
|
|
174
|
+
ValidationResults := NoSeriesBatch.ValidateBatchAllocation("No. Series", BatchSize);
|
|
175
|
+
if ValidationResults.AllValid then
|
|
176
|
+
ProcessBatch();
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Integration with Business Processes
|
|
180
|
+
|
|
181
|
+
### Transaction Validation
|
|
182
|
+
```al
|
|
183
|
+
// Validate number series within transaction context
|
|
184
|
+
NoSeries.ValidateForTransaction("No. Series", TransactionDate);
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Multi-Company Validation
|
|
188
|
+
```al
|
|
189
|
+
// Enhanced support for multi-company scenarios
|
|
190
|
+
NoSeries.ValidateAcrossCompanies("No. Series", CompanyList);
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Audit Trail Integration
|
|
194
|
+
```al
|
|
195
|
+
// Built-in audit trail support
|
|
196
|
+
NoSeries.LogValidationActivity("No. Series", ValidationAction::Validate);
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Best Practices for BC24+
|
|
200
|
+
|
|
201
|
+
### Leverage Built-In Validation
|
|
202
|
+
- Use module's native validation methods instead of custom logic
|
|
203
|
+
- Trust the module's error handling and messaging
|
|
204
|
+
- Utilize built-in logging and audit capabilities
|
|
205
|
+
|
|
206
|
+
### Simplify Validation Logic
|
|
207
|
+
- Remove complex custom validation patterns
|
|
208
|
+
- Focus on business-specific validation requirements
|
|
209
|
+
- Let the module handle technical validation aspects
|
|
210
|
+
|
|
211
|
+
### Error Handling Strategy
|
|
212
|
+
- Implement graceful degradation for validation failures
|
|
213
|
+
- Provide business-friendly error messages
|
|
214
|
+
- Use try-methods for scenarios where validation failure is expected
|
|
215
|
+
|
|
216
|
+
## Common Migration Pitfalls
|
|
217
|
+
|
|
218
|
+
### Over-Validation
|
|
219
|
+
Avoid duplicating validation that the new module already performs internally.
|
|
220
|
+
|
|
221
|
+
### Event Dependency
|
|
222
|
+
Don't rely on obsolete events - redesign validation logic using direct method calls.
|
|
223
|
+
|
|
224
|
+
### Custom Table Access
|
|
225
|
+
Avoid direct table manipulation - use module methods for all series operations.
|
|
226
|
+
|
|
227
|
+
## Testing Validation Migration
|
|
228
|
+
|
|
229
|
+
### Functional Validation Testing
|
|
230
|
+
- Verify all validation scenarios work with new module methods
|
|
231
|
+
- Test error handling and messaging improvements
|
|
232
|
+
- Validate performance improvements in validation-heavy scenarios
|
|
233
|
+
|
|
234
|
+
### Integration Testing
|
|
235
|
+
- Test validation integration with existing business processes
|
|
236
|
+
- Verify compatibility with custom validation requirements
|
|
237
|
+
- Test cross-series validation scenarios
|
|
238
|
+
|
|
239
|
+
### Regression Testing
|
|
240
|
+
- Ensure existing validation behavior is preserved
|
|
241
|
+
- Test edge cases and error conditions
|
|
242
|
+
- Validate performance under load
|
|
243
|
+
|
|
244
|
+
*Complete BC24+ validation examples: samples/no-series-validation-module-bc24.md*
|
|
245
|
+
*Core module patterns: no-series-module-patterns-bc24.md*
|
|
246
|
+
*Migration guidance: bc24-no-series-conversion-guide.md*
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "No Series Validation Patterns"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14..23"
|
|
6
|
+
tags: ["no-series-validation", "data-validation", "integrity-checking", "error-prevention"]
|
|
7
|
+
prerequisites: ["no-series-implementation-patterns", "validation-frameworks", "error-handling"]
|
|
8
|
+
samples: "samples/no-series-validation.md"
|
|
9
|
+
related_topics: ["no-series-implementation-patterns", "data-integrity-patterns"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# No Series Validation Patterns
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
No Series Validation Patterns provide comprehensive approaches for validating number sequences, ensuring data integrity, and preventing common numbering issues in Business Central applications. These patterns help maintain sequence integrity and compliance with business rules.
|
|
17
|
+
|
|
18
|
+
**Key Benefit**: Ensures number sequence integrity and compliance through systematic validation that prevents data corruption and maintains business rule adherence.
|
|
19
|
+
|
|
20
|
+
## Core Validation Architecture
|
|
21
|
+
|
|
22
|
+
### Multi-Layer Validation Strategy
|
|
23
|
+
Implement validation at multiple layers including input validation, business rule validation, and integrity validation to ensure comprehensive coverage.
|
|
24
|
+
|
|
25
|
+
### Real-Time vs. Batch Validation
|
|
26
|
+
Design validation strategies that balance real-time validation for immediate feedback with batch validation for comprehensive integrity checking.
|
|
27
|
+
|
|
28
|
+
### Validation Result Management
|
|
29
|
+
Create systems for managing validation results, tracking issues, and coordinating resolution efforts across different validation scenarios.
|
|
30
|
+
|
|
31
|
+
## Essential Validation Patterns
|
|
32
|
+
|
|
33
|
+
### Format Validation
|
|
34
|
+
Implement validation patterns that ensure generated numbers conform to expected formats, character sets, and length requirements.
|
|
35
|
+
|
|
36
|
+
### Uniqueness Validation
|
|
37
|
+
Design uniqueness checking that can efficiently validate number uniqueness across large datasets while maintaining performance.
|
|
38
|
+
|
|
39
|
+
### Sequence Integrity Validation
|
|
40
|
+
Create validation patterns that check for sequence continuity, gap detection, and sequence corruption issues.
|
|
41
|
+
|
|
42
|
+
## Advanced Validation Techniques
|
|
43
|
+
|
|
44
|
+
### Cross-Reference Validation
|
|
45
|
+
Implement validation that checks number consistency across related tables and ensures referential integrity in number usage.
|
|
46
|
+
|
|
47
|
+
### Business Rule Validation
|
|
48
|
+
Design validation patterns that ensure number generation and usage comply with specific business rules and policies.
|
|
49
|
+
|
|
50
|
+
### Historical Validation
|
|
51
|
+
Create validation capabilities that can check historical number usage and detect retroactive integrity issues.
|
|
52
|
+
|
|
53
|
+
## Validation Framework Architecture
|
|
54
|
+
|
|
55
|
+
### Configurable Validation Rules
|
|
56
|
+
- Design validation frameworks that support configurable rules for different numbering scenarios
|
|
57
|
+
- Enable business users to configure validation criteria through setup interfaces
|
|
58
|
+
- Support dynamic validation rule changes without code modification
|
|
59
|
+
- Provide validation rule testing and simulation capabilities
|
|
60
|
+
|
|
61
|
+
### Validation Pipeline
|
|
62
|
+
Implement sequential validation checks with conditional execution and performance monitoring.
|
|
63
|
+
|
|
64
|
+
## Core Implementation
|
|
65
|
+
|
|
66
|
+
### Error Detection & Reporting
|
|
67
|
+
Categorize errors by severity, provide detailed reports, and implement automated issue detection.
|
|
68
|
+
|
|
69
|
+
### Performance Optimization
|
|
70
|
+
Design efficient algorithms, incremental validation, and intelligent caching for optimal performance.
|
|
71
|
+
|
|
72
|
+
### Business Process Integration
|
|
73
|
+
Integrate with workflows, support transaction validation, and provide real-time feedback.
|
|
74
|
+
|
|
75
|
+
## Advanced Capabilities
|
|
76
|
+
|
|
77
|
+
### Monitoring & Compliance
|
|
78
|
+
Implement metrics collection, health monitoring, and audit trail validation to ensure system reliability and regulatory compliance.
|
|
79
|
+
|
|
80
|
+
### Regulatory Compliance
|
|
81
|
+
Design validation that supports regulatory compliance requirements for number sequence management and documentation.
|
|
82
|
+
|
|
83
|
+
### Compliance Reporting
|
|
84
|
+
Create reporting capabilities that demonstrate compliance with numbering policies and regulatory requirements.
|
|
85
|
+
|
|
86
|
+
## Recovery and Remediation
|
|
87
|
+
|
|
88
|
+
### Validation Failure Recovery
|
|
89
|
+
Design recovery procedures for scenarios where validation failures indicate data integrity issues requiring correction.
|
|
90
|
+
|
|
91
|
+
### Automated Remediation
|
|
92
|
+
Implement automated remediation capabilities for common validation issues that can be safely resolved automatically.
|
|
93
|
+
|
|
94
|
+
### Manual Intervention Support
|
|
95
|
+
Provide tools and procedures for manual intervention in complex validation scenarios requiring human judgment.
|
|
96
|
+
|
|
97
|
+
## Implementation Guidelines
|
|
98
|
+
|
|
99
|
+
### Testing & Best Practices
|
|
100
|
+
Design comprehensive testing strategies, implement early validation, provide actionable feedback, and maintain clear documentation.
|
|
101
|
+
|
|
102
|
+
### Common Pitfalls
|
|
103
|
+
Avoid over-validation, validation gaps, and false positives through balanced design and comprehensive coverage.
|
|
104
|
+
|
|
105
|
+
*Complete validation implementation examples: samples/no-series-validation.md*
|
|
106
|
+
*No series implementation: no-series-implementation-patterns.md*
|
|
107
|
+
*Data integrity frameworks: data-integrity-patterns.md*
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "OData Query Performance Optimization"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["odata", "query-performance", "api-optimization"]
|
|
7
|
+
samples: "samples/odata-query-optimization.md"
|
|
8
|
+
---
|
|
9
|
+
# OData Query Performance Optimization
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
OData query performance in BC API Pages requires understanding how OData expressions translate to SQL queries and how table structure affects execution performance. Proper optimization techniques can dramatically improve API response times and reduce resource consumption.
|
|
14
|
+
|
|
15
|
+
The BC platform automatically translates OData queries into SQL operations against the underlying database. Understanding this translation process helps identify optimization opportunities and avoid performance anti-patterns in API implementations.
|
|
16
|
+
|
|
17
|
+
Query performance varies significantly based on data volume, table structure, indexing strategy, and query complexity. Systematic optimization approaches address these factors to achieve predictable performance characteristics.
|
|
18
|
+
|
|
19
|
+
## Query Translation Mechanisms
|
|
20
|
+
|
|
21
|
+
OData filter expressions map to SQL WHERE clauses with varying efficiency depending on filter complexity and available table keys. Simple equality filters on indexed fields provide optimal performance.
|
|
22
|
+
|
|
23
|
+
Complex filter expressions involving multiple fields, functions, or nested conditions may result in less efficient SQL queries. Understanding the translation patterns helps structure OData queries for optimal database execution.
|
|
24
|
+
|
|
25
|
+
The BC platform may choose different execution strategies based on available indexes and query complexity. Monitoring actual SQL execution provides insight into optimization opportunities.
|
|
26
|
+
|
|
27
|
+
## Filter Optimization Strategies
|
|
28
|
+
|
|
29
|
+
Structure OData filters to leverage available table keys and indexes. Leading filter conditions should target the most selective indexed fields to minimize result set size early in query execution.
|
|
30
|
+
|
|
31
|
+
Avoid complex expressions in filter conditions that prevent index usage. Simple comparisons perform better than function calls or complex logical combinations that cannot be optimized by the query engine.
|
|
32
|
+
|
|
33
|
+
Consider the order of filter conditions in complex expressions. The BC query optimizer may not reorder conditions for optimal performance, making condition ordering an important performance factor.
|
|
34
|
+
|
|
35
|
+
## Projection and Field Selection
|
|
36
|
+
|
|
37
|
+
Use OData $select queries to limit returned fields to only those required by the API consumer. This reduces network transfer overhead and can improve query performance by avoiding unnecessary field retrieval.
|
|
38
|
+
|
|
39
|
+
Avoid selecting large text fields, BLOB fields, or complex calculated fields unless specifically required. These field types consume significant resources and can dramatically impact query performance.
|
|
40
|
+
|
|
41
|
+
Strategic field selection can sometimes influence query execution plans by reducing the data volume processed during query execution and result set construction.
|
|
42
|
+
|
|
43
|
+
## Sorting and Pagination Performance
|
|
44
|
+
|
|
45
|
+
OData $orderby operations require careful optimization to avoid performance issues with large result sets. Ensure sort fields have appropriate indexes or are part of existing table key structures.
|
|
46
|
+
|
|
47
|
+
Implement proper pagination using $skip and $top parameters to limit result set size. Large result sets without pagination can cause timeout issues and resource exhaustion in both BC and API consumers.
|
|
48
|
+
|
|
49
|
+
Consider the impact of sort operations on temporary storage requirements. Complex sorts on large datasets may require significant temporary storage allocation during query execution.
|
|
50
|
+
|
|
51
|
+
## Aggregation Query Optimization
|
|
52
|
+
|
|
53
|
+
OData aggregation queries using $apply operations require special consideration for performance optimization. These queries can be particularly resource-intensive and may benefit from specialized indexing strategies.
|
|
54
|
+
|
|
55
|
+
Consider using SIFT technology for frequently executed aggregation operations. SIFT provides pre-calculated aggregations that can dramatically improve performance for common aggregation patterns.
|
|
56
|
+
|
|
57
|
+
Monitor aggregation query performance closely as these operations can consume significant CPU and memory resources, especially with large datasets and complex grouping requirements.
|
|
58
|
+
|
|
59
|
+
## Expansion and Navigation Performance
|
|
60
|
+
|
|
61
|
+
OData $expand operations that traverse table relationships require optimization to prevent performance issues. Each expansion level adds complexity and resource requirements to query execution.
|
|
62
|
+
|
|
63
|
+
Limit expansion depth and scope to only required related data. Deep expansions across multiple table relationships can result in cartesian product scenarios that consume excessive resources.
|
|
64
|
+
|
|
65
|
+
Consider the performance impact of expanding one-to-many relationships which can dramatically increase result set size and processing requirements.
|
|
66
|
+
|
|
67
|
+
## Caching and Performance Patterns
|
|
68
|
+
|
|
69
|
+
Understand BC platform caching behavior for API queries to optimize for cache effectiveness. Repeated queries with identical parameters may benefit from platform-level caching mechanisms.
|
|
70
|
+
|
|
71
|
+
Design API query patterns that align with BC caching strategies. This may involve structuring queries to maximize cache hit ratios and minimize cache invalidation scenarios.
|
|
72
|
+
|
|
73
|
+
Consider implementing application-level caching for expensive queries that don't require real-time data. This can significantly reduce database load and improve overall system performance.
|
|
74
|
+
|
|
75
|
+
## Resource Management
|
|
76
|
+
|
|
77
|
+
Monitor resource consumption for API queries including CPU utilization, memory usage, and database connection requirements. High-resource queries can impact overall system performance.
|
|
78
|
+
|
|
79
|
+
Implement appropriate timeout settings for API queries to prevent resource exhaustion from long-running operations. Balance timeout values with legitimate query execution requirements.
|
|
80
|
+
|
|
81
|
+
Consider connection pooling and resource allocation strategies for high-volume API scenarios. Resource contention can significantly impact query performance under load.
|
|
82
|
+
|
|
83
|
+
## Performance Testing and Validation
|
|
84
|
+
|
|
85
|
+
Establish performance baselines for critical API queries under realistic data volumes. Performance characteristics often change dramatically as data volumes increase.
|
|
86
|
+
|
|
87
|
+
Test query performance with production-like data distributions and volumes. Development environment testing may not reveal performance issues that occur with production data characteristics.
|
|
88
|
+
|
|
89
|
+
Implement automated performance monitoring for critical API endpoints to detect performance degradation early and enable proactive optimization efforts.
|
|
90
|
+
|
|
91
|
+
## Troubleshooting Performance Issues
|
|
92
|
+
|
|
93
|
+
Use BC telemetry and database performance monitoring tools to identify slow-performing queries and understand root cause performance issues.
|
|
94
|
+
|
|
95
|
+
Analyze actual SQL query execution plans generated from OData queries to identify optimization opportunities and understand query execution characteristics.
|
|
96
|
+
|
|
97
|
+
Monitor for common performance anti-patterns including table scans, excessive temporary storage usage, and resource contention issues that impact query execution.
|
|
98
|
+
|
|
99
|
+
## Best Practices
|
|
100
|
+
|
|
101
|
+
Design OData query patterns based on available table structures and indexing strategies rather than generic OData capabilities. Align query design with underlying database optimization principles.
|
|
102
|
+
|
|
103
|
+
Balance query functionality with performance requirements. Complex OData queries provide flexibility but may sacrifice performance compared to simpler, more targeted query approaches.
|
|
104
|
+
|
|
105
|
+
Document performance assumptions and optimization decisions for critical API endpoints. This documentation supports ongoing performance management and troubleshooting efforts.
|