@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,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Event Payload Design Patterns"
|
|
3
|
+
domain: "sam-coder"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["event-payload", "message-design", "data-patterns", "serialization"]
|
|
7
|
+
prerequisites: ["event-fundamentals", "data-structures", "json-handling"]
|
|
8
|
+
samples: "samples/event-payload-design.md"
|
|
9
|
+
related_topics: ["event-bridge-pattern-al", "command-queue-pattern-al"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Event Payload Design Patterns
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
Event Payload Design Patterns provide structured approaches for designing event data that is maintainable, extensible, and efficient. Well-designed payloads ensure events can evolve over time while maintaining compatibility with existing consumers.
|
|
17
|
+
|
|
18
|
+
**Key Benefit**: Creates stable, extensible event contracts that support system evolution without breaking existing integrations.
|
|
19
|
+
|
|
20
|
+
## Core Design Principles
|
|
21
|
+
|
|
22
|
+
### Payload Structure Standards
|
|
23
|
+
Design consistent payload structures that include essential metadata alongside business data, enabling reliable event processing and debugging.
|
|
24
|
+
|
|
25
|
+
### Versioning Strategy
|
|
26
|
+
Implement payload versioning that supports backward compatibility while enabling gradual migration to new payload formats.
|
|
27
|
+
|
|
28
|
+
### Data Completeness
|
|
29
|
+
Include sufficient data in payloads to enable consumers to process events without requiring additional data lookups when possible.
|
|
30
|
+
|
|
31
|
+
## Essential Payload Patterns
|
|
32
|
+
|
|
33
|
+
### Envelope Pattern
|
|
34
|
+
Wrap business data in standardized envelopes that include metadata such as event type, timestamp, source system, and correlation identifiers.
|
|
35
|
+
|
|
36
|
+
### Reference vs. Value Inclusion
|
|
37
|
+
Balance between including complete data (values) versus references (IDs) based on payload size, security requirements, and consumer needs.
|
|
38
|
+
|
|
39
|
+
### Hierarchical Data Organization
|
|
40
|
+
Structure complex data hierarchically to support partial consumption and efficient serialization/deserialization operations.
|
|
41
|
+
|
|
42
|
+
## Payload Evolution Strategies
|
|
43
|
+
|
|
44
|
+
### Additive Changes
|
|
45
|
+
Design payload evolution strategies that primarily use additive changes, ensuring new fields don't break existing consumers.
|
|
46
|
+
|
|
47
|
+
### Optional Field Patterns
|
|
48
|
+
Use optional fields and default values to enable payload enhancement without requiring immediate consumer updates.
|
|
49
|
+
|
|
50
|
+
### Migration Support
|
|
51
|
+
Implement payload transformation capabilities that can convert between different payload versions during transition periods.
|
|
52
|
+
|
|
53
|
+
## Performance Optimization
|
|
54
|
+
|
|
55
|
+
### Size Optimization
|
|
56
|
+
Balance payload completeness with size constraints to ensure efficient network transmission and processing performance.
|
|
57
|
+
|
|
58
|
+
### Serialization Efficiency
|
|
59
|
+
Choose serialization formats and patterns that optimize for the primary usage scenarios (human readability vs. processing speed).
|
|
60
|
+
|
|
61
|
+
### Compression Strategies
|
|
62
|
+
Implement compression strategies for large payloads while considering the processing overhead of compression/decompression.
|
|
63
|
+
|
|
64
|
+
## Data Integrity and Security
|
|
65
|
+
|
|
66
|
+
### Validation Patterns
|
|
67
|
+
- Implement payload validation at both producer and consumer sides
|
|
68
|
+
- Define clear data type and format requirements
|
|
69
|
+
- Support schema validation for structured payload formats
|
|
70
|
+
- Provide clear error messages for validation failures
|
|
71
|
+
|
|
72
|
+
### Sensitive Data Handling
|
|
73
|
+
- Avoid including sensitive data in event payloads when possible
|
|
74
|
+
- Implement data masking patterns for logging and debugging
|
|
75
|
+
- Use references to sensitive data rather than including values directly
|
|
76
|
+
- Support encryption for payloads containing sensitive information
|
|
77
|
+
|
|
78
|
+
## Specialized Payload Types
|
|
79
|
+
|
|
80
|
+
### Command Payloads
|
|
81
|
+
Design command payloads that include all necessary information for executing operations, including parameters and execution context.
|
|
82
|
+
|
|
83
|
+
### State Change Payloads
|
|
84
|
+
Structure state change events to include both previous and current state information, enabling consumers to understand the nature of changes.
|
|
85
|
+
|
|
86
|
+
### Batch Operation Payloads
|
|
87
|
+
Design payloads for batch operations that efficiently represent collections of related changes or operations.
|
|
88
|
+
|
|
89
|
+
## Integration Considerations
|
|
90
|
+
|
|
91
|
+
### Cross-System Compatibility
|
|
92
|
+
Design payloads that can cross system boundaries effectively, considering different serialization capabilities and data type support.
|
|
93
|
+
|
|
94
|
+
### Protocol Independence
|
|
95
|
+
Structure payloads to work effectively across different transport protocols and message delivery mechanisms.
|
|
96
|
+
|
|
97
|
+
### Consumer Diversity
|
|
98
|
+
Consider the needs of different types of consumers (real-time processors, batch systems, human operators) when designing payload structures.
|
|
99
|
+
|
|
100
|
+
## Best Practices
|
|
101
|
+
|
|
102
|
+
### Design Guidelines
|
|
103
|
+
- Use clear, descriptive field names that convey meaning
|
|
104
|
+
- Include timestamp and correlation information in all payloads
|
|
105
|
+
- Implement consistent data type usage across similar fields
|
|
106
|
+
- Provide comprehensive documentation for payload schemas
|
|
107
|
+
|
|
108
|
+
### Documentation Standards
|
|
109
|
+
- Document all payload fields with clear descriptions and examples
|
|
110
|
+
- Provide schema definitions using standard formats (JSON Schema, OpenAPI)
|
|
111
|
+
- Include example payloads for common scenarios
|
|
112
|
+
- Maintain version history and migration guidance
|
|
113
|
+
|
|
114
|
+
## Common Pitfalls
|
|
115
|
+
|
|
116
|
+
### Payload Bloat
|
|
117
|
+
Avoid including unnecessary data that increases payload size without providing corresponding value to consumers.
|
|
118
|
+
|
|
119
|
+
### Breaking Changes
|
|
120
|
+
Prevent accidental breaking changes through careful payload evolution planning and thorough testing of changes.
|
|
121
|
+
|
|
122
|
+
### Inconsistent Structure
|
|
123
|
+
Avoid inconsistent payload structures across similar events that create confusion and increase integration complexity.
|
|
124
|
+
|
|
125
|
+
*Complete payload design examples: samples/event-payload-design.md*
|
|
126
|
+
*Event routing patterns: event-bridge-pattern-al.md*
|
|
127
|
+
*Command processing: command-queue-pattern-al.md*
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Generic Method Patterns in AL"
|
|
3
|
+
domain: "sam-coder"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "18+"
|
|
6
|
+
tags: ["generic-methods", "type-safety", "code-reuse", "al-generics"]
|
|
7
|
+
prerequisites: ["al-basics", "interface-implementation", "advanced-al-features"]
|
|
8
|
+
samples: "samples/generic-method-patterns.md"
|
|
9
|
+
related_topics: ["type-safe-operations-al", "template-method-pattern-al"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Generic Method Patterns in AL
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
Generic Method Patterns in AL enable type-safe, reusable code by allowing methods to work with different data types while maintaining compile-time type checking. These patterns reduce code duplication and provide flexible, maintainable solutions for common algorithmic operations.
|
|
17
|
+
|
|
18
|
+
**Key Benefit**: Enables creation of type-safe, reusable algorithms that work across different data types while maintaining performance and compile-time validation.
|
|
19
|
+
|
|
20
|
+
## Core Generic Concepts
|
|
21
|
+
|
|
22
|
+
### Type Parameter Definition
|
|
23
|
+
Define generic type parameters in method signatures that can represent any compatible type, enabling flexible method implementation.
|
|
24
|
+
|
|
25
|
+
### Constraint Specification
|
|
26
|
+
Apply constraints to generic type parameters to ensure they meet specific requirements for the generic algorithm implementation.
|
|
27
|
+
|
|
28
|
+
### Type Inference
|
|
29
|
+
Leverage AL's type inference capabilities to reduce explicit type specification while maintaining type safety in generic method calls.
|
|
30
|
+
|
|
31
|
+
## Essential Generic Patterns
|
|
32
|
+
|
|
33
|
+
### Collection Processing Generics
|
|
34
|
+
Implement generic methods for common collection operations such as filtering, mapping, and reduction that work across different data types.
|
|
35
|
+
|
|
36
|
+
### Comparison and Sorting Generics
|
|
37
|
+
Design generic comparison and sorting algorithms that can work with any comparable data type while maintaining efficiency.
|
|
38
|
+
|
|
39
|
+
### Data Transformation Generics
|
|
40
|
+
Create generic transformation methods that can convert between different data types using consistent transformation patterns.
|
|
41
|
+
|
|
42
|
+
## Advanced Generic Techniques
|
|
43
|
+
|
|
44
|
+
### Multi-Type Parameter Methods
|
|
45
|
+
Design methods with multiple generic type parameters that can handle complex operations involving multiple related types.
|
|
46
|
+
|
|
47
|
+
### Generic Factory Methods
|
|
48
|
+
Implement generic factory patterns that can create instances of different types based on generic parameters and runtime conditions.
|
|
49
|
+
|
|
50
|
+
### Generic Event Handlers
|
|
51
|
+
Create generic event handling patterns that can process events with different payload types using consistent handling logic.
|
|
52
|
+
|
|
53
|
+
## Type Safety Strategies
|
|
54
|
+
|
|
55
|
+
### Constraint-Based Validation
|
|
56
|
+
- Use generic constraints to ensure type parameters meet specific interface or inheritance requirements
|
|
57
|
+
- Implement compile-time validation for generic type compatibility
|
|
58
|
+
- Design constraint hierarchies that support complex type requirements
|
|
59
|
+
- Provide clear error messages for constraint violations
|
|
60
|
+
|
|
61
|
+
### Runtime Type Checking
|
|
62
|
+
- Implement runtime type validation for scenarios where compile-time checking is insufficient
|
|
63
|
+
- Support dynamic type discovery and validation in generic methods
|
|
64
|
+
- Handle type conversion and casting safely within generic implementations
|
|
65
|
+
- Provide fallback mechanisms for unsupported type scenarios
|
|
66
|
+
|
|
67
|
+
## Performance Optimization
|
|
68
|
+
|
|
69
|
+
### Generic Method Specialization
|
|
70
|
+
Implement specialized versions of generic methods for commonly used types to optimize performance while maintaining generic interface compatibility.
|
|
71
|
+
|
|
72
|
+
### Type-Specific Optimizations
|
|
73
|
+
Design generic methods that can apply type-specific optimizations based on runtime type information while maintaining consistent interfaces.
|
|
74
|
+
|
|
75
|
+
### Memory Efficiency
|
|
76
|
+
Optimize memory usage in generic methods by avoiding unnecessary object creation and implementing efficient type-specific storage patterns.
|
|
77
|
+
|
|
78
|
+
## Integration Patterns
|
|
79
|
+
|
|
80
|
+
### Interface-Based Generics
|
|
81
|
+
Design generic methods that work with interfaces, enabling polymorphic behavior while maintaining type safety and flexibility.
|
|
82
|
+
|
|
83
|
+
### Generic Extension Methods
|
|
84
|
+
Implement extension methods using generic patterns to add functionality to existing types without modification.
|
|
85
|
+
|
|
86
|
+
### Generic Builder Patterns
|
|
87
|
+
Create generic builder patterns that can construct complex objects of different types using consistent building interfaces.
|
|
88
|
+
|
|
89
|
+
## Error Handling and Validation
|
|
90
|
+
|
|
91
|
+
### Generic Exception Patterns
|
|
92
|
+
Design exception handling patterns that work effectively with generic methods while providing meaningful error information.
|
|
93
|
+
|
|
94
|
+
### Type Validation Strategies
|
|
95
|
+
Implement comprehensive type validation that ensures generic methods receive compatible types and handle edge cases appropriately.
|
|
96
|
+
|
|
97
|
+
### Constraint Violation Handling
|
|
98
|
+
Handle constraint violations gracefully with clear error messages and appropriate fallback behaviors.
|
|
99
|
+
|
|
100
|
+
## Testing Generic Methods
|
|
101
|
+
|
|
102
|
+
### Parameterized Testing
|
|
103
|
+
- Design test patterns that validate generic method behavior across multiple type parameters
|
|
104
|
+
- Implement property-based testing for generic algorithms
|
|
105
|
+
- Support type-specific test scenarios while maintaining generic test structure
|
|
106
|
+
- Validate constraint enforcement and error handling
|
|
107
|
+
|
|
108
|
+
### Type Coverage Testing
|
|
109
|
+
- Ensure test coverage across all supported generic type parameters
|
|
110
|
+
- Test edge cases and boundary conditions for different types
|
|
111
|
+
- Validate performance characteristics across different type parameters
|
|
112
|
+
- Test integration scenarios with complex generic method compositions
|
|
113
|
+
|
|
114
|
+
## Best Practices
|
|
115
|
+
|
|
116
|
+
### Design Principles
|
|
117
|
+
- Keep generic methods focused and single-purpose
|
|
118
|
+
- Use meaningful names for generic type parameters
|
|
119
|
+
- Implement appropriate constraints to ensure type safety
|
|
120
|
+
- Provide clear documentation for generic method usage and constraints
|
|
121
|
+
|
|
122
|
+
### Performance Guidelines
|
|
123
|
+
- Consider the performance implications of generic method implementation
|
|
124
|
+
- Use specialized implementations for performance-critical scenarios
|
|
125
|
+
- Minimize boxing and unboxing operations in generic methods
|
|
126
|
+
- Profile generic method performance with different type parameters
|
|
127
|
+
|
|
128
|
+
## Common Pitfalls
|
|
129
|
+
|
|
130
|
+
### Over-Generalization
|
|
131
|
+
Avoid creating overly generic methods that become complex and difficult to understand or maintain.
|
|
132
|
+
|
|
133
|
+
### Constraint Misuse
|
|
134
|
+
Prevent inappropriate use of generic constraints that unnecessarily limit method applicability or create confusing type requirements.
|
|
135
|
+
|
|
136
|
+
### Performance Degradation
|
|
137
|
+
Be aware of potential performance impacts from generic method overhead, especially in high-frequency scenarios.
|
|
138
|
+
|
|
139
|
+
*Complete generic method examples: samples/generic-method-patterns.md*
|
|
140
|
+
*Type-safe operations: type-safe-operations-al.md*
|
|
141
|
+
*Template method patterns: template-method-pattern-al.md*
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Manual Binding for Conditional Event Subscribers"
|
|
3
|
+
domain: "sam-coder"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "16+"
|
|
6
|
+
tags: ["events", "binding", "conditional", "runtime"]
|
|
7
|
+
prerequisites: ["event-subscriber-basics", "binding-patterns"]
|
|
8
|
+
samples: "samples/manual-binding.md"
|
|
9
|
+
---
|
|
10
|
+
# Manual Binding for Conditional Event Subscribers
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Manual binding enables runtime control over event subscriber activation, allowing conditional subscriber registration based on business logic, configuration, or environmental factors. This pattern provides architectural flexibility beyond static EventSubscriber attribute declarations.
|
|
15
|
+
|
|
16
|
+
Manual binding requires explicit subscriber registration and deregistration through the BC event management framework. This approach trades development simplicity for runtime control and dynamic event handling capabilities.
|
|
17
|
+
|
|
18
|
+
The pattern is essential for scenarios requiring conditional event processing, multi-tenant customizations, or feature-flag-controlled functionality where static binding creates unnecessary overhead or conflicts.
|
|
19
|
+
|
|
20
|
+
## Architectural Benefits
|
|
21
|
+
|
|
22
|
+
Manual binding enables conditional event processing based on runtime criteria such as user permissions, feature flags, or business configuration. Subscribers only activate when actually needed, reducing unnecessary event processing overhead.
|
|
23
|
+
|
|
24
|
+
Dynamic binding supports multi-tenant scenarios where different tenants require different event handling logic. The same codebase can provide tenant-specific event processing without static coupling to all possible variations.
|
|
25
|
+
|
|
26
|
+
Feature toggles and A/B testing scenarios benefit from manual binding's ability to enable or disable event handlers without code deployment. Business logic changes can control event processing behavior dynamically.
|
|
27
|
+
|
|
28
|
+
## Implementation Patterns
|
|
29
|
+
|
|
30
|
+
Manual binding requires implementing custom registration logic typically executed during application startup or feature activation. The registration code must handle both binding and unbinding scenarios appropriately.
|
|
31
|
+
|
|
32
|
+
Conditional binding logic should evaluate business rules, configuration settings, or environmental factors to determine when subscribers should be active. The evaluation timing and frequency impact system performance and behavior consistency.
|
|
33
|
+
|
|
34
|
+
Error handling becomes critical in manual binding scenarios since registration failures can silently disable expected functionality. Robust error handling and logging ensure binding issues are detected and resolved promptly.
|
|
35
|
+
|
|
36
|
+
## Lifecycle Management
|
|
37
|
+
|
|
38
|
+
Manual binding requires explicit lifecycle management for subscriber registration and deregistration. Unlike static subscribers, manually bound subscribers need active management throughout their operational lifetime.
|
|
39
|
+
|
|
40
|
+
Registration timing affects when events begin processing through manual subscribers. Early registration ensures events are captured from system startup, while delayed registration may miss early system events.
|
|
41
|
+
|
|
42
|
+
Deregistration becomes necessary when conditional criteria change or features deactivate. Failed deregistration can lead to unexpected event processing and potential system conflicts.
|
|
43
|
+
|
|
44
|
+
## Configuration Integration
|
|
45
|
+
|
|
46
|
+
Manual binding integrates naturally with configuration management systems, allowing business users to control event processing behavior without technical intervention. Configuration changes can enable or disable event handlers dynamically.
|
|
47
|
+
|
|
48
|
+
Configuration-driven binding requires robust validation to ensure only valid subscribers are registered and conflicting configurations are detected early. Invalid configurations should fail safely without disrupting other system functions.
|
|
49
|
+
|
|
50
|
+
Runtime configuration changes need careful handling to avoid inconsistent states where some events are processed by newly configured handlers while others use previous configurations.
|
|
51
|
+
|
|
52
|
+
## Performance Considerations
|
|
53
|
+
|
|
54
|
+
Manual binding introduces registration overhead during application startup or feature activation. The registration cost must be balanced against the flexibility benefits, particularly in high-frequency event scenarios.
|
|
55
|
+
|
|
56
|
+
Conditional evaluation logic adds processing overhead to determine when subscribers should be active. Efficient evaluation algorithms minimize performance impact while providing necessary flexibility.
|
|
57
|
+
|
|
58
|
+
Dynamic binding and unbinding during system operation can create temporary inconsistencies where some events are processed differently than others. Timing considerations ensure consistent event processing behavior.
|
|
59
|
+
|
|
60
|
+
## Testing Strategies
|
|
61
|
+
|
|
62
|
+
Manual binding requires comprehensive testing of both bound and unbound states to ensure correct behavior under all configuration scenarios. Test suites must validate conditional binding logic and edge cases.
|
|
63
|
+
|
|
64
|
+
Integration testing becomes more complex with manual binding since the same codebase behaves differently based on binding configuration. Test environments must exercise all possible binding combinations.
|
|
65
|
+
|
|
66
|
+
Performance testing must account for binding overhead and conditional evaluation impact on overall system performance, particularly during startup and configuration change scenarios.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Nested Compound Statement Best Practices"
|
|
3
|
+
domain: "sam-coder"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["nested-statements", "code-organization", "readability", "complexity-management"]
|
|
7
|
+
prerequisites: ["compound-statement-readability", "al-control-flow"]
|
|
8
|
+
samples: "samples/nested-compound-best-practices.md"
|
|
9
|
+
---
|
|
10
|
+
# AL Nested Compound Statement Best Practices
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Nested compound statements in AL require careful organization to maintain readability and prevent excessive complexity that impairs code maintenance. While compound statements enhance individual construct clarity, deep nesting can create cognitive overload that negates readability benefits.
|
|
15
|
+
|
|
16
|
+
Effective nested compound statement management balances structural clarity with complexity control through strategic indentation, logical grouping, and complexity reduction techniques. Professional AL development emphasizes readable nesting patterns that support both immediate comprehension and long-term maintainability.
|
|
17
|
+
|
|
18
|
+
The challenge lies in preserving the benefits of compound statements while managing the visual and cognitive complexity that emerges from multiple levels of nested begin-end blocks. Successful approaches combine consistent formatting with architectural patterns that minimize nesting depth.
|
|
19
|
+
|
|
20
|
+
## Complexity Management Principles
|
|
21
|
+
|
|
22
|
+
### Depth Limitation Strategies
|
|
23
|
+
|
|
24
|
+
Establish practical limits on nesting depth to prevent excessive complexity that overwhelms developer comprehension. Most experienced AL developers find that more than three levels of nesting create significant cognitive load during code reading and maintenance.
|
|
25
|
+
|
|
26
|
+
When nesting depth approaches problematic levels, consider extracting nested logic into separate procedures or functions. This extraction reduces visual complexity while maintaining logical organization and creating reusable code components.
|
|
27
|
+
|
|
28
|
+
Apply the principle that each level of nesting should represent a meaningful logical distinction rather than arbitrary grouping. Each nested level should serve a clear purpose that justifies the additional complexity it introduces.
|
|
29
|
+
|
|
30
|
+
### Logical Organization
|
|
31
|
+
|
|
32
|
+
Structure nested compound statements to follow natural business logic flow rather than purely technical organization. Group related operations within the same nesting level to create coherent logical blocks that match business process understanding.
|
|
33
|
+
|
|
34
|
+
Use consistent patterns for similar types of nested logic throughout the AL codebase. Establish standard approaches for common scenarios like validation cascades, error handling hierarchies, and data processing workflows.
|
|
35
|
+
|
|
36
|
+
Organize nested statements to minimize the cognitive distance between related operations. Keep logically connected statements within the same visual scope to reduce mental mapping requirements during code comprehension.
|
|
37
|
+
|
|
38
|
+
### Visual Structure Enhancement
|
|
39
|
+
|
|
40
|
+
Apply consistent indentation patterns that clearly communicate nesting relationships without creating excessive horizontal space consumption. Balance clarity with practical line length constraints imposed by development environments.
|
|
41
|
+
|
|
42
|
+
Use strategic whitespace and commenting to create visual separation between different logical blocks within nested structures. This separation helps developers parse complex nesting without losing track of scope boundaries.
|
|
43
|
+
|
|
44
|
+
Consider using meaningful variable names and procedure names that communicate the purpose of nested blocks, reducing the need to parse nested logic to understand overall intent.
|
|
45
|
+
|
|
46
|
+
## Implementation Patterns
|
|
47
|
+
|
|
48
|
+
### Validation Cascades
|
|
49
|
+
|
|
50
|
+
Implement cascading validation logic through structured nesting that creates clear decision trees. Each level of nesting should represent a distinct validation concern that builds upon previous validation results.
|
|
51
|
+
|
|
52
|
+
Structure validation nesting to fail fast and minimize unnecessary processing when early validation steps fail. This approach improves both performance and code clarity by establishing clear exit conditions.
|
|
53
|
+
|
|
54
|
+
Use compound statements to group related validation operations within each nesting level, creating logical units that can be understood independently while contributing to overall validation flow.
|
|
55
|
+
|
|
56
|
+
### Error Handling Hierarchies
|
|
57
|
+
|
|
58
|
+
Organize error handling through nested compound statements that create layered exception handling appropriate to different error types and severity levels. Each nesting level should handle errors at the appropriate abstraction level.
|
|
59
|
+
|
|
60
|
+
Implement error handling nesting that provides specific error responses at the appropriate scope level while maintaining general error handling at outer levels. This layered approach ensures comprehensive error coverage without excessive complexity.
|
|
61
|
+
|
|
62
|
+
Use nested error handling to implement graceful degradation patterns where different levels of functionality can continue operating even when specific subsystems encounter errors.
|
|
63
|
+
|
|
64
|
+
### Business Process Workflows
|
|
65
|
+
|
|
66
|
+
Structure business process implementation through nested compound statements that mirror actual business workflow steps. Each nesting level should represent a significant business decision point or process phase.
|
|
67
|
+
|
|
68
|
+
Organize workflow nesting to support process modification and extension without requiring restructuring of existing nested logic. This approach facilitates business requirement changes that commonly occur in AL applications.
|
|
69
|
+
|
|
70
|
+
Use nested compound statements to implement approval workflows, document processing chains, and other multi-step business processes that require clear state management and decision tracking.
|
|
71
|
+
|
|
72
|
+
## Readability Optimization
|
|
73
|
+
|
|
74
|
+
### Strategic Extraction
|
|
75
|
+
|
|
76
|
+
Identify nested logic candidates for extraction into separate procedures or functions based on complexity metrics and logical cohesion. Extract nested blocks that serve distinct purposes or could be reused in different contexts.
|
|
77
|
+
|
|
78
|
+
Use extraction to reduce visual complexity while preserving logical relationships between different parts of nested operations. Extracted procedures should have clear interfaces and well-defined responsibilities.
|
|
79
|
+
|
|
80
|
+
Apply extraction selectively to avoid creating excessive procedure fragmentation that makes code navigation difficult. Balance nested complexity reduction with overall code organization and discoverability.
|
|
81
|
+
|
|
82
|
+
### Commenting Strategies
|
|
83
|
+
|
|
84
|
+
Use strategic comments to explain the purpose and context of nested compound statements without cluttering the code with excessive documentation. Focus comments on business logic rationale rather than technical implementation details.
|
|
85
|
+
|
|
86
|
+
Apply header comments to complex nested sections that explain the overall purpose and expected outcomes. These comments help developers understand the intent before diving into detailed nested logic.
|
|
87
|
+
|
|
88
|
+
Use inline comments sparingly within nested structures to explain non-obvious business rules or technical constraints that affect the nested logic implementation.
|
|
89
|
+
|
|
90
|
+
### Formatting Consistency
|
|
91
|
+
|
|
92
|
+
Establish and maintain consistent formatting patterns for nested compound statements across the entire AL codebase. This consistency reduces the cognitive overhead of parsing different formatting styles.
|
|
93
|
+
|
|
94
|
+
Use automated formatting tools where possible to ensure consistent indentation and spacing within nested structures. Manual formatting variations can create confusion and reduce readability benefits.
|
|
95
|
+
|
|
96
|
+
Apply consistent patterns for handling edge cases like empty nested blocks, single-statement nested blocks, and mixed nesting scenarios that commonly arise during development.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# AL Blank Line Organization - Code Examples
|
|
2
|
+
|
|
3
|
+
## Good Examples
|
|
4
|
+
|
|
5
|
+
### Logical Section Separation
|
|
6
|
+
```al
|
|
7
|
+
codeunit 50100 "Customer Management"
|
|
8
|
+
{
|
|
9
|
+
procedure CreateCustomer(Name: Text[100]; Email: Text[80]): Code[20]
|
|
10
|
+
var
|
|
11
|
+
Customer: Record Customer;
|
|
12
|
+
CustomerNo: Code[20];
|
|
13
|
+
begin
|
|
14
|
+
// Input validation section
|
|
15
|
+
if Name = '' then
|
|
16
|
+
Error('Customer name cannot be empty');
|
|
17
|
+
if Email = '' then
|
|
18
|
+
Error('Customer email cannot be empty');
|
|
19
|
+
|
|
20
|
+
// Customer creation section
|
|
21
|
+
Customer.Init();
|
|
22
|
+
CustomerNo := NoSeriesMgt.GetNextNo(SalesSetup."Customer Nos.", 0D, true);
|
|
23
|
+
Customer."No." := CustomerNo;
|
|
24
|
+
Customer.Name := Name;
|
|
25
|
+
Customer."E-Mail" := Email;
|
|
26
|
+
|
|
27
|
+
// Database operation section
|
|
28
|
+
Customer.Insert(true);
|
|
29
|
+
|
|
30
|
+
// Return result
|
|
31
|
+
exit(CustomerNo);
|
|
32
|
+
end;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Function Group Separation
|
|
37
|
+
```al
|
|
38
|
+
codeunit 50101 "Order Processing"
|
|
39
|
+
{
|
|
40
|
+
// Validation functions
|
|
41
|
+
procedure ValidateOrderHeader(var SalesHeader: Record "Sales Header")
|
|
42
|
+
begin
|
|
43
|
+
if SalesHeader."Sell-to Customer No." = '' then
|
|
44
|
+
Error('Customer number is required');
|
|
45
|
+
end;
|
|
46
|
+
|
|
47
|
+
procedure ValidateOrderLines(var SalesLine: Record "Sales Line")
|
|
48
|
+
begin
|
|
49
|
+
if SalesLine.Quantity <= 0 then
|
|
50
|
+
Error('Quantity must be greater than zero');
|
|
51
|
+
end;
|
|
52
|
+
|
|
53
|
+
// Processing functions
|
|
54
|
+
procedure ProcessOrder(var SalesHeader: Record "Sales Header")
|
|
55
|
+
begin
|
|
56
|
+
ValidateOrderHeader(SalesHeader);
|
|
57
|
+
CalculateTotals(SalesHeader);
|
|
58
|
+
UpdateInventory(SalesHeader);
|
|
59
|
+
end;
|
|
60
|
+
|
|
61
|
+
procedure CalculateTotals(var SalesHeader: Record "Sales Header")
|
|
62
|
+
begin
|
|
63
|
+
SalesHeader.CalcFields("Amount Including VAT");
|
|
64
|
+
end;
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Bad Examples
|
|
69
|
+
|
|
70
|
+
### No Logical Separation
|
|
71
|
+
```al
|
|
72
|
+
codeunit 50102 "Bad Organization"
|
|
73
|
+
{
|
|
74
|
+
procedure ProcessData()
|
|
75
|
+
var
|
|
76
|
+
Customer: Record Customer;
|
|
77
|
+
Item: Record Item;
|
|
78
|
+
SalesLine: Record "Sales Line";
|
|
79
|
+
begin
|
|
80
|
+
if Customer.FindFirst() then
|
|
81
|
+
Customer.Modify();
|
|
82
|
+
Item.SetRange(Blocked, false);
|
|
83
|
+
if Item.FindSet() then
|
|
84
|
+
repeat
|
|
85
|
+
Item."Unit Price" := Item."Unit Price" * 1.1;
|
|
86
|
+
Item.Modify();
|
|
87
|
+
until Item.Next() = 0;
|
|
88
|
+
SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
|
|
89
|
+
SalesLine.SetRange("Shipment Date", Today);
|
|
90
|
+
if SalesLine.FindSet() then
|
|
91
|
+
SalesLine.DeleteAll();
|
|
92
|
+
Message('Processing complete');
|
|
93
|
+
end;
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Excessive Blank Lines
|
|
98
|
+
```al
|
|
99
|
+
codeunit 50103 "Excessive Spacing"
|
|
100
|
+
{
|
|
101
|
+
procedure BadSpacing()
|
|
102
|
+
var
|
|
103
|
+
Customer: Record Customer;
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
Item: Record Item;
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
Result: Boolean;
|
|
110
|
+
begin
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
Customer.FindFirst();
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
Item.FindFirst();
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
Result := true;
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
end;
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Missing Function Separation
|
|
129
|
+
```al
|
|
130
|
+
codeunit 50104 "No Function Separation"
|
|
131
|
+
{
|
|
132
|
+
procedure ValidateCustomer(CustomerNo: Code[20]): Boolean
|
|
133
|
+
begin
|
|
134
|
+
exit(CustomerNo <> '');
|
|
135
|
+
end;
|
|
136
|
+
procedure CreateItem(ItemNo: Code[20]; Description: Text[100])
|
|
137
|
+
var
|
|
138
|
+
Item: Record Item;
|
|
139
|
+
begin
|
|
140
|
+
Item.Init();
|
|
141
|
+
Item."No." := ItemNo;
|
|
142
|
+
Item.Description := Description;
|
|
143
|
+
Item.Insert();
|
|
144
|
+
end;
|
|
145
|
+
procedure DeleteOrder(OrderNo: Code[20])
|
|
146
|
+
var
|
|
147
|
+
SalesHeader: Record "Sales Header";
|
|
148
|
+
begin
|
|
149
|
+
SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo);
|
|
150
|
+
SalesHeader.Delete(true);
|
|
151
|
+
end;
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Best Practices
|
|
156
|
+
|
|
157
|
+
1. **Separate logical sections** within procedures with single blank lines
|
|
158
|
+
2. **Separate functions** with single blank lines between procedure declarations
|
|
159
|
+
3. **Group related functions** together without excessive spacing
|
|
160
|
+
4. **Use consistent spacing** throughout the codeunit
|
|
161
|
+
5. **Avoid excessive blank lines** that disrupt reading flow
|