@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,360 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "BC24 No. Series Conversion Guide"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "24+"
|
|
6
|
+
tags: ["bc24-migration", "no-series-conversion", "legacy-modernization", "breaking-changes", "conversion-guide"]
|
|
7
|
+
prerequisites: ["no-series-implementation-patterns", "no-series-module-patterns-bc24", "business-foundation-architecture"]
|
|
8
|
+
samples: "samples/bc24-no-series-conversion.md"
|
|
9
|
+
related_topics: ["no-series-module-patterns-bc24", "no-series-validation-module-bc24", "no-series-implementation-patterns"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# BC24 No. Series Conversion Guide
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
This guide provides comprehensive step-by-step instructions for converting legacy No. Series implementations (BC14-23) to the new Business Foundation module architecture (BC24+). It addresses Microsoft's official obsoletions and provides practical conversion strategies.
|
|
17
|
+
|
|
18
|
+
**Critical Timeline**: NoSeriesManagement (Codeunit 396) is obsolete in BC24.0 - immediate conversion required for compatibility.
|
|
19
|
+
|
|
20
|
+
## Conversion Overview
|
|
21
|
+
|
|
22
|
+
### What Changed in BC24
|
|
23
|
+
- **NoSeriesManagement (Codeunit 396)**: Completely obsolete
|
|
24
|
+
- **New Architecture**: Business Foundation modular design
|
|
25
|
+
- **New Codeunits**: No. Series (310), NoSeriesBatch
|
|
26
|
+
- **Table Changes**: Sales/Purchase series tables merged into generic No. Series Line
|
|
27
|
+
- **Method Changes**: Simplified parameter structures and clearer method names
|
|
28
|
+
|
|
29
|
+
### Conversion Scope Assessment
|
|
30
|
+
Before starting conversion, inventory your codebase:
|
|
31
|
+
|
|
32
|
+
1. **Search Patterns**: `NoSeriesMgt`, `NoSeriesManagement`
|
|
33
|
+
2. **Method Usage**: `InitSeries`, `GetNextNo`, `TestManual`, `SelectSeries`
|
|
34
|
+
3. **Event Subscriptions**: Any events on obsolete codeunit
|
|
35
|
+
4. **Custom Extensions**: Extensions of NoSeriesManagement
|
|
36
|
+
5. **Table References**: Direct access to No. Series tables
|
|
37
|
+
|
|
38
|
+
## Step-by-Step Conversion Process
|
|
39
|
+
|
|
40
|
+
### Step 1: Inventory and Planning
|
|
41
|
+
|
|
42
|
+
#### Code Discovery
|
|
43
|
+
```al
|
|
44
|
+
// Search your codebase for these patterns:
|
|
45
|
+
// 1. Variable declarations
|
|
46
|
+
var NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
47
|
+
|
|
48
|
+
// 2. Method calls
|
|
49
|
+
NoSeriesMgt.InitSeries(...)
|
|
50
|
+
NoSeriesMgt.GetNextNo(...)
|
|
51
|
+
NoSeriesMgt.TestManual(...)
|
|
52
|
+
NoSeriesMgt.SelectSeries(...)
|
|
53
|
+
|
|
54
|
+
// 3. Event subscriptions
|
|
55
|
+
[EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnBeforeGetNextNo', '', true, true)]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### Create Conversion Matrix
|
|
59
|
+
| Legacy Method | New Method | Conversion Notes |
|
|
60
|
+
|---------------|------------|------------------|
|
|
61
|
+
| `InitSeries()` | `GetNextNo()` | Simplified parameters |
|
|
62
|
+
| `GetNextNo(..., false)` | `PeekNextNo()` | Preview only, doesn't consume |
|
|
63
|
+
| `GetNextNo(..., true)` | `GetNextNo()` | Allocates and consumes number |
|
|
64
|
+
| `TestManual()` | `TestManual()` | Same name, new codeunit |
|
|
65
|
+
| `SelectSeries()` | `LookupRelatedNoSeries()` | Different parameter structure |
|
|
66
|
+
|
|
67
|
+
### Step 2: Core Method Conversions
|
|
68
|
+
|
|
69
|
+
#### InitSeries Conversion
|
|
70
|
+
**Before (BC14-23)**:
|
|
71
|
+
```al
|
|
72
|
+
var
|
|
73
|
+
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
74
|
+
begin
|
|
75
|
+
NoSeriesMgt.InitSeries(GetNoSeriesCode(), xRec."No. Series", 0D, "No.", "No. Series");
|
|
76
|
+
end;
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**After (BC24+)**:
|
|
80
|
+
```al
|
|
81
|
+
var
|
|
82
|
+
NoSeries: Codeunit "No. Series";
|
|
83
|
+
begin
|
|
84
|
+
if "No." = '' then
|
|
85
|
+
"No." := NoSeries.GetNextNo("No. Series", WorkDate());
|
|
86
|
+
end;
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### GetNextNo Conversion
|
|
90
|
+
**Before**:
|
|
91
|
+
```al
|
|
92
|
+
NextNo := NoSeriesMgt.GetNextNo("No. Series", WorkDate(), false); // Peek only
|
|
93
|
+
ActualNo := NoSeriesMgt.GetNextNo("No. Series", WorkDate(), true); // Allocate
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**After**:
|
|
97
|
+
```al
|
|
98
|
+
NextNo := NoSeries.PeekNextNo("No. Series", WorkDate()); // Peek only
|
|
99
|
+
ActualNo := NoSeries.GetNextNo("No. Series", WorkDate()); // Allocate
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### When to Use GetNextNo vs PeekNextNo
|
|
103
|
+
|
|
104
|
+
**Use `PeekNextNo()` for**:
|
|
105
|
+
- **UI Display**: Showing next number in forms before user commits
|
|
106
|
+
- **Preview Operations**: Preview posting scenarios
|
|
107
|
+
- **Validation Logic**: Checking number availability without consuming
|
|
108
|
+
- **Form Initialization**: Displaying what number would be assigned
|
|
109
|
+
- **Testing/Diagnostics**: Verifying series configuration
|
|
110
|
+
|
|
111
|
+
**Use `GetNextNo()` for**:
|
|
112
|
+
- **Document Creation**: Actually creating/posting business documents
|
|
113
|
+
- **Final Assignment**: Committing to use the number permanently
|
|
114
|
+
- **Transaction Completion**: When business logic is ready to consume the number
|
|
115
|
+
- **Batch Operations**: Allocating numbers for confirmed processing
|
|
116
|
+
|
|
117
|
+
**Decision Framework**:
|
|
118
|
+
```al
|
|
119
|
+
// Ask yourself: "Am I ready to permanently use this number?"
|
|
120
|
+
if IsPreviewMode or IsDisplayOnly or IsValidationCheck then
|
|
121
|
+
NextNo := NoSeries.PeekNextNo("No. Series", WorkDate())
|
|
122
|
+
else
|
|
123
|
+
NextNo := NoSeries.GetNextNo("No. Series", WorkDate());
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
#### Migration Opportunity: Add Preview Posting Support
|
|
127
|
+
|
|
128
|
+
**Legacy Pattern** (many old implementations):
|
|
129
|
+
```al
|
|
130
|
+
// Old code often only supported final posting
|
|
131
|
+
procedure PostDocument()
|
|
132
|
+
begin
|
|
133
|
+
"No." := NoSeriesMgt.GetNextNo("No. Series", WorkDate(), true);
|
|
134
|
+
// ... posting logic
|
|
135
|
+
end;
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Enhanced Pattern** (BC24+ with preview support):
|
|
139
|
+
```al
|
|
140
|
+
procedure PostDocument(Preview: Boolean)
|
|
141
|
+
begin
|
|
142
|
+
if Preview then
|
|
143
|
+
"No." := NoSeries.PeekNextNo("No. Series", WorkDate())
|
|
144
|
+
else
|
|
145
|
+
"No." := NoSeries.GetNextNo("No. Series", WorkDate());
|
|
146
|
+
// ... posting logic
|
|
147
|
+
end;
|
|
148
|
+
|
|
149
|
+
procedure PreviewPosting()
|
|
150
|
+
begin
|
|
151
|
+
PostDocument(true); // Uses PeekNextNo
|
|
152
|
+
end;
|
|
153
|
+
|
|
154
|
+
procedure FinalPosting()
|
|
155
|
+
begin
|
|
156
|
+
PostDocument(false); // Uses GetNextNo
|
|
157
|
+
end;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Modernization Questions to Ask**:
|
|
161
|
+
- Does this posting routine support preview mode?
|
|
162
|
+
- Could users benefit from seeing the assigned number before committing?
|
|
163
|
+
- Is there a "Preview Posting" action that should show the next number?
|
|
164
|
+
- Would preview posting improve user experience in this scenario?
|
|
165
|
+
|
|
166
|
+
#### Manual Testing Conversion
|
|
167
|
+
**Before**:
|
|
168
|
+
```al
|
|
169
|
+
NoSeriesMgt.TestManual("No. Series");
|
|
170
|
+
if NoSeriesMgt.ManualNoAllowed("No. Series") then
|
|
171
|
+
AllowManual := true;
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**After**:
|
|
175
|
+
```al
|
|
176
|
+
NoSeries.TestManual("No. Series"); // Built-in error handling
|
|
177
|
+
// ManualNoAllowed is replaced by TestManual with automatic error
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
#### Series Selection Conversion
|
|
181
|
+
**Before**:
|
|
182
|
+
```al
|
|
183
|
+
NoSeriesMgt.SelectSeries("No. Series", xRec."No. Series", "No. Series");
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**After**:
|
|
187
|
+
```al
|
|
188
|
+
NoSeries.LookupRelatedNoSeries("No. Series", "No. Series");
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Step 3: Advanced Pattern Conversions
|
|
192
|
+
|
|
193
|
+
#### Batch Operations
|
|
194
|
+
**New Capability (BC24+)**:
|
|
195
|
+
```al
|
|
196
|
+
var
|
|
197
|
+
NoSeriesBatch: Codeunit "No. Series - Batch";
|
|
198
|
+
NumberList: List of [Code[20]];
|
|
199
|
+
begin
|
|
200
|
+
NumberList := NoSeriesBatch.GetNextNos("No. Series", WorkDate(), BatchSize);
|
|
201
|
+
end;
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
#### Series Relationship Handling
|
|
205
|
+
**New Pattern (BC24+)**:
|
|
206
|
+
```al
|
|
207
|
+
if NoSeries.AreRelated("Primary Series", "Secondary Series") then
|
|
208
|
+
// Handle related series logic
|
|
209
|
+
ProcessRelatedSeries();
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Step 4: Event Migration Strategy
|
|
213
|
+
|
|
214
|
+
#### Obsolete Events (No Direct Replacement)
|
|
215
|
+
These events are removed in BC24 without direct replacement:
|
|
216
|
+
```al
|
|
217
|
+
// OBSOLETE - Remove these event subscriptions
|
|
218
|
+
[EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnBeforeGetNextNo', '', true, true)]
|
|
219
|
+
[EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnAfterGetNextNo', '', true, true)]
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### Alternative Approaches
|
|
223
|
+
```al
|
|
224
|
+
// Replace event-driven logic with direct method calls
|
|
225
|
+
procedure CustomGetNextNo(SeriesCode: Code[20]): Code[20]
|
|
226
|
+
var
|
|
227
|
+
NoSeries: Codeunit "No. Series";
|
|
228
|
+
NextNo: Code[20];
|
|
229
|
+
begin
|
|
230
|
+
// Pre-processing logic (replaces OnBeforeGetNextNo)
|
|
231
|
+
PreProcessNumberGeneration(SeriesCode);
|
|
232
|
+
|
|
233
|
+
// Get number
|
|
234
|
+
NextNo := NoSeries.GetNextNo(SeriesCode, WorkDate());
|
|
235
|
+
|
|
236
|
+
// Post-processing logic (replaces OnAfterGetNextNo)
|
|
237
|
+
PostProcessNumberGeneration(SeriesCode, NextNo);
|
|
238
|
+
|
|
239
|
+
exit(NextNo);
|
|
240
|
+
end;
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Step 5: Error Handling Migration
|
|
244
|
+
|
|
245
|
+
#### Enhanced Error Messages
|
|
246
|
+
**Before**:
|
|
247
|
+
```al
|
|
248
|
+
if not NoSeriesMgt.TestSeries("No. Series") then
|
|
249
|
+
Error('Series validation failed');
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**After**:
|
|
253
|
+
```al
|
|
254
|
+
// Built-in descriptive error messages
|
|
255
|
+
NoSeries.GetNextNo("No. Series", WorkDate()); // Automatic detailed errors
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
#### Try-Method Pattern
|
|
259
|
+
**New Approach (BC24+)**:
|
|
260
|
+
```al
|
|
261
|
+
if NoSeries.TryGetNextNo(NextNo, "No. Series", WorkDate()) then
|
|
262
|
+
ProcessSuccessfulGeneration(NextNo)
|
|
263
|
+
else
|
|
264
|
+
HandleGenerationFailure("No. Series");
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Step 6: Performance Optimization
|
|
268
|
+
|
|
269
|
+
#### Reduced Object Coupling
|
|
270
|
+
**Before**: Complex dependencies with NoSeriesManagement
|
|
271
|
+
**After**: Clean dependencies on focused No. Series module
|
|
272
|
+
|
|
273
|
+
#### Optimized Database Access
|
|
274
|
+
The new module provides better performance through:
|
|
275
|
+
- Reduced database queries
|
|
276
|
+
- Improved caching mechanisms
|
|
277
|
+
- Better concurrency handling
|
|
278
|
+
|
|
279
|
+
### Step 7: Testing Strategy
|
|
280
|
+
|
|
281
|
+
#### Functional Testing Checklist
|
|
282
|
+
- [ ] All number generation scenarios work correctly
|
|
283
|
+
- [ ] Manual number entry functions properly
|
|
284
|
+
- [ ] Series relationships are maintained
|
|
285
|
+
- [ ] Date-based generation works as expected
|
|
286
|
+
- [ ] Error handling provides appropriate messages
|
|
287
|
+
|
|
288
|
+
#### Performance Testing
|
|
289
|
+
- [ ] Number generation performance meets or exceeds legacy performance
|
|
290
|
+
- [ ] High-concurrency scenarios perform adequately
|
|
291
|
+
- [ ] Batch operations show expected performance improvements
|
|
292
|
+
|
|
293
|
+
#### Regression Testing
|
|
294
|
+
- [ ] Existing number sequences continue to work
|
|
295
|
+
- [ ] No gaps or duplicates in number generation
|
|
296
|
+
- [ ] Business process integration remains functional
|
|
297
|
+
|
|
298
|
+
## Common Conversion Challenges
|
|
299
|
+
|
|
300
|
+
### Challenge 1: Event Dependencies
|
|
301
|
+
**Problem**: Code relies on obsolete events
|
|
302
|
+
**Solution**: Redesign logic using direct method calls and procedure composition
|
|
303
|
+
|
|
304
|
+
### Challenge 2: Parameter Mapping
|
|
305
|
+
**Problem**: New methods have different parameter structures
|
|
306
|
+
**Solution**: Create wrapper procedures during transition period
|
|
307
|
+
|
|
308
|
+
### Challenge 3: Custom Extensions
|
|
309
|
+
**Problem**: Extensions of NoSeriesManagement no longer work
|
|
310
|
+
**Solution**: Implement custom logic using the new module's extensibility points
|
|
311
|
+
|
|
312
|
+
### Challenge 4: Complex Validation Logic
|
|
313
|
+
**Problem**: Custom validation tied to obsolete methods
|
|
314
|
+
**Solution**: Leverage new module's built-in validation capabilities
|
|
315
|
+
|
|
316
|
+
## Conversion Validation
|
|
317
|
+
|
|
318
|
+
### Pre-Conversion Checklist
|
|
319
|
+
- [ ] Complete inventory of NoSeriesManagement usage
|
|
320
|
+
- [ ] Backup of current implementation
|
|
321
|
+
- [ ] Test plan for all affected scenarios
|
|
322
|
+
- [ ] Rollback strategy prepared
|
|
323
|
+
|
|
324
|
+
### Post-Conversion Checklist
|
|
325
|
+
- [ ] All obsolete references removed
|
|
326
|
+
- [ ] New module methods properly implemented
|
|
327
|
+
- [ ] Error handling provides appropriate feedback
|
|
328
|
+
- [ ] Performance meets expectations
|
|
329
|
+
- [ ] Documentation updated
|
|
330
|
+
|
|
331
|
+
### Production Deployment Checklist
|
|
332
|
+
- [ ] Comprehensive testing in sandbox environment
|
|
333
|
+
- [ ] User acceptance testing completed
|
|
334
|
+
- [ ] Deployment runbook prepared
|
|
335
|
+
- [ ] Rollback procedures tested
|
|
336
|
+
|
|
337
|
+
## Best Practices
|
|
338
|
+
|
|
339
|
+
### During Conversion
|
|
340
|
+
- Convert one method at a time to minimize risk
|
|
341
|
+
- Test thoroughly after each conversion step
|
|
342
|
+
- Maintain parallel implementations during transition if needed
|
|
343
|
+
- Document all changes for team knowledge transfer
|
|
344
|
+
|
|
345
|
+
### Post-Conversion
|
|
346
|
+
- Leverage new module capabilities for enhanced functionality
|
|
347
|
+
- Simplify validation logic using built-in methods
|
|
348
|
+
- Monitor performance improvements
|
|
349
|
+
- Plan for future module enhancements
|
|
350
|
+
|
|
351
|
+
### Team Coordination
|
|
352
|
+
- Establish conversion standards across development team
|
|
353
|
+
- Create shared conversion utilities and wrapper procedures
|
|
354
|
+
- Coordinate timing of conversion across related projects
|
|
355
|
+
- Share lessons learned and best practices
|
|
356
|
+
|
|
357
|
+
*Complete conversion examples: samples/bc24-no-series-conversion.md*
|
|
358
|
+
*BC24+ implementation patterns: no-series-module-patterns-bc24.md*
|
|
359
|
+
*BC24+ validation patterns: no-series-validation-module-bc24.md*
|
|
360
|
+
*Legacy patterns (reference): no-series-implementation-patterns.md*
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Case Statement Performance and Best Practices"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["case", "performance", "optimization", "control-flow"]
|
|
7
|
+
prerequisites: ["case-statement-syntax", "performance-fundamentals"]
|
|
8
|
+
samples: "samples/case-performance-optimization.md"
|
|
9
|
+
---
|
|
10
|
+
# Case Statement Performance and Best Practices
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Case statements provide better performance than cascaded IF statements for multiple value comparisons, but optimization strategies can significantly improve execution efficiency. Understanding performance characteristics enables optimal control flow design for high-volume BC operations.
|
|
15
|
+
|
|
16
|
+
**Performance Principle**: Case statements evaluate expressions once and use efficient jump tables, making them faster than IF chains for multiple conditions.
|
|
17
|
+
|
|
18
|
+
## Performance Characteristics
|
|
19
|
+
|
|
20
|
+
### Execution Efficiency
|
|
21
|
+
Case statements compile to efficient jump tables that directly branch to matching code without sequential condition evaluation. This provides O(1) performance compared to IF chains with O(n) sequential evaluation.
|
|
22
|
+
|
|
23
|
+
### Branch Prediction Benefits
|
|
24
|
+
Modern processors optimize case statements through branch prediction algorithms that learn common execution paths, improving performance for frequently accessed branches.
|
|
25
|
+
|
|
26
|
+
### Memory Access Patterns
|
|
27
|
+
Well-structured case statements improve cache locality by grouping related operations and reducing memory access overhead during branch execution.
|
|
28
|
+
|
|
29
|
+
## Optimization Strategies
|
|
30
|
+
|
|
31
|
+
### Branch Frequency Ordering
|
|
32
|
+
Order case branches by execution frequency, placing most common cases first. This minimizes average execution time by reducing branch traversal for typical scenarios.
|
|
33
|
+
|
|
34
|
+
### Expression Simplification
|
|
35
|
+
Use simple expressions that evaluate to basic types. Complex expressions in case evaluation create overhead that negates performance benefits.
|
|
36
|
+
|
|
37
|
+
### Early Exit Patterns
|
|
38
|
+
Structure case logic to enable early exit from processing when possible, avoiding unnecessary computation in less common branches.
|
|
39
|
+
|
|
40
|
+
## High-Performance Patterns
|
|
41
|
+
|
|
42
|
+
### Lookup Table Alternative
|
|
43
|
+
For very large case statements, consider lookup tables or dictionary structures that provide constant-time access without case statement overhead.
|
|
44
|
+
|
|
45
|
+
### Range Optimization
|
|
46
|
+
Use range cases efficiently by grouping consecutive values. Range evaluation is optimized in AL compilers for better performance than individual value matching.
|
|
47
|
+
|
|
48
|
+
### Resource Management
|
|
49
|
+
Place resource-intensive operations in less frequently executed branches, keeping common cases lightweight and fast-executing.
|
|
50
|
+
|
|
51
|
+
## Anti-Patterns to Avoid
|
|
52
|
+
|
|
53
|
+
### Complex Case Expressions
|
|
54
|
+
Avoid complex calculations or method calls in case expressions. Pre-calculate values before case evaluation for optimal performance.
|
|
55
|
+
|
|
56
|
+
### Nested Case Statements
|
|
57
|
+
Deep case nesting creates performance overhead and reduces code maintainability. Use helper procedures or alternative structures for complex branching logic.
|
|
58
|
+
|
|
59
|
+
### Resource-Heavy Common Branches
|
|
60
|
+
Avoid placing expensive operations in frequently executed branches. Profile actual usage patterns to optimize for real-world performance.
|
|
61
|
+
|
|
62
|
+
## Performance Testing
|
|
63
|
+
|
|
64
|
+
### Benchmarking Approaches
|
|
65
|
+
Compare case statements against IF chains and lookup tables using realistic data volumes and execution patterns. Measure actual performance in production-like scenarios.
|
|
66
|
+
|
|
67
|
+
### Profiling Integration
|
|
68
|
+
Use BC performance profiling tools to identify case statement bottlenecks and validate optimization effectiveness in real applications.
|
|
69
|
+
|
|
70
|
+
### Load Testing
|
|
71
|
+
Test case statement performance under high-volume conditions to ensure optimization strategies remain effective at scale.
|
|
72
|
+
|
|
73
|
+
## Best Practices Summary
|
|
74
|
+
|
|
75
|
+
### Design Guidelines
|
|
76
|
+
- Order branches by frequency for optimal average performance
|
|
77
|
+
- Keep case expressions simple and avoid complex calculations
|
|
78
|
+
- Use ranges efficiently for consecutive value matching
|
|
79
|
+
- Consider lookup alternatives for very large case statements
|
|
80
|
+
|
|
81
|
+
### Implementation Standards
|
|
82
|
+
- Profile performance in realistic usage scenarios
|
|
83
|
+
- Avoid deep nesting that reduces performance benefits
|
|
84
|
+
- Place expensive operations in infrequent branches
|
|
85
|
+
- Test optimization effectiveness under load conditions
|
|
86
|
+
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Compound Statements for Enhanced Debugging"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["debugging", "compound-statements", "breakpoints", "code-analysis"]
|
|
7
|
+
prerequisites: ["compound-statement-readability", "al-debugging-basics"]
|
|
8
|
+
samples: "samples/compound-statements-debugging.md"
|
|
9
|
+
---
|
|
10
|
+
# AL Compound Statements for Enhanced Debugging
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Compound statements significantly enhance AL debugging capabilities by providing explicit breakpoint locations, clear execution boundaries, and structured code organization that simplifies debugging workflows. The begin-end block structure creates natural debugging checkpoints that help developers isolate issues and trace execution flow.
|
|
15
|
+
|
|
16
|
+
Modern AL debugging environments leverage compound statement structure to provide more precise breakpoint placement and clearer execution visualization. The explicit boundaries created by compound blocks enable debuggers to provide better context information and more accurate step-through debugging experiences.
|
|
17
|
+
|
|
18
|
+
The debugging benefits of compound statements extend beyond simple breakpoint placement to include improved variable scope visibility, clearer call stack information, and more intuitive debugging navigation through complex business logic implementations.
|
|
19
|
+
|
|
20
|
+
## Debugging Enhancement Mechanisms
|
|
21
|
+
|
|
22
|
+
### Breakpoint Precision
|
|
23
|
+
|
|
24
|
+
Compound statements provide explicit locations for breakpoint placement that correspond to logical execution boundaries rather than arbitrary line positions. Each begin statement offers a natural entry point for debugging that aligns with developer mental models of code execution.
|
|
25
|
+
|
|
26
|
+
The structured nature of compound blocks allows debuggers to provide more meaningful context when execution stops at breakpoints. Developers can immediately understand the logical scope and purpose of the code being debugged without parsing surrounding syntax.
|
|
27
|
+
|
|
28
|
+
Breakpoint placement within compound statements creates predictable debugging experiences where execution stops align with logical operations rather than syntactic constructs. This alignment reduces confusion during debugging sessions and improves issue isolation efficiency.
|
|
29
|
+
|
|
30
|
+
### Execution Flow Visualization
|
|
31
|
+
|
|
32
|
+
Compound statements create visual boundaries that help debuggers display execution flow more clearly through syntax highlighting and scope indication. The nested structure provides hierarchical context that makes complex execution paths easier to follow during debugging.
|
|
33
|
+
|
|
34
|
+
When stepping through compound statement blocks, debuggers can provide clearer indication of scope transitions and logical boundary crossings. This enhanced visualization reduces cognitive load during debugging and helps developers maintain context awareness.
|
|
35
|
+
|
|
36
|
+
The explicit structure enables debugging tools to offer enhanced navigation features like scope-aware stepping that respects logical boundaries rather than purely syntactic line progression.
|
|
37
|
+
|
|
38
|
+
### Variable Scope Clarity
|
|
39
|
+
|
|
40
|
+
Compound statements create explicit variable scoping boundaries that debugging environments can leverage to provide more accurate variable visibility and inspection capabilities. Local variables declared within compound blocks have clear lifetime boundaries that debuggers can represent accurately.
|
|
41
|
+
|
|
42
|
+
The structured scoping enables better watch variable organization where developers can understand variable context and lifetime more intuitively during debugging sessions. Variable inspection becomes more logical when aligned with compound statement structure.
|
|
43
|
+
|
|
44
|
+
Debugging environments can use compound statement boundaries to provide more accurate variable state tracking and modification detection throughout code execution.
|
|
45
|
+
|
|
46
|
+
## Debugging Workflow Integration
|
|
47
|
+
|
|
48
|
+
### Strategic Breakpoint Placement
|
|
49
|
+
|
|
50
|
+
Use compound statement begin keywords as primary breakpoint locations to ensure execution stops at logical operation boundaries. This approach provides maximum context for debugging while minimizing confusion about execution state.
|
|
51
|
+
|
|
52
|
+
Place breakpoints at compound statement boundaries to debug conditional logic flow and loop iteration boundaries. These locations provide clear context about decision points and iteration state without requiring mental parsing of surrounding code.
|
|
53
|
+
|
|
54
|
+
Leverage compound statement structure to create debugging checkpoints that correspond to business logic phases rather than arbitrary code locations. This business-logic alignment improves debugging efficiency and issue isolation accuracy.
|
|
55
|
+
|
|
56
|
+
### Step-Through Enhancement
|
|
57
|
+
|
|
58
|
+
Configure debugging environments to respect compound statement boundaries during step-through operations, providing more intuitive navigation through complex code structures. Step-into operations should target logical blocks rather than individual statements when possible.
|
|
59
|
+
|
|
60
|
+
Use compound statement structure to guide step-over operations that skip entire logical blocks when the internal implementation details aren't relevant to the current debugging focus. This capability reduces debugging time for complex procedures.
|
|
61
|
+
|
|
62
|
+
Leverage scope-aware stepping that moves between compound statement levels to provide both detailed and overview-level debugging perspectives as needed for different types of issues.
|
|
63
|
+
|
|
64
|
+
### Exception Context Improvement
|
|
65
|
+
|
|
66
|
+
Compound statements provide better exception context by creating explicit boundaries around operations that might fail. Exception handlers can reference specific compound blocks that caused errors rather than ambiguous line references.
|
|
67
|
+
|
|
68
|
+
When exceptions occur within compound statement blocks, debugging environments can provide clearer context about the logical operation that failed and the scope of variables that might be relevant to the error condition.
|
|
69
|
+
|
|
70
|
+
Use compound statement structure to implement more granular exception handling that provides specific context for different types of failures within complex procedures.
|
|
71
|
+
|
|
72
|
+
## Advanced Debugging Patterns
|
|
73
|
+
|
|
74
|
+
### Conditional Debugging
|
|
75
|
+
|
|
76
|
+
Implement conditional breakpoints within compound statement blocks to debug specific scenarios without stopping execution for every iteration or condition evaluation. The compound structure provides clear logical boundaries for conditional debugging logic.
|
|
77
|
+
|
|
78
|
+
Use compound statements to create debugging hooks that can be enabled or disabled based on runtime conditions without affecting normal execution flow. These hooks provide detailed debugging information only when specific conditions occur.
|
|
79
|
+
|
|
80
|
+
Structure compound blocks to support debugging modes where additional logging or state tracking can be enabled within specific logical boundaries without impacting production performance.
|
|
81
|
+
|
|
82
|
+
### Multi-Level Tracing
|
|
83
|
+
|
|
84
|
+
Leverage compound statement nesting to implement hierarchical tracing that provides different levels of detail based on debugging needs. Each compound level can provide appropriate tracing granularity for its logical scope.
|
|
85
|
+
|
|
86
|
+
Use compound statement boundaries to implement trace correlation that helps track related operations across different logical blocks and procedure calls. This correlation improves debugging of complex business processes.
|
|
87
|
+
|
|
88
|
+
Implement structured logging within compound blocks that provides context-aware debug information aligned with logical operation boundaries rather than arbitrary code locations.
|
|
89
|
+
|
|
90
|
+
### Performance Debugging
|
|
91
|
+
|
|
92
|
+
Use compound statement boundaries as natural performance measurement points to identify bottlenecks and optimization opportunities during debugging sessions. The logical boundaries provide meaningful measurement contexts.
|
|
93
|
+
|
|
94
|
+
Implement performance counters within compound blocks to track execution time and resource usage at logical operation levels rather than individual statement granularity. This approach provides actionable performance debugging information.
|
|
95
|
+
|
|
96
|
+
Leverage compound statement structure to implement performance debugging that can isolate specific logical operations for detailed analysis without affecting overall procedure performance characteristics.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Custom Dimensions Best Practices"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["telemetry", "dimensions", "analytics", "monitoring"]
|
|
7
|
+
prerequisites: ["bc-session-logmessage-methods"]
|
|
8
|
+
samples: "samples/custom-dimensions.md"
|
|
9
|
+
---
|
|
10
|
+
# Custom Dimensions Best Practices
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Custom dimensions transform basic telemetry events into rich, queryable data that enables sophisticated analysis and monitoring. Proper custom dimension design balances diagnostic capability with performance impact and storage efficiency.
|
|
15
|
+
|
|
16
|
+
Custom dimensions appear as structured fields in Application Insights and other monitoring solutions, enabling filtering, grouping, and correlation analysis. Well-designed dimensions enhance troubleshooting capabilities and business intelligence extraction from telemetry data.
|
|
17
|
+
|
|
18
|
+
## Dimension Design Principles
|
|
19
|
+
|
|
20
|
+
### Consistency and Standardization
|
|
21
|
+
Establish consistent naming conventions across all telemetry events. Use standardized dimension names for common concepts like user identification, operation context, and business entity references.
|
|
22
|
+
|
|
23
|
+
Consistent dimension naming enables effective cross-component analysis and simplifies dashboard creation. Consider creating a telemetry dimension registry to maintain naming standards across development teams.
|
|
24
|
+
|
|
25
|
+
### Cardinality Management
|
|
26
|
+
Avoid high-cardinality dimensions that create excessive unique value combinations. High cardinality impacts query performance, storage efficiency, and aggregation capabilities in monitoring systems.
|
|
27
|
+
|
|
28
|
+
Examples of high-cardinality dimensions include timestamps, GUIDs, or detailed error messages. Instead, categorize high-cardinality values or use separate correlation mechanisms for detailed tracking.
|
|
29
|
+
|
|
30
|
+
### Business Context Integration
|
|
31
|
+
Include dimensions that align with business processes and operational concerns. Business-relevant dimensions enable telemetry analysis that directly supports troubleshooting and process optimization.
|
|
32
|
+
|
|
33
|
+
Consider dimensions for customer identification, transaction types, document numbers, and business process stages. These dimensions link technical telemetry to business impact analysis.
|
|
34
|
+
|
|
35
|
+
## Implementation Strategies
|
|
36
|
+
|
|
37
|
+
### Dimension Categories
|
|
38
|
+
Organize custom dimensions into logical categories: technical context (component, operation), business context (customer, document), and correlation context (session, trace identifiers).
|
|
39
|
+
|
|
40
|
+
Technical dimensions support system troubleshooting, business dimensions enable process analysis, and correlation dimensions link related events across system boundaries.
|
|
41
|
+
|
|
42
|
+
### Performance Optimization
|
|
43
|
+
Minimize custom dimension processing overhead by pre-formatting dimension values and reusing dimension collections where appropriate. Avoid complex calculations or expensive operations within dimension value generation.
|
|
44
|
+
|
|
45
|
+
Consider dimension value caching for frequently-used values and lazy evaluation for expensive dimension calculations that may not be needed in all scenarios.
|
|
46
|
+
|
|
47
|
+
### Data Classification Alignment
|
|
48
|
+
Ensure custom dimension content aligns with Business Central data classification requirements. Avoid including sensitive data in telemetry dimensions without appropriate classification and protection measures.
|
|
49
|
+
|
|
50
|
+
## Common Anti-Patterns
|
|
51
|
+
|
|
52
|
+
### Excessive Dimensions
|
|
53
|
+
Including too many custom dimensions per telemetry event creates storage bloat and complicates analysis. Focus on dimensions that provide actual analytical value rather than comprehensive data capture.
|
|
54
|
+
|
|
55
|
+
### Dynamic Dimension Names
|
|
56
|
+
Creating dimension names dynamically based on runtime values prevents effective querying and analysis. Use consistent dimension names with variable values rather than variable dimension names.
|
|
57
|
+
|
|
58
|
+
### Sensitive Data Inclusion
|
|
59
|
+
Including customer data, financial information, or other sensitive content in custom dimensions violates data protection principles and may create compliance issues.
|
|
60
|
+
|
|
61
|
+
## Analysis and Querying
|
|
62
|
+
|
|
63
|
+
### Dashboard Design
|
|
64
|
+
Structure custom dimensions to support effective dashboard creation and alerting rules. Consider how dimensions will be used in aggregation queries and filtering operations.
|
|
65
|
+
|
|
66
|
+
### Correlation Patterns
|
|
67
|
+
Design custom dimensions to enable effective event correlation across different system components. Include consistent correlation identifiers that link related business processes.
|
|
68
|
+
|
|
69
|
+
### Time-Series Analysis
|
|
70
|
+
Include dimensions that support time-series analysis of business processes and system performance. Consider dimensions for business cycles, operational periods, and performance trends.
|