bc-code-intelligence-mcp 1.1.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 +107 -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 +441 -0
- package/dist/cli/bc-code-intel-cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +21 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +402 -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 +604 -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 +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +673 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/base-layer.d.ts +83 -0
- package/dist/layers/base-layer.d.ts.map +1 -0
- package/dist/layers/base-layer.js +166 -0
- package/dist/layers/base-layer.js.map +1 -0
- package/dist/layers/embedded-layer.d.ts +53 -0
- package/dist/layers/embedded-layer.d.ts.map +1 -0
- package/dist/layers/embedded-layer.js +238 -0
- package/dist/layers/embedded-layer.js.map +1 -0
- package/dist/layers/git-layer.d.ts +54 -0
- package/dist/layers/git-layer.d.ts.map +1 -0
- package/dist/layers/git-layer.js +369 -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 +129 -0
- package/dist/layers/layer-service.d.ts.map +1 -0
- package/dist/layers/layer-service.js +570 -0
- package/dist/layers/layer-service.js.map +1 -0
- package/dist/layers/project-layer.d.ts +50 -0
- package/dist/layers/project-layer.d.ts.map +1 -0
- package/dist/layers/project-layer.js +256 -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 +355 -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 +811 -0
- package/dist/services/code-analysis-service.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +91 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +370 -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 +408 -0
- package/dist/services/methodology-service.js.map +1 -0
- package/dist/services/workflow-service.d.ts +132 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +277 -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 +51 -0
- package/dist/streamlined-handlers.d.ts.map +1 -0
- package/dist/streamlined-handlers.js +287 -0
- package/dist/streamlined-handlers.js.map +1 -0
- package/dist/streamlined-tools.d.ts +316 -0
- package/dist/streamlined-tools.d.ts.map +1 -0
- package/dist/streamlined-tools.js +189 -0
- package/dist/streamlined-tools.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/types/bc-knowledge.d.ts +294 -0
- package/dist/types/bc-knowledge.d.ts.map +1 -0
- package/dist/types/bc-knowledge.js +44 -0
- package/dist/types/bc-knowledge.js.map +1 -0
- package/dist/types/config-types.d.ts +180 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +104 -0
- package/dist/types/config-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 +171 -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/persona-types.d.ts +77 -0
- package/dist/types/persona-types.d.ts.map +1 -0
- package/dist/types/persona-types.js +341 -0
- package/dist/types/persona-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 +69 -0
- package/embedded-knowledge/CONTRIBUTING.md +58 -0
- package/embedded-knowledge/LICENSE +21 -0
- package/embedded-knowledge/README.md +15 -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/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/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/subscriber-codeunit-size-optimization.md +66 -0
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +295 -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/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/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/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/testfield-error-handling.md +80 -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/quinn-tester/fielderror-validation-patterns.md +119 -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/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/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/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/package.json +74 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Lonely Repeat Statement Pattern - AL Code Examples
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
The "Lonely Repeat Statement Pattern" refers to repeat-until loops that are difficult to read due to poor formatting, unclear conditions, or lack of proper structure. This sample demonstrates how to identify and fix these patterns in AL code.
|
|
5
|
+
|
|
6
|
+
## Problem Pattern: Lonely and Hard-to-Read Repeat Statements
|
|
7
|
+
|
|
8
|
+
### Example 1: Basic Formatting Issues
|
|
9
|
+
|
|
10
|
+
**Problematic Code:**
|
|
11
|
+
```al
|
|
12
|
+
procedure ProcessCustomerRecords()
|
|
13
|
+
var
|
|
14
|
+
Customer: Record Customer;
|
|
15
|
+
Counter: Integer;
|
|
16
|
+
begin
|
|
17
|
+
Customer.FindFirst();
|
|
18
|
+
repeat Customer.CalcFields("Sales (LCY)"); if Customer."Sales (LCY)" > 10000 then begin Counter += 1; Message('High value customer: %1', Customer.Name); end; until Customer.Next() = 0;
|
|
19
|
+
end;
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Improved Code:**
|
|
23
|
+
```al
|
|
24
|
+
procedure ProcessCustomerRecords()
|
|
25
|
+
var
|
|
26
|
+
Customer: Record Customer;
|
|
27
|
+
Counter: Integer;
|
|
28
|
+
begin
|
|
29
|
+
if Customer.FindFirst() then
|
|
30
|
+
repeat
|
|
31
|
+
Customer.CalcFields("Sales (LCY)");
|
|
32
|
+
if Customer."Sales (LCY)" > 10000 then begin
|
|
33
|
+
Counter += 1;
|
|
34
|
+
Message('High value customer: %1', Customer.Name);
|
|
35
|
+
end;
|
|
36
|
+
until Customer.Next() = 0;
|
|
37
|
+
end;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Example 2: Complex Condition Handling
|
|
41
|
+
|
|
42
|
+
**Problematic Code:**
|
|
43
|
+
```al
|
|
44
|
+
procedure ValidateItemInventory()
|
|
45
|
+
var
|
|
46
|
+
Item: Record Item;
|
|
47
|
+
InventorySetup: Record "Inventory Setup";
|
|
48
|
+
IsValid: Boolean;
|
|
49
|
+
begin
|
|
50
|
+
Item.SetRange(Blocked, false);
|
|
51
|
+
Item.FindFirst();
|
|
52
|
+
repeat IsValid := true; Item.CalcFields(Inventory); if (Item.Inventory < Item."Reorder Point") and (Item."Reorder Point" > 0) and (Item."Replenishment System" = Item."Replenishment System"::Purchase) then IsValid := false; if not IsValid then Error('Item %1 needs reordering', Item."No."); until Item.Next() = 0;
|
|
53
|
+
end;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Improved Code:**
|
|
57
|
+
```al
|
|
58
|
+
procedure ValidateItemInventory()
|
|
59
|
+
var
|
|
60
|
+
Item: Record Item;
|
|
61
|
+
NeedsReordering: Boolean;
|
|
62
|
+
begin
|
|
63
|
+
Item.SetRange(Blocked, false);
|
|
64
|
+
if Item.FindFirst() then
|
|
65
|
+
repeat
|
|
66
|
+
Item.CalcFields(Inventory);
|
|
67
|
+
|
|
68
|
+
NeedsReordering := (Item.Inventory < Item."Reorder Point") and
|
|
69
|
+
(Item."Reorder Point" > 0) and
|
|
70
|
+
(Item."Replenishment System" = Item."Replenishment System"::Purchase);
|
|
71
|
+
|
|
72
|
+
if NeedsReordering then
|
|
73
|
+
Error('Item %1 needs reordering', Item."No.");
|
|
74
|
+
until Item.Next() = 0;
|
|
75
|
+
end;
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Advanced Pattern Improvements
|
|
79
|
+
|
|
80
|
+
### Example 3: Nested Loop Clarity
|
|
81
|
+
|
|
82
|
+
**Problematic Code:**
|
|
83
|
+
```al
|
|
84
|
+
procedure RecalculateCustomerStatistics()
|
|
85
|
+
var
|
|
86
|
+
Customer: Record Customer;
|
|
87
|
+
SalesLine: Record "Sales Line";
|
|
88
|
+
TotalAmount: Decimal;
|
|
89
|
+
begin
|
|
90
|
+
Customer.FindFirst();
|
|
91
|
+
repeat TotalAmount := 0; SalesLine.SetRange("Sell-to Customer No.", Customer."No."); if SalesLine.FindFirst() then repeat TotalAmount += SalesLine."Line Amount"; until SalesLine.Next() = 0; Customer."Sales (LCY)" := TotalAmount; Customer.Modify(); until Customer.Next() = 0;
|
|
92
|
+
end;
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Improved Code:**
|
|
96
|
+
```al
|
|
97
|
+
procedure RecalculateCustomerStatistics()
|
|
98
|
+
var
|
|
99
|
+
Customer: Record Customer;
|
|
100
|
+
SalesLine: Record "Sales Line";
|
|
101
|
+
TotalAmount: Decimal;
|
|
102
|
+
begin
|
|
103
|
+
if Customer.FindFirst() then
|
|
104
|
+
repeat
|
|
105
|
+
TotalAmount := 0;
|
|
106
|
+
SalesLine.SetRange("Sell-to Customer No.", Customer."No.");
|
|
107
|
+
|
|
108
|
+
if SalesLine.FindFirst() then
|
|
109
|
+
repeat
|
|
110
|
+
TotalAmount += SalesLine."Line Amount";
|
|
111
|
+
until SalesLine.Next() = 0;
|
|
112
|
+
|
|
113
|
+
Customer."Sales (LCY)" := TotalAmount;
|
|
114
|
+
Customer.Modify();
|
|
115
|
+
until Customer.Next() = 0;
|
|
116
|
+
end;
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Example 4: Error Handling in Repeat Loops
|
|
120
|
+
|
|
121
|
+
**Problematic Code:**
|
|
122
|
+
```al
|
|
123
|
+
procedure PostSalesDocuments()
|
|
124
|
+
var
|
|
125
|
+
SalesHeader: Record "Sales Header";
|
|
126
|
+
SalesPost: Codeunit "Sales-Post";
|
|
127
|
+
begin
|
|
128
|
+
SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
|
|
129
|
+
SalesHeader.SetRange(Status, SalesHeader.Status::Released);
|
|
130
|
+
SalesHeader.FindFirst();
|
|
131
|
+
repeat if not SalesPost.Run(SalesHeader) then Message('Error posting document %1', SalesHeader."No."); until SalesHeader.Next() = 0;
|
|
132
|
+
end;
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Improved Code:**
|
|
136
|
+
```al
|
|
137
|
+
procedure PostSalesDocuments()
|
|
138
|
+
var
|
|
139
|
+
SalesHeader: Record "Sales Header";
|
|
140
|
+
SalesPost: Codeunit "Sales-Post";
|
|
141
|
+
DocumentsProcessed: Integer;
|
|
142
|
+
DocumentsFailed: Integer;
|
|
143
|
+
begin
|
|
144
|
+
SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
|
|
145
|
+
SalesHeader.SetRange(Status, SalesHeader.Status::Released);
|
|
146
|
+
|
|
147
|
+
if SalesHeader.FindFirst() then
|
|
148
|
+
repeat
|
|
149
|
+
Clear(SalesPost);
|
|
150
|
+
if SalesPost.Run(SalesHeader) then
|
|
151
|
+
DocumentsProcessed += 1
|
|
152
|
+
else begin
|
|
153
|
+
DocumentsFailed += 1;
|
|
154
|
+
Message('Error posting document %1: %2', SalesHeader."No.", GetLastErrorText());
|
|
155
|
+
end;
|
|
156
|
+
until SalesHeader.Next() = 0;
|
|
157
|
+
|
|
158
|
+
Message('Processing complete. Posted: %1, Failed: %2', DocumentsProcessed, DocumentsFailed);
|
|
159
|
+
end;
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Performance and Safety Patterns
|
|
163
|
+
|
|
164
|
+
### Example 5: Large Dataset Processing
|
|
165
|
+
|
|
166
|
+
**Problematic Code:**
|
|
167
|
+
```al
|
|
168
|
+
procedure ArchiveOldEntries()
|
|
169
|
+
var
|
|
170
|
+
GLEntry: Record "G/L Entry";
|
|
171
|
+
ArchiveEntry: Record "G/L Entry Archive";
|
|
172
|
+
begin
|
|
173
|
+
GLEntry.SetFilter("Posting Date", '<%1', CalcDate('-2Y', Today()));
|
|
174
|
+
GLEntry.FindFirst();
|
|
175
|
+
repeat ArchiveEntry.TransferFields(GLEntry); ArchiveEntry.Insert(); GLEntry.Delete(); until GLEntry.Next() = 0;
|
|
176
|
+
end;
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Improved Code:**
|
|
180
|
+
```al
|
|
181
|
+
procedure ArchiveOldEntries()
|
|
182
|
+
var
|
|
183
|
+
GLEntry: Record "G/L Entry";
|
|
184
|
+
ArchiveEntry: Record "G/L Entry Archive";
|
|
185
|
+
ProcessedCount: Integer;
|
|
186
|
+
BatchSize: Integer;
|
|
187
|
+
begin
|
|
188
|
+
BatchSize := 1000; // Process in batches for better performance
|
|
189
|
+
ProcessedCount := 0;
|
|
190
|
+
|
|
191
|
+
GLEntry.SetFilter("Posting Date", '<%1', CalcDate('-2Y', Today()));
|
|
192
|
+
|
|
193
|
+
if GLEntry.FindFirst() then
|
|
194
|
+
repeat
|
|
195
|
+
ArchiveEntry.TransferFields(GLEntry);
|
|
196
|
+
ArchiveEntry.Insert();
|
|
197
|
+
GLEntry.Delete();
|
|
198
|
+
|
|
199
|
+
ProcessedCount += 1;
|
|
200
|
+
|
|
201
|
+
// Commit periodically to avoid long transactions
|
|
202
|
+
if ProcessedCount mod BatchSize = 0 then begin
|
|
203
|
+
Commit();
|
|
204
|
+
Message('Processed %1 entries...', ProcessedCount);
|
|
205
|
+
end;
|
|
206
|
+
until GLEntry.Next() = 0;
|
|
207
|
+
|
|
208
|
+
Message('Archive complete. Total entries processed: %1', ProcessedCount);
|
|
209
|
+
end;
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Example 6: Conditional Processing with Early Exit
|
|
213
|
+
|
|
214
|
+
**Problematic Code:**
|
|
215
|
+
```al
|
|
216
|
+
procedure FindFirstAvailableItem(LocationCode: Code[10]): Code[20]
|
|
217
|
+
var
|
|
218
|
+
Item: Record Item;
|
|
219
|
+
ItemLedgerEntry: Record "Item Ledger Entry";
|
|
220
|
+
AvailableQty: Decimal;
|
|
221
|
+
begin
|
|
222
|
+
Item.FindFirst();
|
|
223
|
+
repeat Item.SetRange("Location Filter", LocationCode); Item.CalcFields(Inventory); if Item.Inventory > 0 then exit(Item."No."); until Item.Next() = 0;
|
|
224
|
+
end;
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Improved Code:**
|
|
228
|
+
```al
|
|
229
|
+
procedure FindFirstAvailableItem(LocationCode: Code[10]): Code[20]
|
|
230
|
+
var
|
|
231
|
+
Item: Record Item;
|
|
232
|
+
begin
|
|
233
|
+
Item.SetRange(Blocked, false);
|
|
234
|
+
Item.SetRange(Type, Item.Type::Inventory);
|
|
235
|
+
|
|
236
|
+
if Item.FindFirst() then
|
|
237
|
+
repeat
|
|
238
|
+
Item.SetRange("Location Filter", LocationCode);
|
|
239
|
+
Item.CalcFields(Inventory);
|
|
240
|
+
|
|
241
|
+
if Item.Inventory > 0 then
|
|
242
|
+
exit(Item."No.");
|
|
243
|
+
until Item.Next() = 0;
|
|
244
|
+
|
|
245
|
+
// Return empty if no available item found
|
|
246
|
+
exit('');
|
|
247
|
+
end;
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Best Practices Summary
|
|
251
|
+
|
|
252
|
+
### Formatting Guidelines
|
|
253
|
+
1. **Always use proper indentation** for repeat-until blocks
|
|
254
|
+
2. **Place conditions on separate lines** for complex boolean expressions
|
|
255
|
+
3. **Use meaningful variable names** instead of inline calculations
|
|
256
|
+
4. **Add blank lines** to separate logical sections within loops
|
|
257
|
+
|
|
258
|
+
### Performance Considerations
|
|
259
|
+
1. **Process in batches** for large datasets to avoid transaction timeouts
|
|
260
|
+
2. **Use proper filters** before starting repeat loops to minimize iterations
|
|
261
|
+
3. **Calculate fields only when necessary** within the loop
|
|
262
|
+
4. **Consider using FindSet()** with ReadOnly parameter for read-only operations
|
|
263
|
+
|
|
264
|
+
### Error Handling
|
|
265
|
+
1. **Always check FindFirst() result** before starting repeat loop
|
|
266
|
+
2. **Handle errors gracefully** with appropriate user feedback
|
|
267
|
+
3. **Use Clear()** on codeunit variables before calling Run()
|
|
268
|
+
4. **Implement progress indicators** for long-running operations
|
|
269
|
+
|
|
270
|
+
### Code Readability
|
|
271
|
+
1. **Extract complex conditions** into well-named boolean variables
|
|
272
|
+
2. **Use early exit patterns** when searching for specific records
|
|
273
|
+
3. **Add comments** to explain business logic within loops
|
|
274
|
+
4. **Avoid deeply nested structures** by using helper procedures
|
|
275
|
+
|
|
276
|
+
## Related Patterns
|
|
277
|
+
- **FindSet Pattern**: Use `FindSet()` with `ReadOnly` parameter for better performance when only reading data
|
|
278
|
+
- **Batch Processing Pattern**: Process records in controlled batches with periodic commits
|
|
279
|
+
- **Error Accumulation Pattern**: Collect errors during processing and report them together
|
|
280
|
+
- **Progress Indication Pattern**: Provide user feedback during long-running repeat operations
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Formatting Consistency Patterns"
|
|
3
|
+
domain: "sam-coder"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["formatting", "consistency", "code-standards"]
|
|
7
|
+
type: "improvement-pattern"
|
|
8
|
+
category: "code-quality"
|
|
9
|
+
pattern_type: "good"
|
|
10
|
+
severity: "medium"
|
|
11
|
+
impact_level: "medium"
|
|
12
|
+
improvement_suggestion: "Apply consistent formatting patterns across all AL code to improve maintainability"
|
|
13
|
+
implementation_steps: ["establish-formatting-standards", "apply-consistent-patterns", "validate-uniformity"]
|
|
14
|
+
validation_criteria: ["consistent-formatting-application", "improved-code-uniformity"]
|
|
15
|
+
technical_areas: ["al-code"]
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# AL Formatting Consistency Patterns
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
Consistent formatting patterns across AL code improve maintainability, reduce cognitive load, and enhance team collaboration. Establishing and applying uniform formatting standards creates professional, readable code that supports effective development workflows.
|
|
23
|
+
|
|
24
|
+
**Key Principle**: Apply consistent formatting patterns uniformly across all AL objects to create predictable, maintainable code structure.
|
|
25
|
+
|
|
26
|
+
## Strategic Framework
|
|
27
|
+
|
|
28
|
+
### Consistency Benefits
|
|
29
|
+
- **Reduced Cognitive Load**: Predictable formatting reduces mental effort
|
|
30
|
+
- **Improved Collaboration**: Team members can focus on logic rather than style
|
|
31
|
+
- **Enhanced Maintainability**: Consistent patterns support easier code updates
|
|
32
|
+
- **Professional Quality**: Uniform appearance reflects development maturity
|
|
33
|
+
|
|
34
|
+
### Code Quality Impact
|
|
35
|
+
Consistent formatting directly impacts code quality by making code easier to read, review, and maintain. It supports effective development practices and reduces errors.
|
|
36
|
+
|
|
37
|
+
## Architecture Focus
|
|
38
|
+
|
|
39
|
+
### Formatting Domains
|
|
40
|
+
- **Indentation Standards**: Consistent spacing and alignment patterns
|
|
41
|
+
- **Keyword Formatting**: Uniform keyword placement and casing
|
|
42
|
+
- **Comment Styles**: Standardized documentation formatting
|
|
43
|
+
- **Expression Layout**: Consistent operator and expression formatting
|
|
44
|
+
|
|
45
|
+
### Pattern Application
|
|
46
|
+
Establish comprehensive formatting standards that cover all aspects of AL code appearance and apply them consistently across entire codebase.
|
|
47
|
+
|
|
48
|
+
## Best Practices
|
|
49
|
+
|
|
50
|
+
### Standards Development
|
|
51
|
+
- **Comprehensive guidelines** covering all AL language elements
|
|
52
|
+
- **Team agreement** on formatting preferences and standards
|
|
53
|
+
- **Tool integration** for automated formatting enforcement
|
|
54
|
+
- **Regular validation** of consistency across codebase
|
|
55
|
+
- **Documentation** of formatting decisions and rationale
|
|
56
|
+
|
|
57
|
+
### Implementation Strategy
|
|
58
|
+
Use automated formatting tools where possible, establish clear team guidelines for manual formatting decisions, and regularly review code for consistency compliance.
|
|
59
|
+
|
|
60
|
+
### Maintenance Approach
|
|
61
|
+
Integrate formatting standards into development workflow through code review processes, automated validation, and team training on consistency importance.
|
|
62
|
+
|
|
63
|
+
## Anti-Patterns
|
|
64
|
+
|
|
65
|
+
### Avoid These Approaches
|
|
66
|
+
- **Mixed formatting styles** within single project
|
|
67
|
+
- **Inconsistent indentation** across AL objects
|
|
68
|
+
- **Random keyword casing** without standards
|
|
69
|
+
- **Varied comment formatting** creating visual inconsistency
|
|
70
|
+
- **No formatting guidelines** leading to style conflicts
|
|
71
|
+
|
|
72
|
+
Inconsistent formatting creates unnecessary cognitive overhead and makes code harder to maintain and review effectively.
|
|
73
|
+
|
|
74
|
+
*Related patterns: al-readability-optimization.md, al-blank-line-organization.md*
|
|
75
|
+
*Cross-references: See samples in other formatting topics for consistency examples*
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Line Comment Formatting and Placement Patterns"
|
|
3
|
+
domain: "sam-coder"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["comments", "code-quality", "readability", "maintainability"]
|
|
7
|
+
prerequisites: ["al-basics"]
|
|
8
|
+
---
|
|
9
|
+
# AL Line Comment Formatting and Placement Patterns
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
Line comments in AL code provide contextual explanation and improve code readability when properly formatted and strategically placed. Effective commenting enhances maintainability without cluttering the codebase.
|
|
14
|
+
|
|
15
|
+
**Key Principle**: Comments should explain *why* code exists, not *what* it does. Focus on business logic, complex calculations, and non-obvious implementation decisions.
|
|
16
|
+
|
|
17
|
+
## Strategic Framework
|
|
18
|
+
|
|
19
|
+
### Comment Placement Strategy
|
|
20
|
+
- **Above code blocks**: Explain purpose before implementation
|
|
21
|
+
- **Inline with complex logic**: Clarify non-obvious calculations or conditions
|
|
22
|
+
- **End-of-line for variables**: Document units, ranges, or special meanings
|
|
23
|
+
- **Section headers**: Group related functionality within procedures
|
|
24
|
+
|
|
25
|
+
### Content Guidelines
|
|
26
|
+
- **Business context**: Explain why specific logic is needed
|
|
27
|
+
- **Edge cases**: Document special conditions or exceptions
|
|
28
|
+
- **Performance notes**: Explain optimization decisions
|
|
29
|
+
- **Integration points**: Clarify external system interactions
|
|
30
|
+
|
|
31
|
+
## Architecture Patterns
|
|
32
|
+
|
|
33
|
+
### Procedure-Level Comments
|
|
34
|
+
Place explanatory comments immediately above procedure declarations to describe purpose, key parameters, and expected outcomes. Use consistent formatting with proper spacing.
|
|
35
|
+
|
|
36
|
+
### Variable Documentation
|
|
37
|
+
Document complex variables with end-of-line comments explaining units, valid ranges, or business significance. This is especially important for calculated fields and configuration values.
|
|
38
|
+
|
|
39
|
+
### Logic Block Comments
|
|
40
|
+
Group related logic with section comments that explain the overall approach. This helps readers understand the flow without parsing individual statements.
|
|
41
|
+
|
|
42
|
+
## Best Practices
|
|
43
|
+
|
|
44
|
+
### Formatting Standards
|
|
45
|
+
- **Consistent spacing**: Single space after // marker
|
|
46
|
+
- **Proper alignment**: Align related inline comments vertically
|
|
47
|
+
- **Clear language**: Use complete sentences for complex explanations
|
|
48
|
+
- **Standard terminology**: Use consistent BC terminology throughout
|
|
49
|
+
|
|
50
|
+
### Strategic Commenting
|
|
51
|
+
- **Focus on complexity**: Comment complex business rules and calculations
|
|
52
|
+
- **Avoid obvious statements**: Don't comment self-evident code
|
|
53
|
+
- **Update with changes**: Maintain comment accuracy during code updates
|
|
54
|
+
- **Group related items**: Use section comments to organize related functionality
|
|
55
|
+
|
|
56
|
+
### Maintenance Approach
|
|
57
|
+
Keep comments current with code changes. Outdated comments are worse than no comments as they mislead future developers and create maintenance debt.
|
|
58
|
+
|
|
59
|
+
## Anti-Patterns
|
|
60
|
+
|
|
61
|
+
### Avoid These Approaches
|
|
62
|
+
- **Commenting obvious code**: Don't explain what simple assignments do
|
|
63
|
+
- **Excessive commenting**: Every line doesn't need explanation
|
|
64
|
+
- **Outdated information**: Comments that no longer match the code
|
|
65
|
+
- **Poor grammar/spelling**: Unprofessional comments reduce credibility
|
|
66
|
+
- **Code explanation**: Explaining *what* code does instead of *why*
|
|
67
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Lonely Repeat Pattern"
|
|
3
|
+
domain: "sam-coder"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["repeat-loops", "control-flow", "code-patterns"]
|
|
7
|
+
samples: "samples/al-lonely-repeat-pattern.md"
|
|
8
|
+
type: "improvement-pattern"
|
|
9
|
+
category: "language-fundamentals"
|
|
10
|
+
pattern_type: "good"
|
|
11
|
+
severity: "medium"
|
|
12
|
+
impact_level: "medium"
|
|
13
|
+
improvement_suggestion: "Avoid lonely repeat statements by ensuring proper until conditions and loop structure"
|
|
14
|
+
implementation_steps: ["identify-repeat-patterns", "validate-until-conditions", "ensure-proper-structure"]
|
|
15
|
+
validation_criteria: ["complete-repeat-until-pairs", "proper-loop-structure"]
|
|
16
|
+
technical_areas: ["al-code"]
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL Lonely Repeat Pattern
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
The lonely repeat pattern in AL occurs when repeat statements lack proper until conditions or have incomplete loop structures. Understanding proper repeat-until loop construction prevents infinite loops and ensures reliable iteration patterns in Business Central code.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Every repeat statement must have a corresponding until condition that provides a reliable loop exit strategy.
|
|
26
|
+
|
|
27
|
+
## Strategic Framework
|
|
28
|
+
|
|
29
|
+
### Loop Structure Integrity
|
|
30
|
+
- **Complete Pairs**: Every repeat must have matching until condition
|
|
31
|
+
- **Exit Conditions**: Reliable termination logic for all loops
|
|
32
|
+
- **Logic Validation**: Ensure until conditions can actually be met
|
|
33
|
+
- **Infinite Loop Prevention**: Proper loop variable modification patterns
|
|
34
|
+
|
|
35
|
+
### Control Flow Reliability
|
|
36
|
+
Repeat-until loops must have well-defined termination conditions that guarantee loop completion under normal execution scenarios.
|
|
37
|
+
|
|
38
|
+
## Architecture Focus
|
|
39
|
+
|
|
40
|
+
### Repeat-Until Patterns
|
|
41
|
+
- **Condition Logic**: Until conditions that provide reliable loop exit
|
|
42
|
+
- **Variable Modification**: Loop variables that progress toward termination
|
|
43
|
+
- **Error Handling**: Safeguards against infinite loop scenarios
|
|
44
|
+
- **Performance Considerations**: Efficient loop structures for data processing
|
|
45
|
+
|
|
46
|
+
### Loop Design Principles
|
|
47
|
+
Structure repeat-until loops with clear progression logic and reliable termination conditions. Avoid patterns that could lead to infinite execution or unpredictable behavior.
|
|
48
|
+
|
|
49
|
+
## Best Practices
|
|
50
|
+
|
|
51
|
+
### Proper Loop Construction
|
|
52
|
+
- **Clear until conditions** that can be reliably evaluated
|
|
53
|
+
- **Loop variable progression** ensuring movement toward termination
|
|
54
|
+
- **Boundary condition handling** for edge cases
|
|
55
|
+
- **Error prevention** through validation and safeguards
|
|
56
|
+
- **Performance optimization** for large data set processing
|
|
57
|
+
|
|
58
|
+
### Termination Logic
|
|
59
|
+
Design until conditions that provide multiple exit paths when appropriate and include safeguards against infinite loop scenarios in data processing operations.
|
|
60
|
+
|
|
61
|
+
### Code Reliability
|
|
62
|
+
Structure repeat loops with clear termination logic and appropriate error handling to ensure reliable execution in all Business Central scenarios.
|
|
63
|
+
|
|
64
|
+
## Anti-Patterns
|
|
65
|
+
|
|
66
|
+
### Avoid These Approaches
|
|
67
|
+
- **Repeat without until** creating incomplete loop structures
|
|
68
|
+
- **Unreachable until conditions** that cannot be satisfied
|
|
69
|
+
- **No loop variable progression** preventing termination
|
|
70
|
+
- **Complex until logic** that obscures termination conditions
|
|
71
|
+
- **Missing error handling** for loop failure scenarios
|
|
72
|
+
|
|
73
|
+
Lonely repeat patterns create unreliable code that may cause infinite loops or unpredictable behavior in Business Central applications.
|
|
74
|
+
|
|
75
|
+
*Implementation examples: see samples/al-lonely-repeat-pattern.md*
|
|
76
|
+
*Related patterns: al-statement-per-line-rule.md, al-readability-optimization.md*
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL Named Parameter Pattern"
|
|
3
|
+
domain: "sam-coder"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "17+"
|
|
6
|
+
tags: ["parameters", "code-clarity", "maintainability", "readability"]
|
|
7
|
+
type: "improvement-pattern"
|
|
8
|
+
category: "code-quality"
|
|
9
|
+
pattern_type: "good"
|
|
10
|
+
severity: "medium"
|
|
11
|
+
impact_level: "medium"
|
|
12
|
+
improvement_suggestion: "Use descriptive variable naming to create self-documenting parameter patterns"
|
|
13
|
+
implementation_steps: ["identify-complex-calls", "create-descriptive-variables", "validate-clarity"]
|
|
14
|
+
validation_criteria: ["improved-call-clarity", "reduced-parameter-errors"]
|
|
15
|
+
technical_areas: ["al-code"]
|
|
16
|
+
samples: "samples/al-named-parameter-pattern.md"
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL Named Parameter Pattern
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
Named parameter patterns in AL improve code readability, reduce parameter ordering errors, and enhance maintainability by making procedure calls self-documenting. This pattern particularly benefits procedures with multiple parameters of similar types.
|
|
24
|
+
|
|
25
|
+
**Key Principle**: Use descriptive variable naming to make procedure calls immediately understandable without referring to procedure definitions.
|
|
26
|
+
|
|
27
|
+
## Strategic Framework
|
|
28
|
+
|
|
29
|
+
### Implementation Approach
|
|
30
|
+
AL doesn't support native named parameters, but naming conventions and parameter objects achieve similar benefits through descriptive variable usage.
|
|
31
|
+
|
|
32
|
+
### Parameter Object Pattern
|
|
33
|
+
Create dedicated parameter records or temporary tables for complex parameter sets, providing natural naming and extensibility.
|
|
34
|
+
|
|
35
|
+
### Descriptive Variable Naming
|
|
36
|
+
Use clearly named local variables that self-document parameter purposes when calling procedures.
|
|
37
|
+
|
|
38
|
+
### Parameter Documentation
|
|
39
|
+
Structure parameter lists with consistent ordering and comprehensive documentation to support clear calling patterns.
|
|
40
|
+
|
|
41
|
+
## Architecture Focus
|
|
42
|
+
|
|
43
|
+
### Maintainability Enhancement
|
|
44
|
+
**Parameter Evolution**: Parameter objects support adding new parameters without breaking existing calls
|
|
45
|
+
**Type Safety**: Structured parameters reduce type mismatch errors
|
|
46
|
+
**Documentation**: Self-documenting code through clear parameter naming
|
|
47
|
+
**Refactoring Support**: Named patterns simplify procedure signature changes
|
|
48
|
+
|
|
49
|
+
### Code Clarity Benefits
|
|
50
|
+
**Call Site Readability**: Procedure calls clearly communicate their purpose and data flow
|
|
51
|
+
**Parameter Validation**: Centralized parameter validation within parameter objects
|
|
52
|
+
**Default Handling**: Parameter objects can encapsulate default value logic
|
|
53
|
+
**Complex Operations**: Multi-step operations benefit from structured parameter passing
|
|
54
|
+
|
|
55
|
+
### Performance Considerations
|
|
56
|
+
Parameter objects may have slight overhead but improve development velocity and reduce debugging time through clearer interfaces.
|
|
57
|
+
|
|
58
|
+
## Best Practices
|
|
59
|
+
|
|
60
|
+
### Variable Naming Strategy
|
|
61
|
+
Create descriptive local variables before procedure calls:
|
|
62
|
+
```
|
|
63
|
+
CustomerNo := 'C0001';
|
|
64
|
+
PostingDate := WorkDate();
|
|
65
|
+
DocumentType := DocumentType::Invoice;
|
|
66
|
+
PostSalesDocument(CustomerNo, PostingDate, DocumentType);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Parameter Object Design
|
|
70
|
+
- **Logical Grouping**: Group related parameters into cohesive objects
|
|
71
|
+
- **Validation Integration**: Include parameter validation within object methods
|
|
72
|
+
- **Default Values**: Implement sensible defaults for optional parameters
|
|
73
|
+
- **Clear Naming**: Use business domain terminology for parameter properties
|
|
74
|
+
|
|
75
|
+
### Procedure Interface Design
|
|
76
|
+
- **Consistent Ordering**: Establish standard parameter ordering patterns
|
|
77
|
+
- **Optional Parameters**: Place optional parameters at end of parameter list
|
|
78
|
+
- **Documentation**: Provide comprehensive parameter documentation
|
|
79
|
+
- **Interface Stability**: Design parameter interfaces for long-term stability
|
|
80
|
+
|
|
81
|
+
### Call Site Organization
|
|
82
|
+
- **Descriptive Variables**: Use meaningful variable names that explain parameter purpose
|
|
83
|
+
- **Logical Grouping**: Group related parameter assignments together
|
|
84
|
+
- **Clear Separation**: Separate parameter preparation from procedure calls
|
|
85
|
+
- **Error Context**: Include parameter validation before complex procedure calls
|
|
86
|
+
|
|
87
|
+
## Anti-Patterns
|
|
88
|
+
|
|
89
|
+
### Avoid These Approaches
|
|
90
|
+
- **Magic Numbers**: Passing literal values without descriptive variable names
|
|
91
|
+
- **Parameter Soup**: Long parameter lists without logical organization
|
|
92
|
+
- **Type Confusion**: Multiple parameters of same type without clear differentiation
|
|
93
|
+
- **Inconsistent Ordering**: Different parameter ordering patterns across similar procedures
|
|
94
|
+
|
|
95
|
+
Procedures with unclear parameter patterns create debugging difficulties and increase the likelihood of parameter ordering errors during maintenance.
|
|
96
|
+
|
|
97
|
+
*Related patterns: al-procedure-design.md, al-code-clarity.md*
|
|
98
|
+
*Implementation examples: see samples/al-named-parameter-pattern.md*
|