@jwikman/bc-code-intelligence-mcp 1.5.7-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +165 -0
- package/dist/cache/cache-manager.d.ts +95 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +328 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cli/bc-code-intel-cli.d.ts +9 -0
- package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
- package/dist/cli/bc-code-intel-cli.js +440 -0
- package/dist/cli/bc-code-intel-cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +28 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +497 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +84 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +608 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/test-config-loader.d.ts +10 -0
- package/dist/config/test-config-loader.d.ts.map +1 -0
- package/dist/config/test-config-loader.js +135 -0
- package/dist/config/test-config-loader.js.map +1 -0
- package/dist/config/test-enhanced-layer-service.d.ts +7 -0
- package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
- package/dist/config/test-enhanced-layer-service.js +104 -0
- package/dist/config/test-enhanced-layer-service.js.map +1 -0
- package/dist/config/test-git-layer.d.ts +7 -0
- package/dist/config/test-git-layer.d.ts.map +1 -0
- package/dist/config/test-git-layer.js +68 -0
- package/dist/config/test-git-layer.js.map +1 -0
- package/dist/dev/hot-reload.d.ts +91 -0
- package/dist/dev/hot-reload.d.ts.map +1 -0
- package/dist/dev/hot-reload.js +358 -0
- package/dist/dev/hot-reload.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1211 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/base-layer.d.ts +133 -0
- package/dist/layers/base-layer.d.ts.map +1 -0
- package/dist/layers/base-layer.js +290 -0
- package/dist/layers/base-layer.js.map +1 -0
- package/dist/layers/embedded-layer.d.ts +130 -0
- package/dist/layers/embedded-layer.d.ts.map +1 -0
- package/dist/layers/embedded-layer.js +612 -0
- package/dist/layers/embedded-layer.js.map +1 -0
- package/dist/layers/git-layer.d.ts +77 -0
- package/dist/layers/git-layer.d.ts.map +1 -0
- package/dist/layers/git-layer.js +529 -0
- package/dist/layers/git-layer.js.map +1 -0
- package/dist/layers/index.d.ts +12 -0
- package/dist/layers/index.d.ts.map +1 -0
- package/dist/layers/index.js +11 -0
- package/dist/layers/index.js.map +1 -0
- package/dist/layers/layer-service.d.ts +135 -0
- package/dist/layers/layer-service.d.ts.map +1 -0
- package/dist/layers/layer-service.js +586 -0
- package/dist/layers/layer-service.js.map +1 -0
- package/dist/layers/project-layer.d.ts +58 -0
- package/dist/layers/project-layer.d.ts.map +1 -0
- package/dist/layers/project-layer.js +286 -0
- package/dist/layers/project-layer.js.map +1 -0
- package/dist/monitoring/production-monitor.d.ts +148 -0
- package/dist/monitoring/production-monitor.d.ts.map +1 -0
- package/dist/monitoring/production-monitor.js +463 -0
- package/dist/monitoring/production-monitor.js.map +1 -0
- package/dist/performance/performance-monitor.d.ts +99 -0
- package/dist/performance/performance-monitor.d.ts.map +1 -0
- package/dist/performance/performance-monitor.js +253 -0
- package/dist/performance/performance-monitor.js.map +1 -0
- package/dist/sdk/bc-code-intel-client.d.ts +175 -0
- package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
- package/dist/sdk/bc-code-intel-client.js +380 -0
- package/dist/sdk/bc-code-intel-client.js.map +1 -0
- package/dist/search/intelligent-search.d.ts +97 -0
- package/dist/search/intelligent-search.d.ts.map +1 -0
- package/dist/search/intelligent-search.js +358 -0
- package/dist/search/intelligent-search.js.map +1 -0
- package/dist/security/access-control.d.ts +110 -0
- package/dist/security/access-control.d.ts.map +1 -0
- package/dist/security/access-control.js +353 -0
- package/dist/security/access-control.js.map +1 -0
- package/dist/services/code-analysis-service.d.ts +72 -0
- package/dist/services/code-analysis-service.d.ts.map +1 -0
- package/dist/services/code-analysis-service.js +818 -0
- package/dist/services/code-analysis-service.js.map +1 -0
- package/dist/services/enhanced-prompt-service.d.ts +56 -0
- package/dist/services/enhanced-prompt-service.d.ts.map +1 -0
- package/dist/services/enhanced-prompt-service.js +165 -0
- package/dist/services/enhanced-prompt-service.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +90 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +342 -0
- package/dist/services/knowledge-service.js.map +1 -0
- package/dist/services/methodology-service.d.ts +91 -0
- package/dist/services/methodology-service.d.ts.map +1 -0
- package/dist/services/methodology-service.js +423 -0
- package/dist/services/methodology-service.js.map +1 -0
- package/dist/services/multi-content-layer-service.d.ts +198 -0
- package/dist/services/multi-content-layer-service.d.ts.map +1 -0
- package/dist/services/multi-content-layer-service.js +991 -0
- package/dist/services/multi-content-layer-service.js.map +1 -0
- package/dist/services/roleplay-engine.d.ts +161 -0
- package/dist/services/roleplay-engine.d.ts.map +1 -0
- package/dist/services/roleplay-engine.js +994 -0
- package/dist/services/roleplay-engine.js.map +1 -0
- package/dist/services/session-storage/file-storage.d.ts +30 -0
- package/dist/services/session-storage/file-storage.d.ts.map +1 -0
- package/dist/services/session-storage/file-storage.js +229 -0
- package/dist/services/session-storage/file-storage.js.map +1 -0
- package/dist/services/session-storage/in-memory-storage.d.ts +31 -0
- package/dist/services/session-storage/in-memory-storage.d.ts.map +1 -0
- package/dist/services/session-storage/in-memory-storage.js +142 -0
- package/dist/services/session-storage/in-memory-storage.js.map +1 -0
- package/dist/services/specialist-discovery.d.ts +98 -0
- package/dist/services/specialist-discovery.d.ts.map +1 -0
- package/dist/services/specialist-discovery.js +387 -0
- package/dist/services/specialist-discovery.js.map +1 -0
- package/dist/services/specialist-loader.d.ts +101 -0
- package/dist/services/specialist-loader.d.ts.map +1 -0
- package/dist/services/specialist-loader.js +256 -0
- package/dist/services/specialist-loader.js.map +1 -0
- package/dist/services/specialist-session-manager.d.ts +76 -0
- package/dist/services/specialist-session-manager.d.ts.map +1 -0
- package/dist/services/specialist-session-manager.js +255 -0
- package/dist/services/specialist-session-manager.js.map +1 -0
- package/dist/services/workflow-service.d.ts +146 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +409 -0
- package/dist/services/workflow-service.js.map +1 -0
- package/dist/setup/post-install.d.ts +12 -0
- package/dist/setup/post-install.d.ts.map +1 -0
- package/dist/setup/post-install.js +81 -0
- package/dist/setup/post-install.js.map +1 -0
- package/dist/streamlined-handlers.d.ts +94 -0
- package/dist/streamlined-handlers.d.ts.map +1 -0
- package/dist/streamlined-handlers.js +665 -0
- package/dist/streamlined-handlers.js.map +1 -0
- package/dist/test-enhanced-mcp-server.d.ts +7 -0
- package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
- package/dist/test-enhanced-mcp-server.js +177 -0
- package/dist/test-enhanced-mcp-server.js.map +1 -0
- package/dist/tools/config-diagnostic-tools.d.ts +234 -0
- package/dist/tools/config-diagnostic-tools.d.ts.map +1 -0
- package/dist/tools/config-diagnostic-tools.js +887 -0
- package/dist/tools/config-diagnostic-tools.js.map +1 -0
- package/dist/tools/core-tools.d.ts +26 -0
- package/dist/tools/core-tools.d.ts.map +1 -0
- package/dist/tools/core-tools.js +241 -0
- package/dist/tools/core-tools.js.map +1 -0
- package/dist/tools/handoff-tools.d.ts +37 -0
- package/dist/tools/handoff-tools.d.ts.map +1 -0
- package/dist/tools/handoff-tools.js +265 -0
- package/dist/tools/handoff-tools.js.map +1 -0
- package/dist/tools/index.d.ts +61 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +75 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/onboarding-tools.d.ts +43 -0
- package/dist/tools/onboarding-tools.d.ts.map +1 -0
- package/dist/tools/onboarding-tools.js +353 -0
- package/dist/tools/onboarding-tools.js.map +1 -0
- package/dist/tools/specialist-discovery-tools.d.ts +27 -0
- package/dist/tools/specialist-discovery-tools.d.ts.map +1 -0
- package/dist/tools/specialist-discovery-tools.js +275 -0
- package/dist/tools/specialist-discovery-tools.js.map +1 -0
- package/dist/tools/specialist-tools.d.ts +43 -0
- package/dist/tools/specialist-tools.d.ts.map +1 -0
- package/dist/tools/specialist-tools.js +372 -0
- package/dist/tools/specialist-tools.js.map +1 -0
- package/dist/tools/workspace-tools.d.ts +96 -0
- package/dist/tools/workspace-tools.d.ts.map +1 -0
- package/dist/tools/workspace-tools.js +188 -0
- package/dist/tools/workspace-tools.js.map +1 -0
- package/dist/types/bc-knowledge.d.ts +303 -0
- package/dist/types/bc-knowledge.d.ts.map +1 -0
- package/dist/types/bc-knowledge.js +69 -0
- package/dist/types/bc-knowledge.js.map +1 -0
- package/dist/types/config-types.d.ts +186 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +109 -0
- package/dist/types/config-types.js.map +1 -0
- package/dist/types/enhanced-layer-types.d.ts +193 -0
- package/dist/types/enhanced-layer-types.d.ts.map +1 -0
- package/dist/types/enhanced-layer-types.js +9 -0
- package/dist/types/enhanced-layer-types.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/layer-types.d.ts +173 -0
- package/dist/types/layer-types.d.ts.map +1 -0
- package/dist/types/layer-types.js +27 -0
- package/dist/types/layer-types.js.map +1 -0
- package/dist/types/roleplay-types.d.ts +156 -0
- package/dist/types/roleplay-types.d.ts.map +1 -0
- package/dist/types/roleplay-types.js +8 -0
- package/dist/types/roleplay-types.js.map +1 -0
- package/dist/types/session-types.d.ts +127 -0
- package/dist/types/session-types.d.ts.map +1 -0
- package/dist/types/session-types.js +8 -0
- package/dist/types/session-types.js.map +1 -0
- package/dist/utils/path-utils.d.ts +5 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +14 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/workflows/domain-workflows.d.ts +8 -0
- package/dist/workflows/domain-workflows.d.ts.map +1 -0
- package/dist/workflows/domain-workflows.js +360 -0
- package/dist/workflows/domain-workflows.js.map +1 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
- package/embedded-knowledge/AGENTS.md +178 -0
- package/embedded-knowledge/CONTRIBUTING.md +58 -0
- package/embedded-knowledge/LICENSE +21 -0
- package/embedded-knowledge/README.md +32 -0
- package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
- package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
- package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
- package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
- package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
- package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +371 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
- package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +281 -0
- package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +248 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
- package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
- package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
- package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
- package/embedded-knowledge/domains/alex-architect/samples/testability-design-patterns.md +223 -0
- package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
- package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +77 -0
- package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +263 -0
- package/embedded-knowledge/domains/casey-copilot/samples/long-running-session-instructions.md +323 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +846 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +595 -0
- package/embedded-knowledge/domains/chris-config/content-types-structure.md +421 -0
- package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +437 -0
- package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +257 -0
- package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +302 -0
- package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +336 -0
- package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +453 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +360 -0
- package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
- package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
- package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
- package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
- package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
- package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
- package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
- package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
- package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +160 -0
- package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
- package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
- package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
- package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
- package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
- package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
- package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
- package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
- package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
- package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
- package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
- package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
- package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
- package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
- package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
- package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
- package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
- package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
- package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
- package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +159 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
- package/embedded-knowledge/domains/eva-errors/samples/codeunit-run-pattern.md +239 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
- package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
- package/embedded-knowledge/domains/eva-errors/samples/try-function-usage.md +195 -0
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
- package/embedded-knowledge/domains/eva-errors/try-function-usage.md +129 -0
- package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
- package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
- package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
- package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
- package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
- package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
- package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
- package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
- package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
- package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
- package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +201 -0
- package/embedded-knowledge/domains/morgan-market/samples/partner-readiness-checklist.md +288 -0
- package/embedded-knowledge/domains/parker-pragmatic/README.md +39 -0
- package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +583 -0
- package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +587 -0
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
- package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +82 -0
- package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
- package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
- package/embedded-knowledge/domains/quinn-tester/samples/isolation-testing-patterns.md +424 -0
- package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
- package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
- package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
- package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
- package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
- package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
- package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
- package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
- package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
- package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
- package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
- package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/testability-code-smells.md +256 -0
- package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +67 -0
- package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
- package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
- package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
- package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
- package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
- package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
- package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
- package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
- package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
- package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
- package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
- package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
- package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
- package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
- package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
- package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
- package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
- package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
- package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
- package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
- package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
- package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
- package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
- package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
- package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
- package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
- package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
- package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
- package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +146 -0
- package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
- package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
- package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
- package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
- package/embedded-knowledge/indexes/domain-catalog.json +106 -0
- package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
- package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
- package/embedded-knowledge/indexes/tags/access-control.json +1 -0
- package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
- package/embedded-knowledge/indexes/tags/actions.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced.json +1 -0
- package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
- package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
- package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
- package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
- package/embedded-knowledge/indexes/tags/analytics.json +1 -0
- package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
- package/embedded-knowledge/indexes/tags/api-design.json +1 -0
- package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
- package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
- package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
- package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
- package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
- package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
- package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/api.json +1 -0
- package/embedded-knowledge/indexes/tags/architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
- package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
- package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
- package/embedded-knowledge/indexes/tags/binding.json +1 -0
- package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/branching.json +1 -0
- package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
- package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
- package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
- package/embedded-knowledge/indexes/tags/business-process.json +1 -0
- package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
- package/embedded-knowledge/indexes/tags/caching.json +1 -0
- package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/case.json +1 -0
- package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
- package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
- package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
- package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
- package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
- package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
- package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/code-style.json +1 -0
- package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
- package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
- package/embedded-knowledge/indexes/tags/comments.json +1 -0
- package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
- package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional.json +1 -0
- package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
- package/embedded-knowledge/indexes/tags/consistency.json +1 -0
- package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
- package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
- package/embedded-knowledge/indexes/tags/correlation.json +1 -0
- package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/data-access.json +1 -0
- package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
- package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
- package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
- package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
- package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
- package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
- package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/database.json +1 -0
- package/embedded-knowledge/indexes/tags/debugging.json +1 -0
- package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
- package/embedded-knowledge/indexes/tags/declaration.json +1 -0
- package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
- package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
- package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
- package/embedded-knowledge/indexes/tags/deployment.json +1 -0
- package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
- package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
- package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
- package/embedded-knowledge/indexes/tags/documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
- package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
- package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
- package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
- package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
- package/embedded-knowledge/indexes/tags/error-text.json +1 -0
- package/embedded-knowledge/indexes/tags/etag.json +1 -0
- package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
- package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
- package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
- package/embedded-knowledge/indexes/tags/events.json +1 -0
- package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/extensions.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
- package/embedded-knowledge/indexes/tags/field-control.json +1 -0
- package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
- package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/field-state.json +1 -0
- package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
- package/embedded-knowledge/indexes/tags/fields.json +1 -0
- package/embedded-knowledge/indexes/tags/filtering.json +1 -0
- package/embedded-knowledge/indexes/tags/filters.json +1 -0
- package/embedded-knowledge/indexes/tags/formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/http-status.json +1 -0
- package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/implementation.json +1 -0
- package/embedded-knowledge/indexes/tags/indentation.json +1 -0
- package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
- package/embedded-knowledge/indexes/tags/indexing.json +1 -0
- package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
- package/embedded-knowledge/indexes/tags/integration.json +1 -0
- package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
- package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
- package/embedded-knowledge/indexes/tags/isolation.json +1 -0
- package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/keywords.json +1 -0
- package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
- package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
- package/embedded-knowledge/indexes/tags/localization.json +1 -0
- package/embedded-knowledge/indexes/tags/logging.json +1 -0
- package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
- package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/memory.json +1 -0
- package/embedded-knowledge/indexes/tags/message-design.json +1 -0
- package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
- package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
- package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
- package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
- package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
- package/embedded-knowledge/indexes/tags/naming.json +1 -0
- package/embedded-knowledge/indexes/tags/navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series.json +1 -0
- package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
- package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/odata.json +1 -0
- package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
- package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/operators.json +1 -0
- package/embedded-knowledge/indexes/tags/optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/order.json +1 -0
- package/embedded-knowledge/indexes/tags/organization.json +1 -0
- package/embedded-knowledge/indexes/tags/pages.json +1 -0
- package/embedded-knowledge/indexes/tags/parameters.json +1 -0
- package/embedded-knowledge/indexes/tags/patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/performance.json +1 -0
- package/embedded-knowledge/indexes/tags/placement.json +1 -0
- package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
- package/embedded-knowledge/indexes/tags/posting.json +1 -0
- package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
- package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
- package/embedded-knowledge/indexes/tags/privacy.json +1 -0
- package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
- package/embedded-knowledge/indexes/tags/production.json +1 -0
- package/embedded-knowledge/indexes/tags/productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
- package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
- package/embedded-knowledge/indexes/tags/ranges.json +1 -0
- package/embedded-knowledge/indexes/tags/readability.json +1 -0
- package/embedded-knowledge/indexes/tags/record-access.json +1 -0
- package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
- package/embedded-knowledge/indexes/tags/reference.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime.json +1 -0
- package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
- package/embedded-knowledge/indexes/tags/security.json +1 -0
- package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
- package/embedded-knowledge/indexes/tags/serialization.json +1 -0
- package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
- package/embedded-knowledge/indexes/tags/session.json +1 -0
- package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
- package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
- package/embedded-knowledge/indexes/tags/sift.json +1 -0
- package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
- package/embedded-knowledge/indexes/tags/spacing.json +1 -0
- package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
- package/embedded-knowledge/indexes/tags/standards.json +1 -0
- package/embedded-knowledge/indexes/tags/statements.json +1 -0
- package/embedded-knowledge/indexes/tags/streaming.json +1 -0
- package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
- package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/structure.json +1 -0
- package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
- package/embedded-knowledge/indexes/tags/switch.json +1 -0
- package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
- package/embedded-knowledge/indexes/tags/syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/systemid.json +1 -0
- package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
- package/embedded-knowledge/indexes/tags/table-events.json +1 -0
- package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
- package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
- package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
- package/embedded-knowledge/indexes/tags/template-method.json +1 -0
- package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
- package/embedded-knowledge/indexes/tags/testfield.json +1 -0
- package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
- package/embedded-knowledge/indexes/tags/triggers.json +1 -0
- package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
- package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
- package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
- package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/validation.json +1 -0
- package/embedded-knowledge/indexes/tags/variables.json +1 -0
- package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
- package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
- package/embedded-knowledge/indexes/tags/web-services.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
- package/embedded-knowledge/indexes/tags/workspace.json +1 -0
- package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
- package/embedded-knowledge/indexes/topic-relationships.json +128 -0
- package/embedded-knowledge/methodologies/index.json +81 -0
- package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
- package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
- package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
- package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
- package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
- package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
- package/embedded-knowledge/methodologies/phases/performance.md +211 -0
- package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
- package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
- package/embedded-knowledge/methodologies/phases/verification.md +146 -0
- package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
- package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
- package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +535 -0
- package/embedded-knowledge/specialists/alex-architect.md +305 -0
- package/embedded-knowledge/specialists/casey-copilot.md +314 -0
- package/embedded-knowledge/specialists/chris-config.md +226 -0
- package/embedded-knowledge/specialists/dean-debug.md +365 -0
- package/embedded-knowledge/specialists/eva-errors.md +291 -0
- package/embedded-knowledge/specialists/jordan-bridge.md +291 -0
- package/embedded-knowledge/specialists/logan-legacy.md +265 -0
- package/embedded-knowledge/specialists/maya-mentor.md +299 -0
- package/embedded-knowledge/specialists/morgan-market.md +281 -0
- package/embedded-knowledge/specialists/parker-pragmatic.md +564 -0
- package/embedded-knowledge/specialists/quinn-tester.md +323 -0
- package/embedded-knowledge/specialists/roger-reviewer.md +317 -0
- package/embedded-knowledge/specialists/sam-coder.md +342 -0
- package/embedded-knowledge/specialists/seth-security.md +290 -0
- package/embedded-knowledge/specialists/taylor-docs.md +312 -0
- package/embedded-knowledge/specialists/uma-ux.md +291 -0
- package/package.json +82 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# AL Comment Spacing Standards - Code Examples
|
|
2
|
+
|
|
3
|
+
## Good Examples
|
|
4
|
+
|
|
5
|
+
### Single-Line Comments with Proper Spacing
|
|
6
|
+
```al
|
|
7
|
+
procedure ProcessCustomerOrder(CustomerNo: Code[20])
|
|
8
|
+
var
|
|
9
|
+
Customer: Record Customer;
|
|
10
|
+
SalesHeader: Record "Sales Header";
|
|
11
|
+
begin
|
|
12
|
+
// Validate customer exists and is not blocked
|
|
13
|
+
if not Customer.Get(CustomerNo) then
|
|
14
|
+
Error('Customer %1 does not exist', CustomerNo);
|
|
15
|
+
|
|
16
|
+
// Check customer credit limit before processing
|
|
17
|
+
Customer.CalcFields("Balance (LCY)");
|
|
18
|
+
if Customer."Credit Limit (LCY)" < Customer."Balance (LCY)" then
|
|
19
|
+
Error('Customer %1 has exceeded credit limit', CustomerNo);
|
|
20
|
+
|
|
21
|
+
// Create new sales order
|
|
22
|
+
SalesHeader.Init();
|
|
23
|
+
SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
|
|
24
|
+
SalesHeader."Sell-to Customer No." := CustomerNo;
|
|
25
|
+
SalesHeader.Insert(true);
|
|
26
|
+
end;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Multi-Line Comments with Consistent Formatting
|
|
30
|
+
```al
|
|
31
|
+
codeunit 50100 "Order Processing"
|
|
32
|
+
{
|
|
33
|
+
/*
|
|
34
|
+
* ProcessBulkOrders procedure handles multiple order processing
|
|
35
|
+
* with validation and error handling for each order in the batch.
|
|
36
|
+
* Returns count of successfully processed orders.
|
|
37
|
+
*/
|
|
38
|
+
procedure ProcessBulkOrders(var OrderList: List of [Code[20]]): Integer
|
|
39
|
+
var
|
|
40
|
+
ProcessedCount: Integer;
|
|
41
|
+
OrderNo: Code[20];
|
|
42
|
+
begin
|
|
43
|
+
ProcessedCount := 0;
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Iterate through each order in the list
|
|
47
|
+
* and attempt to process with error recovery
|
|
48
|
+
*/
|
|
49
|
+
foreach OrderNo in OrderList do begin
|
|
50
|
+
if TryProcessSingleOrder(OrderNo) then
|
|
51
|
+
ProcessedCount += 1;
|
|
52
|
+
end;
|
|
53
|
+
|
|
54
|
+
exit(ProcessedCount);
|
|
55
|
+
end;
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Inline Comments with Proper Spacing
|
|
60
|
+
```al
|
|
61
|
+
procedure CalculateDiscount(Amount: Decimal; CustomerType: Option Regular,Premium,VIP): Decimal
|
|
62
|
+
var
|
|
63
|
+
DiscountPct: Decimal;
|
|
64
|
+
begin
|
|
65
|
+
case CustomerType of
|
|
66
|
+
CustomerType::Regular:
|
|
67
|
+
DiscountPct := 0.05; // 5% discount for regular customers
|
|
68
|
+
CustomerType::Premium:
|
|
69
|
+
DiscountPct := 0.10; // 10% discount for premium customers
|
|
70
|
+
CustomerType::VIP:
|
|
71
|
+
DiscountPct := 0.15; // 15% discount for VIP customers
|
|
72
|
+
end;
|
|
73
|
+
|
|
74
|
+
exit(Amount * DiscountPct); // Calculate final discount amount
|
|
75
|
+
end;
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Section Headers with Consistent Spacing
|
|
79
|
+
```al
|
|
80
|
+
codeunit 50101 "Customer Management"
|
|
81
|
+
{
|
|
82
|
+
// ============================================================================
|
|
83
|
+
// Validation Functions
|
|
84
|
+
// ============================================================================
|
|
85
|
+
|
|
86
|
+
procedure ValidateCustomerData(var Customer: Record Customer): Boolean
|
|
87
|
+
begin
|
|
88
|
+
// Implementation here
|
|
89
|
+
end;
|
|
90
|
+
|
|
91
|
+
procedure ValidateAddressInfo(var Customer: Record Customer): Boolean
|
|
92
|
+
begin
|
|
93
|
+
// Implementation here
|
|
94
|
+
end;
|
|
95
|
+
|
|
96
|
+
// ============================================================================
|
|
97
|
+
// Processing Functions
|
|
98
|
+
// ============================================================================
|
|
99
|
+
|
|
100
|
+
procedure CreateCustomer(Name: Text[100]): Code[20]
|
|
101
|
+
begin
|
|
102
|
+
// Implementation here
|
|
103
|
+
end;
|
|
104
|
+
|
|
105
|
+
procedure UpdateCustomer(var Customer: Record Customer)
|
|
106
|
+
begin
|
|
107
|
+
// Implementation here
|
|
108
|
+
end;
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Bad Examples
|
|
113
|
+
|
|
114
|
+
### Inconsistent Comment Spacing
|
|
115
|
+
```al
|
|
116
|
+
procedure BadSpacing(CustomerNo: Code[20])
|
|
117
|
+
var
|
|
118
|
+
Customer: Record Customer;
|
|
119
|
+
begin
|
|
120
|
+
//No space after comment marker
|
|
121
|
+
if not Customer.Get(CustomerNo) then
|
|
122
|
+
Error('Customer not found');
|
|
123
|
+
|
|
124
|
+
// Too many spaces after marker
|
|
125
|
+
Customer.CalcFields("Balance (LCY)");
|
|
126
|
+
|
|
127
|
+
// Good spacing
|
|
128
|
+
if Customer.Blocked then
|
|
129
|
+
Error('Customer is blocked');
|
|
130
|
+
|
|
131
|
+
//Another comment without space
|
|
132
|
+
Customer.Modify();
|
|
133
|
+
end;
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Poor Multi-Line Comment Formatting
|
|
137
|
+
```al
|
|
138
|
+
/*
|
|
139
|
+
Poorly formatted multi-line comment
|
|
140
|
+
without consistent indentation
|
|
141
|
+
or proper spacing
|
|
142
|
+
making it hard to read
|
|
143
|
+
*/
|
|
144
|
+
procedure PoorCommentFormatting()
|
|
145
|
+
begin
|
|
146
|
+
/*This comment is not properly
|
|
147
|
+
formatted and lacks
|
|
148
|
+
consistent spacing*/
|
|
149
|
+
Message('Hello');
|
|
150
|
+
end;
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Cramped Inline Comments
|
|
154
|
+
```al
|
|
155
|
+
procedure CrampedComments(Amount: Decimal): Decimal
|
|
156
|
+
var
|
|
157
|
+
Tax: Decimal;
|
|
158
|
+
begin
|
|
159
|
+
Tax := Amount * 0.08;//No space before comment
|
|
160
|
+
Amount := Amount + Tax;//Another cramped comment
|
|
161
|
+
exit(Amount);//Final cramped comment
|
|
162
|
+
end;
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Missing Comment Spacing in Complex Code
|
|
166
|
+
```al
|
|
167
|
+
procedure NoCommentSpacing()
|
|
168
|
+
var
|
|
169
|
+
i: Integer;
|
|
170
|
+
Total: Decimal;
|
|
171
|
+
begin
|
|
172
|
+
for i := 1 to 10 do begin//Loop comment crammed
|
|
173
|
+
if i mod 2 = 0 then//Even number check crammed
|
|
174
|
+
Total += i * 2;//Double even numbers crammed
|
|
175
|
+
end;//End loop comment crammed
|
|
176
|
+
end;
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Inconsistent Section Spacing
|
|
180
|
+
```al
|
|
181
|
+
codeunit 50102 "Poor Comment Organization"
|
|
182
|
+
{
|
|
183
|
+
//=== Validation Functions ===
|
|
184
|
+
procedure ValidateData(): Boolean
|
|
185
|
+
begin
|
|
186
|
+
// Implementation
|
|
187
|
+
end;
|
|
188
|
+
|
|
189
|
+
// Processing Functions (inconsistent header style)
|
|
190
|
+
procedure ProcessData()
|
|
191
|
+
begin
|
|
192
|
+
// Implementation
|
|
193
|
+
end;
|
|
194
|
+
|
|
195
|
+
//===Utility Functions===(no spaces around text)
|
|
196
|
+
procedure UtilityFunction()
|
|
197
|
+
begin
|
|
198
|
+
// Implementation
|
|
199
|
+
end;
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Best Practices
|
|
204
|
+
|
|
205
|
+
1. **Always use single space** after // for single-line comments
|
|
206
|
+
2. **Consistent indentation** for multi-line comments with /* */
|
|
207
|
+
3. **Appropriate spacing** before inline comments (at least 4 spaces)
|
|
208
|
+
4. **Uniform section headers** with consistent formatting style
|
|
209
|
+
5. **Group related comments** with consistent spacing patterns
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# AL Keyword Indentation Rules - Code Examples
|
|
2
|
+
|
|
3
|
+
## Good Examples
|
|
4
|
+
|
|
5
|
+
### Proper Trigger Indentation
|
|
6
|
+
```al
|
|
7
|
+
table 50100 "Customer Extension"
|
|
8
|
+
{
|
|
9
|
+
fields
|
|
10
|
+
{
|
|
11
|
+
field(1; "No."; Code[20])
|
|
12
|
+
{
|
|
13
|
+
Caption = 'No.';
|
|
14
|
+
}
|
|
15
|
+
field(2; Name; Text[100])
|
|
16
|
+
{
|
|
17
|
+
Caption = 'Name';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
trigger OnInsert()
|
|
22
|
+
begin
|
|
23
|
+
if "No." = '' then
|
|
24
|
+
"No." := NoSeriesMgt.GetNextNo(Setup."Customer Nos.", 0D, true);
|
|
25
|
+
end;
|
|
26
|
+
|
|
27
|
+
trigger OnModify()
|
|
28
|
+
begin
|
|
29
|
+
"Last Modified Date" := Today;
|
|
30
|
+
"Last Modified Time" := Time;
|
|
31
|
+
end;
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Procedure and Function Indentation
|
|
36
|
+
```al
|
|
37
|
+
codeunit 50100 "Customer Management"
|
|
38
|
+
{
|
|
39
|
+
procedure CreateCustomer(Name: Text[100]; Email: Text[80]): Code[20]
|
|
40
|
+
var
|
|
41
|
+
Customer: Record Customer;
|
|
42
|
+
CustomerNo: Code[20];
|
|
43
|
+
begin
|
|
44
|
+
// Validate input parameters
|
|
45
|
+
if Name = '' then
|
|
46
|
+
Error('Customer name cannot be empty');
|
|
47
|
+
|
|
48
|
+
// Create customer record
|
|
49
|
+
Customer.Init();
|
|
50
|
+
CustomerNo := NoSeriesMgt.GetNextNo(SalesSetup."Customer Nos.", 0D, true);
|
|
51
|
+
Customer."No." := CustomerNo;
|
|
52
|
+
Customer.Name := Name;
|
|
53
|
+
Customer."E-Mail" := Email;
|
|
54
|
+
Customer.Insert(true);
|
|
55
|
+
|
|
56
|
+
exit(CustomerNo);
|
|
57
|
+
end;
|
|
58
|
+
|
|
59
|
+
local procedure ValidateCustomerData(var Customer: Record Customer)
|
|
60
|
+
begin
|
|
61
|
+
if Customer.Name = '' then
|
|
62
|
+
Error('Customer name is required');
|
|
63
|
+
|
|
64
|
+
if Customer."E-Mail" = '' then
|
|
65
|
+
Error('Customer email is required');
|
|
66
|
+
end;
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Control Structure Indentation
|
|
71
|
+
```al
|
|
72
|
+
procedure ProcessOrderLines(OrderNo: Code[20])
|
|
73
|
+
var
|
|
74
|
+
SalesLine: Record "Sales Line";
|
|
75
|
+
Item: Record Item;
|
|
76
|
+
begin
|
|
77
|
+
SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
|
|
78
|
+
SalesLine.SetRange("Document No.", OrderNo);
|
|
79
|
+
|
|
80
|
+
if SalesLine.FindSet() then
|
|
81
|
+
repeat
|
|
82
|
+
if SalesLine.Type = SalesLine.Type::Item then begin
|
|
83
|
+
if Item.Get(SalesLine."No.") then begin
|
|
84
|
+
if Item.Inventory < SalesLine.Quantity then begin
|
|
85
|
+
Error('Insufficient inventory for item %1', SalesLine."No.");
|
|
86
|
+
end else begin
|
|
87
|
+
Item.Inventory -= SalesLine.Quantity;
|
|
88
|
+
Item.Modify();
|
|
89
|
+
end;
|
|
90
|
+
end;
|
|
91
|
+
end;
|
|
92
|
+
until SalesLine.Next() = 0;
|
|
93
|
+
end;
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Case Statement Indentation
|
|
97
|
+
```al
|
|
98
|
+
procedure HandleDocumentStatus(Status: Option Open,Released,Pending,Cancelled)
|
|
99
|
+
begin
|
|
100
|
+
case Status of
|
|
101
|
+
Status::Open:
|
|
102
|
+
begin
|
|
103
|
+
EnableEditingActions();
|
|
104
|
+
ShowStatusMessage('Document is open for editing');
|
|
105
|
+
end;
|
|
106
|
+
Status::Released:
|
|
107
|
+
begin
|
|
108
|
+
DisableEditingActions();
|
|
109
|
+
ShowStatusMessage('Document has been released');
|
|
110
|
+
end;
|
|
111
|
+
Status::Pending:
|
|
112
|
+
begin
|
|
113
|
+
DisableEditingActions();
|
|
114
|
+
ShowStatusMessage('Document is pending approval');
|
|
115
|
+
RequestApproval();
|
|
116
|
+
end;
|
|
117
|
+
Status::Cancelled:
|
|
118
|
+
begin
|
|
119
|
+
DisableAllActions();
|
|
120
|
+
ShowStatusMessage('Document has been cancelled');
|
|
121
|
+
end;
|
|
122
|
+
end;
|
|
123
|
+
end;
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Bad Examples
|
|
127
|
+
|
|
128
|
+
### Inconsistent Trigger Indentation
|
|
129
|
+
```al
|
|
130
|
+
table 50101 "Bad Indentation Table"
|
|
131
|
+
{
|
|
132
|
+
fields
|
|
133
|
+
{
|
|
134
|
+
field(1; "No."; Code[20]) { }
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
trigger OnInsert() // Wrong: should be indented
|
|
138
|
+
begin
|
|
139
|
+
if "No." = '' then // Wrong: should be indented further
|
|
140
|
+
"No." := NoSeriesMgt.GetNextNo(Setup."Customer Nos.", 0D, true); // Wrong: should be indented
|
|
141
|
+
end;
|
|
142
|
+
|
|
143
|
+
trigger OnModify() // Wrong: over-indented
|
|
144
|
+
begin // Wrong: over-indented
|
|
145
|
+
"Last Modified Date" := Today; // Inconsistent with other triggers
|
|
146
|
+
end;
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Poor Procedure Indentation
|
|
151
|
+
```al
|
|
152
|
+
codeunit 50101 "Bad Indentation Codeunit"
|
|
153
|
+
{
|
|
154
|
+
procedure CreateCustomer(Name: Text[100]): Code[20] // Wrong: not indented
|
|
155
|
+
var
|
|
156
|
+
Customer: Record Customer; // Wrong: not indented
|
|
157
|
+
begin
|
|
158
|
+
Customer.Init(); // Wrong: not indented
|
|
159
|
+
Customer.Name := Name; // Inconsistent indentation
|
|
160
|
+
Customer.Insert(true); // Wrong: over-indented
|
|
161
|
+
exit(Customer."No."); // Wrong: not indented
|
|
162
|
+
end;
|
|
163
|
+
|
|
164
|
+
local procedure ValidateData() // Wrong: over-indented
|
|
165
|
+
begin
|
|
166
|
+
// Implementation with poor indentation
|
|
167
|
+
end;
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Inconsistent Control Structure Indentation
|
|
172
|
+
```al
|
|
173
|
+
procedure BadControlStructures(OrderNo: Code[20])
|
|
174
|
+
var
|
|
175
|
+
SalesLine: Record "Sales Line";
|
|
176
|
+
begin
|
|
177
|
+
SalesLine.SetRange("Document No.", OrderNo); // Wrong: not indented
|
|
178
|
+
|
|
179
|
+
if SalesLine.FindSet() then // Wrong: not indented
|
|
180
|
+
repeat // Wrong: not indented
|
|
181
|
+
if SalesLine.Type = SalesLine.Type::Item then // Wrong: not indented
|
|
182
|
+
begin // Wrong: not indented
|
|
183
|
+
ProcessItem(SalesLine."No."); // Wrong: over-indented
|
|
184
|
+
end // Wrong: inconsistent with begin
|
|
185
|
+
else // Wrong: poor else positioning
|
|
186
|
+
begin // Wrong: inconsistent indentation
|
|
187
|
+
ProcessNonItem(SalesLine);
|
|
188
|
+
end;
|
|
189
|
+
until SalesLine.Next() = 0; // Wrong: inconsistent with repeat
|
|
190
|
+
end;
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Poor Case Statement Indentation
|
|
194
|
+
```al
|
|
195
|
+
procedure BadCaseIndentation(Status: Option Open,Released,Pending)
|
|
196
|
+
begin
|
|
197
|
+
case Status of // Wrong: not indented
|
|
198
|
+
Status::Open: // Wrong: not indented further
|
|
199
|
+
begin // Wrong: not indented to match case branch
|
|
200
|
+
Message('Open'); // Wrong: not indented properly in begin block
|
|
201
|
+
end;
|
|
202
|
+
Status::Released: // Wrong: inconsistent with other case labels
|
|
203
|
+
begin // Wrong: over-indented
|
|
204
|
+
Message('Released');
|
|
205
|
+
end;
|
|
206
|
+
Status::Pending: // Wrong: back to no indentation
|
|
207
|
+
Message('Pending'); // Wrong: single statement not aligned
|
|
208
|
+
end;
|
|
209
|
+
end;
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Best Practices
|
|
213
|
+
|
|
214
|
+
1. **Consistent base indentation** for all keywords within their scope
|
|
215
|
+
2. **Progressive indentation** for nested structures (4 spaces per level)
|
|
216
|
+
3. **Align related keywords** (begin/end, if/then/else, case/of/end)
|
|
217
|
+
4. **Maintain indentation hierarchy** throughout complex structures
|
|
218
|
+
5. **Use consistent spacing** for all control flow keywords
|
package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# AL Line Start Keyword Positioning - Code Examples
|
|
2
|
+
|
|
3
|
+
## Good Examples
|
|
4
|
+
|
|
5
|
+
### Proper Keyword Line Positioning
|
|
6
|
+
```al
|
|
7
|
+
procedure ProcessCustomerOrder(CustomerNo: Code[20])
|
|
8
|
+
var
|
|
9
|
+
Customer: Record Customer;
|
|
10
|
+
SalesHeader: Record "Sales Header";
|
|
11
|
+
OrderCreated: Boolean;
|
|
12
|
+
begin
|
|
13
|
+
// Each keyword starts at appropriate line position
|
|
14
|
+
if Customer.Get(CustomerNo) then
|
|
15
|
+
begin
|
|
16
|
+
if not Customer.Blocked then
|
|
17
|
+
begin
|
|
18
|
+
SalesHeader.Init();
|
|
19
|
+
SalesHeader."Sell-to Customer No." := CustomerNo;
|
|
20
|
+
|
|
21
|
+
if SalesHeader.Insert(true) then
|
|
22
|
+
begin
|
|
23
|
+
OrderCreated := true;
|
|
24
|
+
Message('Order created successfully');
|
|
25
|
+
end
|
|
26
|
+
else
|
|
27
|
+
begin
|
|
28
|
+
OrderCreated := false;
|
|
29
|
+
Error('Failed to create order');
|
|
30
|
+
end;
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
begin
|
|
34
|
+
Error('Customer %1 is blocked', CustomerNo);
|
|
35
|
+
end;
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
begin
|
|
39
|
+
Error('Customer %1 does not exist', CustomerNo);
|
|
40
|
+
end;
|
|
41
|
+
end;
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Control Flow Keyword Positioning
|
|
45
|
+
```al
|
|
46
|
+
procedure ValidateOrderData(var SalesHeader: Record "Sales Header"): Boolean
|
|
47
|
+
var
|
|
48
|
+
Customer: Record Customer;
|
|
49
|
+
ValidationPassed: Boolean;
|
|
50
|
+
begin
|
|
51
|
+
ValidationPassed := true;
|
|
52
|
+
|
|
53
|
+
// Proper if-then-else positioning
|
|
54
|
+
if SalesHeader."Sell-to Customer No." = '' then
|
|
55
|
+
begin
|
|
56
|
+
ValidationPassed := false;
|
|
57
|
+
Error('Customer number is required');
|
|
58
|
+
end;
|
|
59
|
+
|
|
60
|
+
// Proper case statement positioning
|
|
61
|
+
case SalesHeader."Document Type" of
|
|
62
|
+
SalesHeader."Document Type"::Quote:
|
|
63
|
+
begin
|
|
64
|
+
if SalesHeader."Quote Valid Until Date" = 0D then
|
|
65
|
+
begin
|
|
66
|
+
ValidationPassed := false;
|
|
67
|
+
Error('Quote validity date is required');
|
|
68
|
+
end;
|
|
69
|
+
end;
|
|
70
|
+
SalesHeader."Document Type"::Order:
|
|
71
|
+
begin
|
|
72
|
+
if SalesHeader."Requested Delivery Date" = 0D then
|
|
73
|
+
begin
|
|
74
|
+
ValidationPassed := false;
|
|
75
|
+
Error('Delivery date is required');
|
|
76
|
+
end;
|
|
77
|
+
end;
|
|
78
|
+
end;
|
|
79
|
+
|
|
80
|
+
// Proper while loop positioning
|
|
81
|
+
while Customer.Next() <> 0 do
|
|
82
|
+
begin
|
|
83
|
+
if Customer.Blocked then
|
|
84
|
+
begin
|
|
85
|
+
Customer.Blocked := false;
|
|
86
|
+
Customer.Modify();
|
|
87
|
+
end;
|
|
88
|
+
end;
|
|
89
|
+
|
|
90
|
+
exit(ValidationPassed);
|
|
91
|
+
end;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Function Declaration Positioning
|
|
95
|
+
```al
|
|
96
|
+
codeunit 50100 "Order Management"
|
|
97
|
+
{
|
|
98
|
+
procedure CreateOrder(CustomerNo: Code[20]): Code[20]
|
|
99
|
+
var
|
|
100
|
+
SalesHeader: Record "Sales Header";
|
|
101
|
+
begin
|
|
102
|
+
// Implementation
|
|
103
|
+
exit(SalesHeader."No.");
|
|
104
|
+
end;
|
|
105
|
+
|
|
106
|
+
procedure UpdateOrder(OrderNo: Code[20]; NewDate: Date)
|
|
107
|
+
var
|
|
108
|
+
SalesHeader: Record "Sales Header";
|
|
109
|
+
begin
|
|
110
|
+
// Implementation
|
|
111
|
+
end;
|
|
112
|
+
|
|
113
|
+
local procedure ValidateOrder(var SalesHeader: Record "Sales Header"): Boolean
|
|
114
|
+
var
|
|
115
|
+
ValidationResult: Boolean;
|
|
116
|
+
begin
|
|
117
|
+
// Implementation
|
|
118
|
+
exit(ValidationResult);
|
|
119
|
+
end;
|
|
120
|
+
|
|
121
|
+
trigger OnRun()
|
|
122
|
+
begin
|
|
123
|
+
// Implementation
|
|
124
|
+
end;
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Bad Examples
|
|
129
|
+
|
|
130
|
+
### Poor Keyword Line Positioning
|
|
131
|
+
```al
|
|
132
|
+
procedure BadKeywordPositioning(CustomerNo: Code[20])
|
|
133
|
+
var Customer: Record Customer; SalesHeader: Record "Sales Header"; // Wrong: multiple declarations on one line
|
|
134
|
+
begin if Customer.Get(CustomerNo) then begin // Wrong: multiple keywords on one line
|
|
135
|
+
if not Customer.Blocked then begin SalesHeader.Init(); SalesHeader."Sell-to Customer No." := CustomerNo; // Wrong: cramped formatting
|
|
136
|
+
if SalesHeader.Insert(true) then begin Message('Success'); end else begin Error('Failed'); end; // Wrong: entire conditional on one line
|
|
137
|
+
end else begin Error('Customer blocked'); end; // Wrong: else statement positioning
|
|
138
|
+
end else begin Error('Customer not found'); end; // Wrong: else statement positioning
|
|
139
|
+
end;
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Inconsistent Indentation and Positioning
|
|
143
|
+
```al
|
|
144
|
+
procedure InconsistentPositioning(OrderNo: Code[20])
|
|
145
|
+
var
|
|
146
|
+
SalesLine: Record "Sales Line";
|
|
147
|
+
Item: Record Item;
|
|
148
|
+
begin
|
|
149
|
+
SalesLine.SetRange("Document No.", OrderNo); // Wrong: not indented
|
|
150
|
+
|
|
151
|
+
if SalesLine.FindSet() then // Wrong: over-indented
|
|
152
|
+
repeat // Wrong: should be on new line with proper indentation
|
|
153
|
+
if SalesLine.Type = SalesLine.Type::Item then // Wrong: inconsistent indentation
|
|
154
|
+
begin // Wrong: should align with if
|
|
155
|
+
Item.Get(SalesLine."No."); // Wrong: poor indentation
|
|
156
|
+
Item.Inventory -= SalesLine.Quantity; // Wrong: inconsistent with previous line
|
|
157
|
+
end // Wrong: missing semicolon and poor positioning
|
|
158
|
+
else begin // Wrong: else positioning and indentation
|
|
159
|
+
SalesLine."Unit Price" := 0; // Wrong: inconsistent indentation
|
|
160
|
+
end; // Wrong: inconsistent with begin
|
|
161
|
+
until SalesLine.Next() = 0; // Wrong: poor positioning
|
|
162
|
+
end;
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Cramped Control Structures
|
|
166
|
+
```al
|
|
167
|
+
procedure CrampedStructures(Status: Option Open,Released,Pending)
|
|
168
|
+
begin
|
|
169
|
+
case Status of Status::Open: begin Message('Open'); EnableEditing(); end; Status::Released: begin Message('Released'); DisableEditing(); end; Status::Pending: begin Message('Pending'); RequestApproval(); end; end; // Wrong: entire case statement on one line
|
|
170
|
+
|
|
171
|
+
if Status = Status::Open then begin EnableEditing(); SetStatusColor('Green'); end else if Status = Status::Released then begin DisableEditing(); SetStatusColor('Blue'); end else begin DisableEditing(); SetStatusColor('Red'); end; // Wrong: complex conditional on one line
|
|
172
|
+
end;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Poor Function Declaration Formatting
|
|
176
|
+
```al
|
|
177
|
+
codeunit 50101 "Bad Formatting"
|
|
178
|
+
{
|
|
179
|
+
procedure CreateCustomer(Name: Text[100]; Email: Text[80]; Phone: Text[30]): Code[20] var Customer: Record Customer; CustomerNo: Code[20]; begin Customer.Init(); CustomerNo := NoSeriesMgt.GetNextNo(Setup."Customer Nos.", 0D, true); Customer."No." := CustomerNo; Customer.Name := Name; exit(CustomerNo); end; // Wrong: entire procedure on few lines
|
|
180
|
+
|
|
181
|
+
local procedure ValidateData(Name: Text[100]): Boolean begin if Name = '' then exit(false); exit(true); end; // Wrong: procedure body on declaration line
|
|
182
|
+
|
|
183
|
+
trigger OnRun() begin Message('Running'); end; // Wrong: trigger not properly positioned
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Mixed Line Positioning Styles
|
|
188
|
+
```al
|
|
189
|
+
procedure MixedStyles(OrderNo: Code[20])
|
|
190
|
+
var
|
|
191
|
+
SalesHeader: Record "Sales Header";
|
|
192
|
+
ProcessingResult: Boolean;
|
|
193
|
+
begin
|
|
194
|
+
if SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo) then begin // Style 1: keywords on same line
|
|
195
|
+
ProcessingResult := true;
|
|
196
|
+
Message('Order found');
|
|
197
|
+
end
|
|
198
|
+
else // Style 2: else on separate line
|
|
199
|
+
begin
|
|
200
|
+
ProcessingResult := false;
|
|
201
|
+
Error('Order not found');
|
|
202
|
+
end;
|
|
203
|
+
|
|
204
|
+
case SalesHeader.Status of // Style 3: case body on same line
|
|
205
|
+
SalesHeader.Status::Open: ProcessingResult := true;
|
|
206
|
+
SalesHeader.Status::Released: // Style 4: case action on new line
|
|
207
|
+
ProcessingResult := false;
|
|
208
|
+
end;
|
|
209
|
+
end;
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Best Practices
|
|
213
|
+
|
|
214
|
+
1. **Start each major keyword** (if, case, while, for) on its own line
|
|
215
|
+
2. **Consistent indentation** for all keywords at the same logical level
|
|
216
|
+
3. **Align related keywords** (begin/end pairs, if/then/else structures)
|
|
217
|
+
4. **Separate complex logic** across multiple lines for readability
|
|
218
|
+
5. **Maintain consistent style** throughout the entire codeunit
|