@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,101 @@
|
|
|
1
|
+
# Table Safety Validation Patterns
|
|
2
|
+
|
|
3
|
+
## IsTemporary Safeguard Implementation
|
|
4
|
+
```al
|
|
5
|
+
procedure ProcessBulkData(var DataBuffer: Record "Data Processing Buffer")
|
|
6
|
+
begin
|
|
7
|
+
// Always validate temporary status before bulk operations
|
|
8
|
+
if not DataBuffer.IsTemporary then
|
|
9
|
+
Error('This procedure requires a temporary table to prevent data corruption.');
|
|
10
|
+
|
|
11
|
+
DataBuffer.Reset();
|
|
12
|
+
if DataBuffer.FindSet() then
|
|
13
|
+
repeat
|
|
14
|
+
ProcessIndividualRecord(DataBuffer);
|
|
15
|
+
DataBuffer.Delete(); // Safe because table is confirmed temporary
|
|
16
|
+
until DataBuffer.Next() = 0;
|
|
17
|
+
end;
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Database Write Protection
|
|
21
|
+
```al
|
|
22
|
+
procedure SafeDataManipulation(var TempCustomer: Record Customer temporary)
|
|
23
|
+
var
|
|
24
|
+
Customer: Record Customer;
|
|
25
|
+
begin
|
|
26
|
+
// Validate temporary status before any modifications
|
|
27
|
+
if not TempCustomer.IsTemporary then
|
|
28
|
+
Error('Database safety violation: Expected temporary table for data manipulation.');
|
|
29
|
+
|
|
30
|
+
// Safe to perform destructive operations
|
|
31
|
+
TempCustomer.Reset();
|
|
32
|
+
TempCustomer.DeleteAll();
|
|
33
|
+
|
|
34
|
+
// Load fresh data from permanent table
|
|
35
|
+
Customer.FindSet();
|
|
36
|
+
repeat
|
|
37
|
+
TempCustomer := Customer;
|
|
38
|
+
TempCustomer.Insert();
|
|
39
|
+
until Customer.Next() = 0;
|
|
40
|
+
end;
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Bulk Operation Validation
|
|
44
|
+
```al
|
|
45
|
+
procedure ProcessLargeDataSet(var TempItem: Record Item temporary; ProcessingMode: Option Validate,Update,Delete)
|
|
46
|
+
begin
|
|
47
|
+
// Critical safety check for bulk operations
|
|
48
|
+
if not TempItem.IsTemporary then
|
|
49
|
+
Error('Bulk processing operations require temporary tables. This prevents accidental permanent data modification.');
|
|
50
|
+
|
|
51
|
+
case ProcessingMode of
|
|
52
|
+
ProcessingMode::Validate:
|
|
53
|
+
ValidateAllRecords(TempItem);
|
|
54
|
+
ProcessingMode::Update:
|
|
55
|
+
UpdateAllRecords(TempItem);
|
|
56
|
+
ProcessingMode::Delete:
|
|
57
|
+
TempItem.DeleteAll(); // Safe deletion
|
|
58
|
+
end;
|
|
59
|
+
end;
|
|
60
|
+
|
|
61
|
+
local procedure ValidateAllRecords(var TempItem: Record Item temporary)
|
|
62
|
+
begin
|
|
63
|
+
TempItem.Reset();
|
|
64
|
+
if TempItem.FindSet() then
|
|
65
|
+
repeat
|
|
66
|
+
ValidateItemData(TempItem);
|
|
67
|
+
until TempItem.Next() = 0;
|
|
68
|
+
end;
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Data Integrity Protection
|
|
72
|
+
```al
|
|
73
|
+
procedure SecureDataProcessing(var WorkingTable: Record "Working Data Buffer")
|
|
74
|
+
var
|
|
75
|
+
OriginalFilters: Text;
|
|
76
|
+
begin
|
|
77
|
+
// Mandatory safety validation
|
|
78
|
+
if not WorkingTable.IsTemporary then
|
|
79
|
+
Error('Data integrity protection: This operation requires a temporary working table.');
|
|
80
|
+
|
|
81
|
+
OriginalFilters := WorkingTable.GetFilters();
|
|
82
|
+
|
|
83
|
+
try
|
|
84
|
+
WorkingTable.Reset();
|
|
85
|
+
ProcessAllRecords(WorkingTable);
|
|
86
|
+
finally
|
|
87
|
+
// Restore original state
|
|
88
|
+
WorkingTable.Reset();
|
|
89
|
+
WorkingTable.SetView(OriginalFilters);
|
|
90
|
+
end;
|
|
91
|
+
end;
|
|
92
|
+
|
|
93
|
+
local procedure ProcessAllRecords(var WorkingTable: Record "Working Data Buffer")
|
|
94
|
+
begin
|
|
95
|
+
if WorkingTable.FindSet(true) then
|
|
96
|
+
repeat
|
|
97
|
+
WorkingTable."Processing Status" := WorkingTable."Processing Status"::Completed;
|
|
98
|
+
WorkingTable.Modify();
|
|
99
|
+
until WorkingTable.Next() = 0;
|
|
100
|
+
end;
|
|
101
|
+
```
|
package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Temporary Table Operation Validation
|
|
2
|
+
|
|
3
|
+
## Pre-Operation Validation
|
|
4
|
+
```al
|
|
5
|
+
procedure ValidateTemporaryTableOperation(var TempRecord: Record "Generic Record"; OperationType: Text)
|
|
6
|
+
begin
|
|
7
|
+
if not TempRecord.IsTemporary then
|
|
8
|
+
Error('Operation "%1" requires a temporary table to ensure data safety. Current table is permanent.', OperationType);
|
|
9
|
+
|
|
10
|
+
if TempRecord.IsEmpty() then
|
|
11
|
+
Error('Cannot perform "%1" operation on empty temporary table.', OperationType);
|
|
12
|
+
end;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Batch Processing Safety Check
|
|
16
|
+
```al
|
|
17
|
+
procedure ProcessTemporaryRecords(var TempSalesLine: Record "Sales Line" temporary)
|
|
18
|
+
var
|
|
19
|
+
LineCount: Integer;
|
|
20
|
+
begin
|
|
21
|
+
// Validate temporary status before bulk operations
|
|
22
|
+
if not TempSalesLine.IsTemporary then
|
|
23
|
+
Error('Batch processing requires temporary table to prevent permanent data corruption.');
|
|
24
|
+
|
|
25
|
+
TempSalesLine.Reset();
|
|
26
|
+
LineCount := TempSalesLine.Count();
|
|
27
|
+
|
|
28
|
+
if LineCount = 0 then
|
|
29
|
+
Error('No records found in temporary table for processing.');
|
|
30
|
+
|
|
31
|
+
if LineCount > 10000 then
|
|
32
|
+
if not Confirm('Processing %1 records may take considerable time. Continue?', false, LineCount) then
|
|
33
|
+
exit;
|
|
34
|
+
|
|
35
|
+
ProcessBatchRecords(TempSalesLine);
|
|
36
|
+
end;
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Complex Operation Validation
|
|
40
|
+
```al
|
|
41
|
+
procedure ExecuteComplexDataOperation(var TempCustomer: Record Customer temporary; var TempVendor: Record Vendor temporary)
|
|
42
|
+
begin
|
|
43
|
+
// Validate both tables are temporary
|
|
44
|
+
ValidateAllTablesTemporary(TempCustomer, TempVendor);
|
|
45
|
+
|
|
46
|
+
// Validate data consistency
|
|
47
|
+
if TempCustomer.IsEmpty() and TempVendor.IsEmpty() then
|
|
48
|
+
Error('At least one temporary table must contain data for processing.');
|
|
49
|
+
|
|
50
|
+
// Execute complex operation safely
|
|
51
|
+
ProcessCustomerVendorRelationship(TempCustomer, TempVendor);
|
|
52
|
+
end;
|
|
53
|
+
|
|
54
|
+
local procedure ValidateAllTablesTemporary(var TempCustomer: Record Customer temporary; var TempVendor: Record Vendor temporary)
|
|
55
|
+
begin
|
|
56
|
+
if not TempCustomer.IsTemporary then
|
|
57
|
+
Error('Customer table must be temporary for this operation.');
|
|
58
|
+
|
|
59
|
+
if not TempVendor.IsTemporary then
|
|
60
|
+
Error('Vendor table must be temporary for this operation.');
|
|
61
|
+
end;
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Transaction Safety Validation
|
|
65
|
+
```al
|
|
66
|
+
procedure SafeTemporaryTableTransaction(var TempGLEntry: Record "G/L Entry" temporary)
|
|
67
|
+
begin
|
|
68
|
+
if not TempGLEntry.IsTemporary then
|
|
69
|
+
Error('Financial data operations require temporary tables to prevent accidental posting.');
|
|
70
|
+
|
|
71
|
+
// Validate data integrity before processing
|
|
72
|
+
ValidateFinancialData(TempGLEntry);
|
|
73
|
+
|
|
74
|
+
// Process in transaction
|
|
75
|
+
if TempGLEntry.FindSet() then
|
|
76
|
+
repeat
|
|
77
|
+
ProcessGLEntry(TempGLEntry);
|
|
78
|
+
until TempGLEntry.Next() = 0;
|
|
79
|
+
end;
|
|
80
|
+
|
|
81
|
+
local procedure ValidateFinancialData(var TempGLEntry: Record "G/L Entry" temporary)
|
|
82
|
+
var
|
|
83
|
+
TotalAmount: Decimal;
|
|
84
|
+
begin
|
|
85
|
+
TempGLEntry.CalcSums(Amount);
|
|
86
|
+
TotalAmount := TempGLEntry.Amount;
|
|
87
|
+
|
|
88
|
+
if Abs(TotalAmount) > 1000000 then
|
|
89
|
+
Error('Total amount %1 exceeds safety threshold for temporary table operations.', TotalAmount);
|
|
90
|
+
end;
|
|
91
|
+
```
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Table Safety Validation Patterns for Error Prevention"
|
|
3
|
+
domain: "quinn-tester"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["error-prevention", "table-safety", "validation", "defensive-programming", "data-protection"]
|
|
7
|
+
prerequisites: ["error-handling", "al-tables"]
|
|
8
|
+
samples: "samples/table-safety-validation-patterns.md"
|
|
9
|
+
---
|
|
10
|
+
# Table Safety Validation Patterns for Error Prevention
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Table safety validation patterns provide defensive programming approaches that prevent common data manipulation errors by validating table state, operation context, and business constraints before executing potentially destructive operations.
|
|
15
|
+
|
|
16
|
+
**Prevention Strategy**: Implement validation barriers that catch dangerous operations before they can cause data corruption, performance issues, or business logic violations.
|
|
17
|
+
|
|
18
|
+
## Strategic Framework
|
|
19
|
+
|
|
20
|
+
### Proactive Error Prevention
|
|
21
|
+
- **Validation gates**: Check conditions that could lead to errors before execution
|
|
22
|
+
- **Safe defaults**: Design operations to fail safely when validation is incomplete
|
|
23
|
+
- **Context awareness**: Validate operations against current business and technical context
|
|
24
|
+
- **Recovery preparation**: Include error recovery information in validation failures
|
|
25
|
+
|
|
26
|
+
### Risk Assessment Strategy
|
|
27
|
+
- **Impact evaluation**: Assess potential damage from failed validations
|
|
28
|
+
- **Probability analysis**: Focus validation on most likely error scenarios
|
|
29
|
+
- **Cost-benefit balance**: Optimize validation overhead against error prevention value
|
|
30
|
+
- **Monitoring integration**: Track validation patterns to improve error prevention
|
|
31
|
+
|
|
32
|
+
## Architecture Patterns
|
|
33
|
+
|
|
34
|
+
### Multi-Layer Validation Architecture
|
|
35
|
+
Implement validation at multiple levels (table, operation, business rule) to create comprehensive error prevention coverage without excessive performance overhead.
|
|
36
|
+
|
|
37
|
+
### Fail-Fast Pattern Implementation
|
|
38
|
+
Design validation to detect and report errors as early as possible in operation execution, minimizing resource waste and simplifying error recovery.
|
|
39
|
+
|
|
40
|
+
### Contextual Safety Checks
|
|
41
|
+
Build validation that considers current operational context, user permissions, data state, and business rules to prevent context-inappropriate operations.
|
|
42
|
+
|
|
43
|
+
## Implementation Guidelines
|
|
44
|
+
|
|
45
|
+
### Validation Design Principles
|
|
46
|
+
- **Specific error identification**: Provide precise information about validation failures
|
|
47
|
+
- **Performance optimization**: Design efficient validation that doesn't significantly impact operation speed
|
|
48
|
+
- **Maintainable validation**: Create validation rules that are easy to update as requirements change
|
|
49
|
+
- **Comprehensive coverage**: Address common error scenarios systematically
|
|
50
|
+
|
|
51
|
+
### Error Prevention Strategy
|
|
52
|
+
Implement validation patterns that catch errors before they propagate through the system, focusing on operations that could cause data integrity issues or performance problems.
|
|
53
|
+
|
|
54
|
+
### Recovery Planning Integration
|
|
55
|
+
Design validation failures to include guidance for correcting the conditions that caused the validation to fail.
|
|
56
|
+
|
|
57
|
+
## Best Practices
|
|
58
|
+
|
|
59
|
+
### Defensive Programming Approach
|
|
60
|
+
- **Assume input variability**: Validate all external inputs and parameters
|
|
61
|
+
- **Check preconditions**: Verify system state meets operation requirements
|
|
62
|
+
- **Validate postconditions**: Ensure operations completed as expected
|
|
63
|
+
- **Monitor edge cases**: Pay special attention to boundary conditions and unusual scenarios
|
|
64
|
+
|
|
65
|
+
### Systematic Validation Implementation
|
|
66
|
+
Apply consistent validation patterns across similar operations, ensuring comprehensive error prevention coverage without creating maintenance overhead.
|
|
67
|
+
|
|
68
|
+
### Documentation and Communication
|
|
69
|
+
Clearly document validation logic and error prevention strategies to help team members understand and maintain safety measures.
|
|
70
|
+
|
|
71
|
+
## Anti-Patterns
|
|
72
|
+
|
|
73
|
+
### Avoid These Approaches
|
|
74
|
+
- **Validation bypass**: Skipping safety checks for convenience or performance
|
|
75
|
+
- **Generic error handling**: Non-specific error messages that don't help diagnosis
|
|
76
|
+
- **Late validation**: Checking safety conditions after beginning operations
|
|
77
|
+
- **Inconsistent application**: Using validation in some contexts but not others
|
|
78
|
+
- **Over-validation**: Excessive checking that significantly impacts performance
|
|
79
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Temporary Table Operation Validation Patterns"
|
|
3
|
+
domain: "quinn-tester"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["validation", "temporary-tables", "data-integrity", "operation-safety", "preconditions"]
|
|
7
|
+
prerequisites: ["al-tables", "validation-patterns"]
|
|
8
|
+
samples: "samples/temporary-table-operation-validation.md"
|
|
9
|
+
---
|
|
10
|
+
# Temporary Table Operation Validation Patterns
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Temporary table operation validation ensures data manipulation procedures correctly identify and handle temporary versus permanent tables, preventing unintended data modifications and maintaining operation safety through systematic validation patterns.
|
|
15
|
+
|
|
16
|
+
**Validation Principle**: Validate table characteristics and operational context before executing data modifications to ensure operations match intended scope and safety requirements.
|
|
17
|
+
|
|
18
|
+
## Strategic Framework
|
|
19
|
+
|
|
20
|
+
### Validation Layer Architecture
|
|
21
|
+
- **Precondition validation**: Verify table state before operation execution
|
|
22
|
+
- **Operation scoping**: Ensure operations match table characteristics
|
|
23
|
+
- **Context awareness**: Validate operations against business rules and data constraints
|
|
24
|
+
- **Safety enforcement**: Prevent operations that violate data integrity principles
|
|
25
|
+
|
|
26
|
+
### Multi-Level Validation Strategy
|
|
27
|
+
- **Table-level checks**: Validate table properties and characteristics
|
|
28
|
+
- **Operation-level checks**: Ensure operation appropriateness for table type
|
|
29
|
+
- **Data-level checks**: Verify data consistency and integrity requirements
|
|
30
|
+
- **Business rule validation**: Confirm operations align with business logic
|
|
31
|
+
|
|
32
|
+
## Architecture Patterns
|
|
33
|
+
|
|
34
|
+
### Precondition Validation Framework
|
|
35
|
+
Implement systematic validation that checks table properties, operation parameters, and business context before allowing data manipulation operations to proceed.
|
|
36
|
+
|
|
37
|
+
### Conditional Operation Pattern
|
|
38
|
+
Design operations that adapt their behavior based on table validation results, providing different execution paths for temporary versus permanent tables.
|
|
39
|
+
|
|
40
|
+
### Validation Chain Architecture
|
|
41
|
+
Build validation sequences that check multiple conditions in logical order, failing fast when validation criteria are not met.
|
|
42
|
+
|
|
43
|
+
## Implementation Guidelines
|
|
44
|
+
|
|
45
|
+
### Validation Sequence Design
|
|
46
|
+
- **Early validation**: Check conditions before resource allocation or lock acquisition
|
|
47
|
+
- **Logical ordering**: Validate quick checks before expensive operations
|
|
48
|
+
- **Clear failure points**: Provide specific validation failure information
|
|
49
|
+
- **Recovery guidance**: Include corrective action suggestions in validation messages
|
|
50
|
+
|
|
51
|
+
### Table Characteristic Validation
|
|
52
|
+
Implement checks for table temporariness, permissions, field availability, and other characteristics that affect operation safety and appropriateness.
|
|
53
|
+
|
|
54
|
+
### Operation Context Validation
|
|
55
|
+
Validate that proposed operations are appropriate for current business context, user permissions, and data state conditions.
|
|
56
|
+
|
|
57
|
+
## Best Practices
|
|
58
|
+
|
|
59
|
+
### Comprehensive Validation Coverage
|
|
60
|
+
- **Complete condition checking**: Validate all relevant preconditions systematically
|
|
61
|
+
- **Consistent validation patterns**: Apply similar validation approaches across related operations
|
|
62
|
+
- **Performance optimization**: Balance thoroughness with execution efficiency
|
|
63
|
+
- **Maintainable validation**: Design validation rules that are easy to update and extend
|
|
64
|
+
|
|
65
|
+
### Error Communication Strategy
|
|
66
|
+
Provide clear, specific error messages that help developers understand validation failures and guide them toward correct implementation approaches.
|
|
67
|
+
|
|
68
|
+
### Testing Integration
|
|
69
|
+
Include validation testing in unit test suites, ensuring validation logic correctly identifies valid and invalid operation scenarios.
|
|
70
|
+
|
|
71
|
+
## Anti-Patterns
|
|
72
|
+
|
|
73
|
+
### Avoid These Approaches
|
|
74
|
+
- **Incomplete validation**: Missing critical precondition checks
|
|
75
|
+
- **Late validation**: Checking conditions after beginning modifications
|
|
76
|
+
- **Silent validation failures**: Not providing clear feedback when validation fails
|
|
77
|
+
- **Inconsistent validation**: Different validation approaches for similar operations
|
|
78
|
+
- **Performance-over-safety**: Skipping validation for perceived performance benefits
|
|
79
|
+
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Begin/End Block Structure Conventions"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["al-syntax", "code-structure", "triggers", "blocks"]
|
|
7
|
+
samples: "samples/al-begin-end-blocks.md"
|
|
8
|
+
type: "language-feature"
|
|
9
|
+
category: "al-syntax"
|
|
10
|
+
pattern_type: "good"
|
|
11
|
+
severity: "low"
|
|
12
|
+
impact_level: "medium"
|
|
13
|
+
improvement_suggestion: "Use proper begin/end block structure for maintainable AL code"
|
|
14
|
+
implementation_steps: ["understand-block-types", "apply-nesting-rules", "maintain-indentation"]
|
|
15
|
+
validation_criteria: ["proper-block-nesting", "consistent-indentation", "clear-trigger-structure"]
|
|
16
|
+
technical_areas: ["al-code", "syntax"]
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL Begin/End Block Structure Conventions
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
Begin/end blocks form the fundamental structure of AL code organization, defining scope boundaries for triggers, procedures, and control statements. Proper block structure ensures code readability, maintainability, and compiler compliance across all AL object types.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Every begin statement must have a corresponding end statement, with consistent indentation and logical organization that reflects the code's hierarchical structure.
|
|
26
|
+
|
|
27
|
+
AL uses begin/end blocks to group statements in triggers, procedures, and control structures. Unlike languages that use curly braces, AL's explicit begin/end syntax requires careful attention to matching pairs and proper nesting levels.
|
|
28
|
+
|
|
29
|
+
## Strategic Framework
|
|
30
|
+
|
|
31
|
+
### Block Types and Usage Patterns
|
|
32
|
+
**Object Triggers**: Table, page, and report triggers use begin/end to define event handling logic with specific indentation conventions that reflect the trigger's scope within the object hierarchy.
|
|
33
|
+
|
|
34
|
+
**Procedure Bodies**: Function and procedure definitions require begin/end blocks to encapsulate implementation logic, with parameter validation and return value handling organized within the block structure.
|
|
35
|
+
|
|
36
|
+
**Control Structures**: If/then/else, case, while, and for statements use begin/end blocks to group multiple statements, enabling complex conditional and iterative logic organization.
|
|
37
|
+
|
|
38
|
+
**Exception Handling**: Try/catch blocks and error handling patterns rely on proper begin/end structure to define exception scope and recovery logic boundaries.
|
|
39
|
+
|
|
40
|
+
### Scope Management Principles
|
|
41
|
+
Begin/end blocks establish variable scope boundaries and memory management contexts. Local variables declared within blocks have limited lifetime, while proper nesting ensures predictable variable accessibility patterns.
|
|
42
|
+
|
|
43
|
+
Block structure directly impacts debugging capabilities, with debugger stepping behavior following begin/end boundaries. Well-structured blocks enable precise breakpoint placement and variable inspection at appropriate scope levels.
|
|
44
|
+
|
|
45
|
+
## Architecture Focus
|
|
46
|
+
|
|
47
|
+
### Trigger Structure Patterns
|
|
48
|
+
Object triggers follow established conventions where the trigger keyword is followed by begin/end blocks containing the implementation logic. Primary triggers like OnInsert, OnModify, and OnDelete use consistent indentation patterns.
|
|
49
|
+
|
|
50
|
+
Complex triggers may contain nested begin/end blocks for conditional logic, but excessive nesting indicates potential refactoring opportunities toward separate procedures or better logical organization.
|
|
51
|
+
|
|
52
|
+
### Procedure Organization Standards
|
|
53
|
+
Procedure definitions separate the signature line from the implementation block, with local variables declared between the signature and begin statement. This separation clarifies parameter contracts and local variable scope.
|
|
54
|
+
|
|
55
|
+
Return statements within procedure blocks require careful placement, ensuring all code paths properly handle return values and that unreachable code warnings are addressed through proper block organization.
|
|
56
|
+
|
|
57
|
+
### Control Flow Architecture
|
|
58
|
+
Nested control structures require systematic indentation increases for each begin/end level, creating visual hierarchy that matches the logical structure. Deep nesting beyond three levels suggests architectural refactoring needs.
|
|
59
|
+
|
|
60
|
+
Exception handling blocks integrate with normal control flow through try/catch patterns that maintain clear begin/end boundaries while providing comprehensive error recovery mechanisms.
|
|
61
|
+
|
|
62
|
+
## Best Practices
|
|
63
|
+
|
|
64
|
+
### Indentation and Formatting Standards
|
|
65
|
+
- **Consistent Indentation**: Maintain four-space indentation for each begin/end nesting level, aligning begin and end keywords at the same indentation level
|
|
66
|
+
- **Visual Block Boundaries**: Create clear visual block boundaries that match logical code organization
|
|
67
|
+
- **Semicolon Placement**: Place semicolons correctly after end keywords to maintain AL syntax compliance
|
|
68
|
+
|
|
69
|
+
### Block Boundary Management
|
|
70
|
+
- **Matched Pairs**: Every begin statement requires a corresponding end statement at the same indentation level
|
|
71
|
+
- **Meaningful Blocks**: Avoid empty begin/end blocks except where required by AL syntax
|
|
72
|
+
- **Logical Organization**: Group related statements within begin/end blocks to create coherent units of work
|
|
73
|
+
|
|
74
|
+
### Variable Scope Optimization
|
|
75
|
+
- **Appropriate Scope**: Declare variables at the narrowest appropriate scope level using begin/end blocks
|
|
76
|
+
- **Meaningful Names**: Use descriptive variable names that reflect their purpose within specific block contexts
|
|
77
|
+
- **Memory Management**: Leverage begin/end blocks to limit variable lifetime and improve memory usage patterns
|
|
78
|
+
|
|
79
|
+
## Anti-Patterns
|
|
80
|
+
|
|
81
|
+
### Avoid These Approaches
|
|
82
|
+
- **Mismatched Pairs**: Missing or extra begin/end statements create compilation errors and logical inconsistencies
|
|
83
|
+
- **Inconsistent Indentation**: Irregular indentation patterns obscure block boundaries and complicate maintenance
|
|
84
|
+
- **Excessive Nesting**: Deep begin/end nesting beyond reasonable levels indicates architectural problems requiring refactoring
|
|
85
|
+
- **Empty Blocks**: Unnecessary empty begin/end blocks add visual clutter without functional value
|
|
86
|
+
- **Poor Exception Boundaries**: Exception handling blocks that don't align with logical begin/end boundaries create unclear error recovery patterns
|
|
87
|
+
|
|
88
|
+
*Implementation examples: see samples/al-begin-end-blocks.md*
|
|
89
|
+
*Related patterns: al-procedure-organization.md, al-error-handling-patterns.md*
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Binary Operator Spacing"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["operators", "spacing", "expressions"]
|
|
7
|
+
samples: "samples/al-binary-operator-spacing.md"
|
|
8
|
+
type: "improvement-pattern"
|
|
9
|
+
category: "code-formatting"
|
|
10
|
+
pattern_type: "good"
|
|
11
|
+
severity: "medium"
|
|
12
|
+
impact_level: "medium"
|
|
13
|
+
improvement_suggestion: "Use consistent spacing around binary operators to improve expression readability"
|
|
14
|
+
implementation_steps: ["standardize-operator-spacing", "apply-consistent-patterns", "validate-readability"]
|
|
15
|
+
validation_criteria: ["consistent-operator-spacing", "improved-expression-clarity"]
|
|
16
|
+
technical_areas: ["al-code"]
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL Binary Operator Spacing
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
Consistent spacing around binary operators in AL expressions improves readability and helps developers quickly understand mathematical, logical, and comparison operations. Proper operator spacing is a fundamental formatting practice that enhances code clarity.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Use consistent spacing around binary operators to create clear, readable expressions that are easy to understand and maintain.
|
|
26
|
+
|
|
27
|
+
## Strategic Framework
|
|
28
|
+
|
|
29
|
+
### Expression Clarity
|
|
30
|
+
- **Visual Separation**: Clear spacing around operators for easy parsing
|
|
31
|
+
- **Readability Focus**: Formatting that supports quick expression comprehension
|
|
32
|
+
- **Consistency Standards**: Uniform spacing patterns across all expressions
|
|
33
|
+
- **Mathematical Convention**: Spacing that follows standard mathematical notation
|
|
34
|
+
|
|
35
|
+
### Code Comprehension
|
|
36
|
+
Well-spaced operators help developers quickly identify expression structure, operator precedence, and logical relationships within complex calculations and conditions.
|
|
37
|
+
|
|
38
|
+
## Architecture Focus
|
|
39
|
+
|
|
40
|
+
### Operator Categories
|
|
41
|
+
- **Arithmetic Operators**: +, -, *, /, mod with consistent spacing
|
|
42
|
+
- **Comparison Operators**: =, <>, <, >, <=, >= with clear separation
|
|
43
|
+
- **Logical Operators**: and, or, not with appropriate spacing
|
|
44
|
+
- **Assignment Operators**: := with consistent formatting
|
|
45
|
+
|
|
46
|
+
### Spacing Patterns
|
|
47
|
+
Establish consistent spacing rules that work well with AL syntax and support effective expression formatting across different operator types and complexity levels.
|
|
48
|
+
|
|
49
|
+
## Best Practices
|
|
50
|
+
|
|
51
|
+
### Spacing Guidelines
|
|
52
|
+
- **Single space before and after** binary operators
|
|
53
|
+
- **Consistent application** across all expression types
|
|
54
|
+
- **Clear operator separation** in complex expressions
|
|
55
|
+
- **Parentheses coordination** with operator spacing
|
|
56
|
+
- **Alignment consideration** in multi-line expressions
|
|
57
|
+
|
|
58
|
+
### Expression Organization
|
|
59
|
+
Structure complex expressions with appropriate spacing to maintain readability. Use consistent patterns for operator spacing that integrate well with overall code formatting.
|
|
60
|
+
|
|
61
|
+
### Readability Optimization
|
|
62
|
+
Format expressions to minimize cognitive load when understanding mathematical and logical operations. Use spacing to create natural reading flow in complex calculations.
|
|
63
|
+
|
|
64
|
+
## Anti-Patterns
|
|
65
|
+
|
|
66
|
+
### Avoid These Approaches
|
|
67
|
+
- **No spacing around operators** creating cramped expressions
|
|
68
|
+
- **Inconsistent spacing** within single expressions
|
|
69
|
+
- **Excessive spacing** disrupting expression flow
|
|
70
|
+
- **Mixed spacing styles** across different AL objects
|
|
71
|
+
- **Poor alignment** in multi-line expressions
|
|
72
|
+
|
|
73
|
+
Poor operator spacing makes expressions harder to read and increases the likelihood of errors when understanding complex calculations and logical conditions.
|
|
74
|
+
|
|
75
|
+
*Implementation examples: see samples/al-binary-operator-spacing.md*
|
|
76
|
+
*Related patterns: al-comment-spacing-standards.md, al-readability-optimization.md*
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Blank Line Organization"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["formatting", "readability", "code-organization"]
|
|
7
|
+
samples: "samples/al-blank-line-organization.md"
|
|
8
|
+
type: "improvement-pattern"
|
|
9
|
+
category: "code-formatting"
|
|
10
|
+
pattern_type: "good"
|
|
11
|
+
severity: "medium"
|
|
12
|
+
impact_level: "medium"
|
|
13
|
+
improvement_suggestion: "Use strategic blank lines to organize AL code into logical sections"
|
|
14
|
+
implementation_steps: ["identify-logical-sections", "insert-separating-blank-lines", "validate-consistency"]
|
|
15
|
+
validation_criteria: ["logical-grouping-clear", "consistent-spacing-applied"]
|
|
16
|
+
technical_areas: ["al-code"]
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL Blank Line Organization
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
Strategic blank line placement in AL code creates visual separation between logical sections, improving readability and maintainability. Proper blank line organization helps developers quickly identify code structure and navigate complex procedures and functions.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Use blank lines to separate distinct logical operations, not arbitrary code segments.
|
|
26
|
+
|
|
27
|
+
## Strategic Framework
|
|
28
|
+
|
|
29
|
+
### Visual Code Organization
|
|
30
|
+
- **Logical Grouping**: Separate variable declarations, business logic sections, and error handling
|
|
31
|
+
- **Functional Boundaries**: Use blank lines before and after major functional blocks
|
|
32
|
+
- **Context Switching**: Insert blank lines when switching between different data operations
|
|
33
|
+
- **Method Structure**: Consistent spacing patterns within methods and triggers
|
|
34
|
+
|
|
35
|
+
### Readability Enhancement
|
|
36
|
+
Blank lines act as visual punctuation, allowing developers to parse code structure quickly. They reduce cognitive load by creating natural reading breaks and highlighting important transitions.
|
|
37
|
+
|
|
38
|
+
## Architecture Focus
|
|
39
|
+
|
|
40
|
+
### Code Structure Patterns
|
|
41
|
+
- **Declaration Blocks**: Separate variable declarations from executable code
|
|
42
|
+
- **Business Logic Sections**: Group related operations with clear boundaries
|
|
43
|
+
- **Error Handling**: Isolate error handling code with appropriate spacing
|
|
44
|
+
- **Data Processing**: Separate input validation, processing, and output operations
|
|
45
|
+
|
|
46
|
+
### Consistency Principles
|
|
47
|
+
Establish team-wide conventions for blank line usage to ensure consistent code appearance across all AL objects. Consistent formatting reduces context switching overhead when reviewing code.
|
|
48
|
+
|
|
49
|
+
## Best Practices
|
|
50
|
+
|
|
51
|
+
### Effective Blank Line Placement
|
|
52
|
+
- **After variable declarations** before first executable statement
|
|
53
|
+
- **Between major functional blocks** within procedures
|
|
54
|
+
- **Before and after loops** containing significant logic
|
|
55
|
+
- **Around error handling blocks** for clear separation
|
|
56
|
+
- **Between related but distinct operations** for logical grouping
|
|
57
|
+
|
|
58
|
+
### Grouping Strategies
|
|
59
|
+
Group related variable declarations together, separate business logic sections clearly, and use blank lines to emphasize important transitions in code flow.
|
|
60
|
+
|
|
61
|
+
### Consistency Rules
|
|
62
|
+
Apply blank line patterns consistently across all AL objects in your extension. Document team conventions for blank line usage in coding standards.
|
|
63
|
+
|
|
64
|
+
## Anti-Patterns
|
|
65
|
+
|
|
66
|
+
### Avoid These Approaches
|
|
67
|
+
- **Excessive blank lines** that fragment code unnecessarily
|
|
68
|
+
- **Random spacing** without logical organization principles
|
|
69
|
+
- **No blank lines** creating dense, hard-to-read code blocks
|
|
70
|
+
- **Inconsistent patterns** across different AL objects
|
|
71
|
+
- **Blank lines within tightly coupled operations** that should remain grouped
|
|
72
|
+
|
|
73
|
+
Inconsistent blank line usage creates visual noise and makes code harder to scan effectively. Avoid both extremes of no spacing and excessive spacing.
|
|
74
|
+
|
|
75
|
+
*Implementation examples: see samples/al-blank-line-organization.md*
|
|
76
|
+
*Related patterns: al-formatting-consistency-patterns.md, al-readability-optimization.md*
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Case Action Formatting"
|
|
3
|
+
domain: "roger-reviewer"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["case-statements", "formatting", "control-flow"]
|
|
7
|
+
samples: "samples/al-case-action-formatting.md"
|
|
8
|
+
type: "improvement-pattern"
|
|
9
|
+
category: "code-formatting"
|
|
10
|
+
pattern_type: "good"
|
|
11
|
+
severity: "medium"
|
|
12
|
+
impact_level: "medium"
|
|
13
|
+
improvement_suggestion: "Format case statement actions with consistent indentation and clear action boundaries"
|
|
14
|
+
implementation_steps: ["standardize-case-indentation", "align-action-blocks", "validate-readability"]
|
|
15
|
+
validation_criteria: ["consistent-indentation", "clear-action-separation"]
|
|
16
|
+
technical_areas: ["al-code"]
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL Case Action Formatting
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
Proper formatting of case statement actions in AL code ensures clear visual separation between different case branches and improves code readability. Consistent case action formatting helps developers quickly understand control flow logic and reduces errors in complex decision structures.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Each case action should be clearly separated and consistently indented to highlight the decision structure.
|
|
26
|
+
|
|
27
|
+
## Strategic Framework
|
|
28
|
+
|
|
29
|
+
### Case Statement Structure
|
|
30
|
+
- **Visual Hierarchy**: Clear indentation showing case relationship to parent statement
|
|
31
|
+
- **Action Boundaries**: Distinct separation between different case actions
|
|
32
|
+
- **Consistent Patterns**: Uniform formatting across all case statements in codebase
|
|
33
|
+
- **Readability Focus**: Format that supports quick visual parsing of decision logic
|
|
34
|
+
|
|
35
|
+
### Control Flow Clarity
|
|
36
|
+
Case formatting should make the decision structure immediately apparent to code reviewers and maintainers. Well-formatted case statements reduce cognitive overhead when understanding complex business logic.
|
|
37
|
+
|
|
38
|
+
## Architecture Focus
|
|
39
|
+
|
|
40
|
+
### Indentation Standards
|
|
41
|
+
- **Case Labels**: Consistent alignment with case keyword
|
|
42
|
+
- **Action Blocks**: Proper indentation for multi-line actions
|
|
43
|
+
- **Nested Structures**: Clear hierarchy for nested case statements
|
|
44
|
+
- **Code Organization**: Logical grouping of related case branches
|
|
45
|
+
|
|
46
|
+
### Visual Consistency
|
|
47
|
+
Establish consistent patterns for case action formatting that work well with AL language structure and team coding practices. Consistent formatting improves code review efficiency.
|
|
48
|
+
|
|
49
|
+
## Best Practices
|
|
50
|
+
|
|
51
|
+
### Formatting Patterns
|
|
52
|
+
- **Consistent indentation** for all case actions within statement
|
|
53
|
+
- **Clear separation** between case labels and actions
|
|
54
|
+
- **Aligned case labels** for easy visual scanning
|
|
55
|
+
- **Proper spacing** around case statement boundaries
|
|
56
|
+
- **Multi-line action formatting** with appropriate indentation
|
|
57
|
+
|
|
58
|
+
### Action Organization
|
|
59
|
+
Group related case actions logically, use consistent formatting for single-line versus multi-line actions, and maintain clear visual boundaries between different branches.
|
|
60
|
+
|
|
61
|
+
### Readability Optimization
|
|
62
|
+
Format case statements to support quick visual parsing of decision logic. Use whitespace effectively to create clear visual separation between different execution paths.
|
|
63
|
+
|
|
64
|
+
## Anti-Patterns
|
|
65
|
+
|
|
66
|
+
### Avoid These Approaches
|
|
67
|
+
- **Inconsistent case label alignment** making structure unclear
|
|
68
|
+
- **Poor action block indentation** obscuring code hierarchy
|
|
69
|
+
- **Cramped formatting** without adequate spacing
|
|
70
|
+
- **Mixed formatting styles** within single case statement
|
|
71
|
+
- **Unclear action boundaries** between different cases
|
|
72
|
+
|
|
73
|
+
Poor case formatting makes decision logic harder to follow and increases the likelihood of errors during code maintenance and enhancement.
|
|
74
|
+
|
|
75
|
+
*Implementation examples: see samples/al-case-action-formatting.md*
|
|
76
|
+
*Related patterns: al-keyword-indentation-rules.md, al-separate-if-else-formatting.md*
|