bc-code-intelligence-mcp 1.3.3 → 1.3.4
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/dist/config/test-enhanced-layer-service.js +10 -10
- package/dist/config/test-enhanced-layer-service.js.map +1 -1
- package/dist/dev/hot-reload.d.ts +2 -2
- package/dist/dev/hot-reload.d.ts.map +1 -1
- package/dist/dev/hot-reload.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -38
- package/dist/index.js.map +1 -1
- package/dist/layers/index.d.ts +1 -1
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/layers/index.js +1 -1
- package/dist/layers/index.js.map +1 -1
- package/dist/services/code-analysis-service.d.ts.map +1 -1
- package/dist/services/code-analysis-service.js +4 -0
- package/dist/services/code-analysis-service.js.map +1 -1
- package/dist/services/knowledge-service.d.ts +21 -10
- package/dist/services/knowledge-service.d.ts.map +1 -1
- package/dist/services/knowledge-service.js +71 -54
- package/dist/services/knowledge-service.js.map +1 -1
- package/dist/services/multi-content-layer-service.d.ts +90 -0
- package/dist/services/multi-content-layer-service.d.ts.map +1 -1
- package/dist/services/multi-content-layer-service.js +380 -0
- package/dist/services/multi-content-layer-service.js.map +1 -1
- package/dist/services/workflow-service.d.ts +11 -3
- package/dist/services/workflow-service.d.ts.map +1 -1
- package/dist/services/workflow-service.js +119 -78
- package/dist/services/workflow-service.js.map +1 -1
- package/dist/streamlined-handlers.d.ts +31 -2
- package/dist/streamlined-handlers.d.ts.map +1 -1
- package/dist/streamlined-handlers.js +151 -109
- package/dist/streamlined-handlers.js.map +1 -1
- package/dist/streamlined-tools.d.ts +12 -0
- package/dist/streamlined-tools.d.ts.map +1 -1
- package/dist/streamlined-tools.js +11 -6
- package/dist/streamlined-tools.js.map +1 -1
- package/package.json +13 -4
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +0 -24
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +0 -24
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +0 -30
- package/embedded-knowledge/AGENTS.md +0 -178
- package/embedded-knowledge/CONTRIBUTING.md +0 -58
- package/embedded-knowledge/LICENSE +0 -21
- package/embedded-knowledge/README.md +0 -32
- package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +0 -90
- package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +0 -113
- package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +0 -101
- package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +0 -87
- package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +0 -155
- package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +0 -138
- package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +0 -79
- package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +0 -280
- package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +0 -200
- package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +0 -565
- package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +0 -665
- package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +0 -325
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +0 -696
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +0 -320
- package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +0 -102
- package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +0 -433
- package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +0 -66
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +0 -115
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +0 -360
- package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +0 -86
- package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +0 -96
- package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +0 -70
- package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +0 -84
- package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +0 -93
- package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +0 -73
- package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +0 -78
- package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +0 -79
- package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +0 -87
- package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +0 -209
- package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +0 -246
- package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +0 -107
- package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +0 -105
- package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +0 -186
- package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +0 -60
- package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +0 -139
- package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +0 -190
- package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +0 -516
- package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +0 -298
- package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +0 -324
- package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +0 -344
- package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +0 -137
- package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +0 -340
- package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +0 -810
- package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +0 -86
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +0 -110
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +0 -758
- package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +0 -665
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +0 -316
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +0 -223
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +0 -149
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +0 -412
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +0 -211
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +0 -155
- package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +0 -475
- package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +0 -238
- package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +0 -97
- package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +0 -666
- package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +0 -319
- package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +0 -236
- package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +0 -59
- package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +0 -67
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +0 -70
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +0 -90
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +0 -87
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +0 -70
- package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +0 -74
- package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +0 -81
- package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +0 -56
- package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +0 -66
- package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +0 -79
- package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +0 -78
- package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +0 -83
- package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +0 -76
- package/embedded-knowledge/domains/dean-debug/testfield-performance.md +0 -104
- package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +0 -145
- package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +0 -104
- package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +0 -114
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +0 -356
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +0 -256
- package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +0 -101
- package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +0 -108
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +0 -80
- package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +0 -98
- package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +0 -123
- package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +0 -96
- package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +0 -115
- package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +0 -115
- package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +0 -114
- package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +0 -395
- package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +0 -479
- package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +0 -548
- package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +0 -287
- package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +0 -434
- package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +0 -508
- package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +0 -615
- package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +0 -144
- package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +0 -96
- package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +0 -124
- package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +0 -84
- package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +0 -75
- package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +0 -96
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +0 -385
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +0 -72
- package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +0 -48
- package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +0 -49
- package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +0 -67
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +0 -119
- package/embedded-knowledge/domains/quinn-tester/rule-execution.md +0 -123
- package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +0 -64
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +0 -60
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +0 -83
- package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +0 -716
- package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +0 -101
- package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +0 -91
- package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +0 -79
- package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +0 -79
- package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +0 -89
- package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +0 -81
- package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +0 -75
- package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +0 -96
- package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +0 -86
- package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +0 -90
- package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +0 -82
- package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +0 -78
- package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +0 -76
- package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +0 -78
- package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +0 -100
- package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +0 -115
- package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +0 -124
- package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +0 -110
- package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +0 -438
- package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +0 -255
- package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +0 -209
- package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +0 -218
- package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +0 -218
- package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +0 -280
- package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +0 -188
- package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +0 -245
- package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +0 -244
- package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +0 -278
- package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +0 -484
- package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +0 -64
- package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +0 -107
- package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +0 -280
- package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +0 -75
- package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +0 -67
- package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +0 -76
- package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +0 -98
- package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +0 -128
- package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +0 -75
- package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +0 -95
- package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +0 -141
- package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +0 -91
- package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +0 -118
- package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +0 -111
- package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +0 -113
- package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +0 -127
- package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +0 -141
- package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +0 -66
- package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +0 -96
- package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +0 -161
- package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +0 -177
- package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +0 -239
- package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +0 -346
- package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +0 -298
- package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +0 -677
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +0 -117
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +0 -75
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +0 -169
- package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +0 -399
- package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +0 -356
- package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +0 -889
- package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +0 -84
- package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +0 -127
- package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +0 -89
- package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +0 -516
- package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +0 -61
- package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +0 -427
- package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +0 -122
- package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +0 -96
- package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +0 -101
- package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +0 -149
- package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +0 -107
- package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +0 -95
- package/embedded-knowledge/domains/seth-security/api-permission-model.md +0 -115
- package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +0 -78
- package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +0 -373
- package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +0 -308
- package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +0 -146
- package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +0 -79
- package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +0 -78
- package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +0 -81
- package/embedded-knowledge/indexes/bc-version-matrix.json +0 -188
- package/embedded-knowledge/indexes/domain-catalog.json +0 -106
- package/embedded-knowledge/indexes/tags/abbreviations.json +0 -1
- package/embedded-knowledge/indexes/tags/abstraction.json +0 -1
- package/embedded-knowledge/indexes/tags/access-control.json +0 -1
- package/embedded-knowledge/indexes/tags/accessibility.json +0 -1
- package/embedded-knowledge/indexes/tags/actions.json +0 -1
- package/embedded-knowledge/indexes/tags/advanced-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/advanced.json +0 -1
- package/embedded-knowledge/indexes/tags/al-extension.json +0 -1
- package/embedded-knowledge/indexes/tags/al-generics.json +0 -1
- package/embedded-knowledge/indexes/tags/al-objects.json +0 -1
- package/embedded-knowledge/indexes/tags/al-syntax.json +0 -1
- package/embedded-knowledge/indexes/tags/algorithm-structure.json +0 -1
- package/embedded-knowledge/indexes/tags/alternatives.json +0 -1
- package/embedded-knowledge/indexes/tags/analytics.json +0 -1
- package/embedded-knowledge/indexes/tags/api-delegates.json +0 -1
- package/embedded-knowledge/indexes/tags/api-design.json +0 -1
- package/embedded-knowledge/indexes/tags/api-documentation.json +0 -1
- package/embedded-knowledge/indexes/tags/api-endpoints.json +0 -1
- package/embedded-knowledge/indexes/tags/api-extensibility.json +0 -1
- package/embedded-knowledge/indexes/tags/api-fieldsets.json +0 -1
- package/embedded-knowledge/indexes/tags/api-integration.json +0 -1
- package/embedded-knowledge/indexes/tags/api-interfaces.json +0 -1
- package/embedded-knowledge/indexes/tags/api-optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/api-pages.json +0 -1
- package/embedded-knowledge/indexes/tags/api-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/api-permissions.json +0 -1
- package/embedded-knowledge/indexes/tags/api-responses.json +0 -1
- package/embedded-knowledge/indexes/tags/api-simplification.json +0 -1
- package/embedded-knowledge/indexes/tags/api.json +0 -1
- package/embedded-knowledge/indexes/tags/architecture.json +0 -1
- package/embedded-knowledge/indexes/tags/async-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/async-processing.json +0 -1
- package/embedded-knowledge/indexes/tags/automatic-registration.json +0 -1
- package/embedded-knowledge/indexes/tags/batch-operations.json +0 -1
- package/embedded-knowledge/indexes/tags/bc24-migration.json +0 -1
- package/embedded-knowledge/indexes/tags/begin-blocks.json +0 -1
- package/embedded-knowledge/indexes/tags/begin-end.json +0 -1
- package/embedded-knowledge/indexes/tags/behavioral-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/best-practices.json +0 -1
- package/embedded-knowledge/indexes/tags/binding.json +0 -1
- package/embedded-knowledge/indexes/tags/block-structure.json +0 -1
- package/embedded-knowledge/indexes/tags/blocks.json +0 -1
- package/embedded-knowledge/indexes/tags/boolean-expressions.json +0 -1
- package/embedded-knowledge/indexes/tags/branching.json +0 -1
- package/embedded-knowledge/indexes/tags/breaking-changes.json +0 -1
- package/embedded-knowledge/indexes/tags/breakpoints.json +0 -1
- package/embedded-knowledge/indexes/tags/business-foundation.json +0 -1
- package/embedded-knowledge/indexes/tags/business-infrastructure.json +0 -1
- package/embedded-knowledge/indexes/tags/business-process.json +0 -1
- package/embedded-knowledge/indexes/tags/business-rules.json +0 -1
- package/embedded-knowledge/indexes/tags/caching.json +0 -1
- package/embedded-knowledge/indexes/tags/case-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/case.json +0 -1
- package/embedded-knowledge/indexes/tags/code-analysis.json +0 -1
- package/embedded-knowledge/indexes/tags/code-clarity.json +0 -1
- package/embedded-knowledge/indexes/tags/code-comprehension.json +0 -1
- package/embedded-knowledge/indexes/tags/code-conversion.json +0 -1
- package/embedded-knowledge/indexes/tags/code-formatting.json +0 -1
- package/embedded-knowledge/indexes/tags/code-organization.json +0 -1
- package/embedded-knowledge/indexes/tags/code-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/code-quality.json +0 -1
- package/embedded-knowledge/indexes/tags/code-reuse.json +0 -1
- package/embedded-knowledge/indexes/tags/code-simplification.json +0 -1
- package/embedded-knowledge/indexes/tags/code-standards.json +0 -1
- package/embedded-knowledge/indexes/tags/code-structure.json +0 -1
- package/embedded-knowledge/indexes/tags/code-style.json +0 -1
- package/embedded-knowledge/indexes/tags/codeunit-design.json +0 -1
- package/embedded-knowledge/indexes/tags/command-queue.json +0 -1
- package/embedded-knowledge/indexes/tags/comments.json +0 -1
- package/embedded-knowledge/indexes/tags/compile-time-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/complex-facade.json +0 -1
- package/embedded-knowledge/indexes/tags/complexity-hiding.json +0 -1
- package/embedded-knowledge/indexes/tags/complexity-management.json +0 -1
- package/embedded-knowledge/indexes/tags/compound-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/concurrency.json +0 -1
- package/embedded-knowledge/indexes/tags/conditional-logic.json +0 -1
- package/embedded-knowledge/indexes/tags/conditional.json +0 -1
- package/embedded-knowledge/indexes/tags/conflict-resolution.json +0 -1
- package/embedded-knowledge/indexes/tags/consistency.json +0 -1
- package/embedded-knowledge/indexes/tags/contract-design.json +0 -1
- package/embedded-knowledge/indexes/tags/control-flow.json +0 -1
- package/embedded-knowledge/indexes/tags/conversion-guide.json +0 -1
- package/embedded-knowledge/indexes/tags/correlation.json +0 -1
- package/embedded-knowledge/indexes/tags/custom-messages.json +0 -1
- package/embedded-knowledge/indexes/tags/data-access.json +0 -1
- package/embedded-knowledge/indexes/tags/data-exposure.json +0 -1
- package/embedded-knowledge/indexes/tags/data-integrity.json +0 -1
- package/embedded-knowledge/indexes/tags/data-loading.json +0 -1
- package/embedded-knowledge/indexes/tags/data-manipulation.json +0 -1
- package/embedded-knowledge/indexes/tags/data-modeling.json +0 -1
- package/embedded-knowledge/indexes/tags/data-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/data-protection.json +0 -1
- package/embedded-knowledge/indexes/tags/data-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/database.json +0 -1
- package/embedded-knowledge/indexes/tags/debugging.json +0 -1
- package/embedded-knowledge/indexes/tags/decision-making.json +0 -1
- package/embedded-knowledge/indexes/tags/declaration.json +0 -1
- package/embedded-knowledge/indexes/tags/default-messages.json +0 -1
- package/embedded-knowledge/indexes/tags/defensive-programming.json +0 -1
- package/embedded-knowledge/indexes/tags/deleteall.json +0 -1
- package/embedded-knowledge/indexes/tags/dependencies.json +0 -1
- package/embedded-knowledge/indexes/tags/deployment.json +0 -1
- package/embedded-knowledge/indexes/tags/developer-productivity.json +0 -1
- package/embedded-knowledge/indexes/tags/development-workflow.json +0 -1
- package/embedded-knowledge/indexes/tags/diagnostics.json +0 -1
- package/embedded-knowledge/indexes/tags/dimensions.json +0 -1
- package/embedded-knowledge/indexes/tags/documentation.json +0 -1
- package/embedded-knowledge/indexes/tags/early-exit.json +0 -1
- package/embedded-knowledge/indexes/tags/else-clauses.json +0 -1
- package/embedded-knowledge/indexes/tags/end-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/enterprise-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/entity-relationships.json +0 -1
- package/embedded-knowledge/indexes/tags/error-handling.json +0 -1
- package/embedded-knowledge/indexes/tags/error-messages.json +0 -1
- package/embedded-knowledge/indexes/tags/error-prevention.json +0 -1
- package/embedded-knowledge/indexes/tags/error-text.json +0 -1
- package/embedded-knowledge/indexes/tags/etag.json +0 -1
- package/embedded-knowledge/indexes/tags/event-bridge.json +0 -1
- package/embedded-knowledge/indexes/tags/event-payload.json +0 -1
- package/embedded-knowledge/indexes/tags/event-routing.json +0 -1
- package/embedded-knowledge/indexes/tags/events.json +0 -1
- package/embedded-knowledge/indexes/tags/execution-flow.json +0 -1
- package/embedded-knowledge/indexes/tags/expressions.json +0 -1
- package/embedded-knowledge/indexes/tags/extensibility.json +0 -1
- package/embedded-knowledge/indexes/tags/extensions.json +0 -1
- package/embedded-knowledge/indexes/tags/facade-composition.json +0 -1
- package/embedded-knowledge/indexes/tags/facade-pattern.json +0 -1
- package/embedded-knowledge/indexes/tags/field-control.json +0 -1
- package/embedded-knowledge/indexes/tags/field-exclusion.json +0 -1
- package/embedded-knowledge/indexes/tags/field-registration.json +0 -1
- package/embedded-knowledge/indexes/tags/field-state.json +0 -1
- package/embedded-knowledge/indexes/tags/field-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/fielderror.json +0 -1
- package/embedded-knowledge/indexes/tags/fields.json +0 -1
- package/embedded-knowledge/indexes/tags/filtering.json +0 -1
- package/embedded-knowledge/indexes/tags/filters.json +0 -1
- package/embedded-knowledge/indexes/tags/formatting.json +0 -1
- package/embedded-knowledge/indexes/tags/generic-methods.json +0 -1
- package/embedded-knowledge/indexes/tags/http-status.json +0 -1
- package/embedded-knowledge/indexes/tags/if-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/implementation.json +0 -1
- package/embedded-knowledge/indexes/tags/indentation.json +0 -1
- package/embedded-knowledge/indexes/tags/index-summary.json +0 -277
- package/embedded-knowledge/indexes/tags/indexing.json +0 -1
- package/embedded-knowledge/indexes/tags/inheritance.json +0 -1
- package/embedded-knowledge/indexes/tags/integration.json +0 -1
- package/embedded-knowledge/indexes/tags/integrity-checking.json +0 -1
- package/embedded-knowledge/indexes/tags/intellisense.json +0 -1
- package/embedded-knowledge/indexes/tags/interface-design.json +0 -1
- package/embedded-knowledge/indexes/tags/interface-segregation.json +0 -1
- package/embedded-knowledge/indexes/tags/isolation.json +0 -1
- package/embedded-knowledge/indexes/tags/job-processing.json +0 -1
- package/embedded-knowledge/indexes/tags/keyboard-navigation.json +0 -1
- package/embedded-knowledge/indexes/tags/keywords.json +0 -1
- package/embedded-knowledge/indexes/tags/legacy-modernization.json +0 -1
- package/embedded-knowledge/indexes/tags/line-breaks.json +0 -1
- package/embedded-knowledge/indexes/tags/line-organization.json +0 -1
- package/embedded-knowledge/indexes/tags/line-positioning.json +0 -1
- package/embedded-knowledge/indexes/tags/localization.json +0 -1
- package/embedded-knowledge/indexes/tags/logging.json +0 -1
- package/embedded-knowledge/indexes/tags/loose-coupling.json +0 -1
- package/embedded-knowledge/indexes/tags/maintainability.json +0 -1
- package/embedded-knowledge/indexes/tags/memory-management.json +0 -1
- package/embedded-knowledge/indexes/tags/memory-optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/memory.json +0 -1
- package/embedded-knowledge/indexes/tags/message-design.json +0 -1
- package/embedded-knowledge/indexes/tags/message-formatting.json +0 -1
- package/embedded-knowledge/indexes/tags/message-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/metadata-driven.json +0 -1
- package/embedded-knowledge/indexes/tags/method-comparison.json +0 -1
- package/embedded-knowledge/indexes/tags/module-architecture.json +0 -1
- package/embedded-knowledge/indexes/tags/module-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/monitoring.json +0 -1
- package/embedded-knowledge/indexes/tags/multi-layer-facade.json +0 -1
- package/embedded-knowledge/indexes/tags/multi-tenancy.json +0 -1
- package/embedded-knowledge/indexes/tags/multiple-values.json +0 -1
- package/embedded-knowledge/indexes/tags/naming-conventions.json +0 -1
- package/embedded-knowledge/indexes/tags/naming.json +0 -1
- package/embedded-knowledge/indexes/tags/navigation.json +0 -1
- package/embedded-knowledge/indexes/tags/nested-statements.json +0 -1
- package/embedded-knowledge/indexes/tags/no-series-conversion.json +0 -1
- package/embedded-knowledge/indexes/tags/no-series-validation.json +0 -1
- package/embedded-knowledge/indexes/tags/no-series.json +0 -1
- package/embedded-knowledge/indexes/tags/number-generation.json +0 -1
- package/embedded-knowledge/indexes/tags/object-documentation.json +0 -1
- package/embedded-knowledge/indexes/tags/odata.json +0 -1
- package/embedded-knowledge/indexes/tags/ondelete.json +0 -1
- package/embedded-knowledge/indexes/tags/onvalidate.json +0 -1
- package/embedded-knowledge/indexes/tags/operation-delegation.json +0 -1
- package/embedded-knowledge/indexes/tags/operation-safety.json +0 -1
- package/embedded-knowledge/indexes/tags/operators.json +0 -1
- package/embedded-knowledge/indexes/tags/optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/order.json +0 -1
- package/embedded-knowledge/indexes/tags/organization.json +0 -1
- package/embedded-knowledge/indexes/tags/pages.json +0 -1
- package/embedded-knowledge/indexes/tags/parameters.json +0 -1
- package/embedded-knowledge/indexes/tags/patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/performance-optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/performance.json +0 -1
- package/embedded-knowledge/indexes/tags/placement.json +0 -1
- package/embedded-knowledge/indexes/tags/posting-codeunits.json +0 -1
- package/embedded-knowledge/indexes/tags/posting.json +0 -1
- package/embedded-knowledge/indexes/tags/preconditions.json +0 -1
- package/embedded-knowledge/indexes/tags/primary-key.json +0 -1
- package/embedded-knowledge/indexes/tags/privacy.json +0 -1
- package/embedded-knowledge/indexes/tags/process-automation.json +0 -1
- package/embedded-knowledge/indexes/tags/production.json +0 -1
- package/embedded-knowledge/indexes/tags/productivity.json +0 -1
- package/embedded-knowledge/indexes/tags/query-performance.json +0 -1
- package/embedded-knowledge/indexes/tags/queue-management.json +0 -1
- package/embedded-knowledge/indexes/tags/ranges.json +0 -1
- package/embedded-knowledge/indexes/tags/readability.json +0 -1
- package/embedded-knowledge/indexes/tags/record-access.json +0 -1
- package/embedded-knowledge/indexes/tags/record-methods.json +0 -1
- package/embedded-knowledge/indexes/tags/refactoring.json +0 -1
- package/embedded-knowledge/indexes/tags/reference.json +0 -1
- package/embedded-knowledge/indexes/tags/repeat-loops.json +0 -1
- package/embedded-knowledge/indexes/tags/repeat-statement.json +0 -1
- package/embedded-knowledge/indexes/tags/runtime-errors.json +0 -1
- package/embedded-knowledge/indexes/tags/runtime.json +0 -1
- package/embedded-knowledge/indexes/tags/safeguards.json +0 -1
- package/embedded-knowledge/indexes/tags/security.json +0 -1
- package/embedded-knowledge/indexes/tags/sequence-management.json +0 -1
- package/embedded-knowledge/indexes/tags/serialization.json +0 -1
- package/embedded-knowledge/indexes/tags/session-logmessage.json +0 -1
- package/embedded-knowledge/indexes/tags/session.json +0 -1
- package/embedded-knowledge/indexes/tags/setloadfields.json +0 -1
- package/embedded-knowledge/indexes/tags/shortcuts.json +0 -1
- package/embedded-knowledge/indexes/tags/sift.json +0 -1
- package/embedded-knowledge/indexes/tags/singleinstance.json +0 -1
- package/embedded-knowledge/indexes/tags/spacing.json +0 -1
- package/embedded-knowledge/indexes/tags/sql-translation.json +0 -1
- package/embedded-knowledge/indexes/tags/standards.json +0 -1
- package/embedded-knowledge/indexes/tags/statements.json +0 -1
- package/embedded-knowledge/indexes/tags/streaming.json +0 -1
- package/embedded-knowledge/indexes/tags/strong-typing.json +0 -1
- package/embedded-knowledge/indexes/tags/structural-patterns.json +0 -1
- package/embedded-knowledge/indexes/tags/structure.json +0 -1
- package/embedded-knowledge/indexes/tags/subscribers.json +0 -1
- package/embedded-knowledge/indexes/tags/switch.json +0 -1
- package/embedded-knowledge/indexes/tags/symbol-search.json +0 -1
- package/embedded-knowledge/indexes/tags/syntax.json +0 -1
- package/embedded-knowledge/indexes/tags/systemid.json +0 -1
- package/embedded-knowledge/indexes/tags/table-configuration.json +0 -1
- package/embedded-knowledge/indexes/tags/table-events.json +0 -1
- package/embedded-knowledge/indexes/tags/table-keys.json +0 -1
- package/embedded-knowledge/indexes/tags/table-safety.json +0 -1
- package/embedded-knowledge/indexes/tags/task-scheduler.json +0 -1
- package/embedded-knowledge/indexes/tags/telemetry.json +0 -1
- package/embedded-knowledge/indexes/tags/template-method.json +0 -1
- package/embedded-knowledge/indexes/tags/temporary-tables.json +0 -1
- package/embedded-knowledge/indexes/tags/testfield.json +0 -1
- package/embedded-knowledge/indexes/tags/tradeoffs.json +0 -1
- package/embedded-knowledge/indexes/tags/triggers.json +0 -1
- package/embedded-knowledge/indexes/tags/troubleshooting.json +0 -1
- package/embedded-knowledge/indexes/tags/type-safety.json +0 -1
- package/embedded-knowledge/indexes/tags/url-structure.json +0 -1
- package/embedded-knowledge/indexes/tags/user-experience.json +0 -1
- package/embedded-knowledge/indexes/tags/user-feedback.json +0 -1
- package/embedded-knowledge/indexes/tags/user-interface.json +0 -1
- package/embedded-knowledge/indexes/tags/validation-feedback.json +0 -1
- package/embedded-knowledge/indexes/tags/validation.json +0 -1
- package/embedded-knowledge/indexes/tags/variables.json +0 -1
- package/embedded-knowledge/indexes/tags/verbosity.json +0 -1
- package/embedded-knowledge/indexes/tags/vs-code.json +0 -1
- package/embedded-knowledge/indexes/tags/web-services.json +0 -1
- package/embedded-knowledge/indexes/tags/workflow-management.json +0 -1
- package/embedded-knowledge/indexes/tags/workflow-optimization.json +0 -1
- package/embedded-knowledge/indexes/tags/workflow-templates.json +0 -1
- package/embedded-knowledge/indexes/tags/workspace.json +0 -1
- package/embedded-knowledge/indexes/tags/xml-documentation.json +0 -1
- package/embedded-knowledge/indexes/topic-relationships.json +0 -128
- package/embedded-knowledge/methodologies/index.json +0 -81
- package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
- package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
- package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
- package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
- package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
- package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
- package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
- package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
- package/embedded-knowledge/methodologies/phases/performance.md +0 -211
- package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
- package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
- package/embedded-knowledge/methodologies/phases/verification.md +0 -146
- package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
- package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
- package/embedded-knowledge/specialists/alex-architect.md +0 -216
- package/embedded-knowledge/specialists/casey-copilot.md +0 -226
- package/embedded-knowledge/specialists/chris-config.md +0 -267
- package/embedded-knowledge/specialists/dean-debug.md +0 -222
- package/embedded-knowledge/specialists/eva-errors.md +0 -235
- package/embedded-knowledge/specialists/jordan-bridge.md +0 -235
- package/embedded-knowledge/specialists/logan-legacy.md +0 -209
- package/embedded-knowledge/specialists/maya-mentor.md +0 -211
- package/embedded-knowledge/specialists/morgan-market.md +0 -226
- package/embedded-knowledge/specialists/quinn-tester.md +0 -235
- package/embedded-knowledge/specialists/roger-reviewer.md +0 -234
- package/embedded-knowledge/specialists/sam-coder.md +0 -359
- package/embedded-knowledge/specialists/seth-security.md +0 -235
- package/embedded-knowledge/specialists/taylor-docs.md +0 -257
- package/embedded-knowledge/specialists/uma-ux.md +0 -235
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
# AL Blank Line Organization - Code Examples
|
|
2
|
-
|
|
3
|
-
## Good Examples
|
|
4
|
-
|
|
5
|
-
### Logical Section Separation
|
|
6
|
-
```al
|
|
7
|
-
codeunit 50100 "Customer Management"
|
|
8
|
-
{
|
|
9
|
-
procedure CreateCustomer(Name: Text[100]; Email: Text[80]): Code[20]
|
|
10
|
-
var
|
|
11
|
-
Customer: Record Customer;
|
|
12
|
-
CustomerNo: Code[20];
|
|
13
|
-
begin
|
|
14
|
-
// Input validation section
|
|
15
|
-
if Name = '' then
|
|
16
|
-
Error('Customer name cannot be empty');
|
|
17
|
-
if Email = '' then
|
|
18
|
-
Error('Customer email cannot be empty');
|
|
19
|
-
|
|
20
|
-
// Customer creation section
|
|
21
|
-
Customer.Init();
|
|
22
|
-
CustomerNo := NoSeriesMgt.GetNextNo(SalesSetup."Customer Nos.", 0D, true);
|
|
23
|
-
Customer."No." := CustomerNo;
|
|
24
|
-
Customer.Name := Name;
|
|
25
|
-
Customer."E-Mail" := Email;
|
|
26
|
-
|
|
27
|
-
// Database operation section
|
|
28
|
-
Customer.Insert(true);
|
|
29
|
-
|
|
30
|
-
// Return result
|
|
31
|
-
exit(CustomerNo);
|
|
32
|
-
end;
|
|
33
|
-
}
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### Function Group Separation
|
|
37
|
-
```al
|
|
38
|
-
codeunit 50101 "Order Processing"
|
|
39
|
-
{
|
|
40
|
-
// Validation functions
|
|
41
|
-
procedure ValidateOrderHeader(var SalesHeader: Record "Sales Header")
|
|
42
|
-
begin
|
|
43
|
-
if SalesHeader."Sell-to Customer No." = '' then
|
|
44
|
-
Error('Customer number is required');
|
|
45
|
-
end;
|
|
46
|
-
|
|
47
|
-
procedure ValidateOrderLines(var SalesLine: Record "Sales Line")
|
|
48
|
-
begin
|
|
49
|
-
if SalesLine.Quantity <= 0 then
|
|
50
|
-
Error('Quantity must be greater than zero');
|
|
51
|
-
end;
|
|
52
|
-
|
|
53
|
-
// Processing functions
|
|
54
|
-
procedure ProcessOrder(var SalesHeader: Record "Sales Header")
|
|
55
|
-
begin
|
|
56
|
-
ValidateOrderHeader(SalesHeader);
|
|
57
|
-
CalculateTotals(SalesHeader);
|
|
58
|
-
UpdateInventory(SalesHeader);
|
|
59
|
-
end;
|
|
60
|
-
|
|
61
|
-
procedure CalculateTotals(var SalesHeader: Record "Sales Header")
|
|
62
|
-
begin
|
|
63
|
-
SalesHeader.CalcFields("Amount Including VAT");
|
|
64
|
-
end;
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Bad Examples
|
|
69
|
-
|
|
70
|
-
### No Logical Separation
|
|
71
|
-
```al
|
|
72
|
-
codeunit 50102 "Bad Organization"
|
|
73
|
-
{
|
|
74
|
-
procedure ProcessData()
|
|
75
|
-
var
|
|
76
|
-
Customer: Record Customer;
|
|
77
|
-
Item: Record Item;
|
|
78
|
-
SalesLine: Record "Sales Line";
|
|
79
|
-
begin
|
|
80
|
-
if Customer.FindFirst() then
|
|
81
|
-
Customer.Modify();
|
|
82
|
-
Item.SetRange(Blocked, false);
|
|
83
|
-
if Item.FindSet() then
|
|
84
|
-
repeat
|
|
85
|
-
Item."Unit Price" := Item."Unit Price" * 1.1;
|
|
86
|
-
Item.Modify();
|
|
87
|
-
until Item.Next() = 0;
|
|
88
|
-
SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
|
|
89
|
-
SalesLine.SetRange("Shipment Date", Today);
|
|
90
|
-
if SalesLine.FindSet() then
|
|
91
|
-
SalesLine.DeleteAll();
|
|
92
|
-
Message('Processing complete');
|
|
93
|
-
end;
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Excessive Blank Lines
|
|
98
|
-
```al
|
|
99
|
-
codeunit 50103 "Excessive Spacing"
|
|
100
|
-
{
|
|
101
|
-
procedure BadSpacing()
|
|
102
|
-
var
|
|
103
|
-
Customer: Record Customer;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
Item: Record Item;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
Result: Boolean;
|
|
110
|
-
begin
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
Customer.FindFirst();
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
Item.FindFirst();
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
Result := true;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
end;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Missing Function Separation
|
|
129
|
-
```al
|
|
130
|
-
codeunit 50104 "No Function Separation"
|
|
131
|
-
{
|
|
132
|
-
procedure ValidateCustomer(CustomerNo: Code[20]): Boolean
|
|
133
|
-
begin
|
|
134
|
-
exit(CustomerNo <> '');
|
|
135
|
-
end;
|
|
136
|
-
procedure CreateItem(ItemNo: Code[20]; Description: Text[100])
|
|
137
|
-
var
|
|
138
|
-
Item: Record Item;
|
|
139
|
-
begin
|
|
140
|
-
Item.Init();
|
|
141
|
-
Item."No." := ItemNo;
|
|
142
|
-
Item.Description := Description;
|
|
143
|
-
Item.Insert();
|
|
144
|
-
end;
|
|
145
|
-
procedure DeleteOrder(OrderNo: Code[20])
|
|
146
|
-
var
|
|
147
|
-
SalesHeader: Record "Sales Header";
|
|
148
|
-
begin
|
|
149
|
-
SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo);
|
|
150
|
-
SalesHeader.Delete(true);
|
|
151
|
-
end;
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## Best Practices
|
|
156
|
-
|
|
157
|
-
1. **Separate logical sections** within procedures with single blank lines
|
|
158
|
-
2. **Separate functions** with single blank lines between procedure declarations
|
|
159
|
-
3. **Group related functions** together without excessive spacing
|
|
160
|
-
4. **Use consistent spacing** throughout the codeunit
|
|
161
|
-
5. **Avoid excessive blank lines** that disrupt reading flow
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# AL Case Action Formatting - Code Examples
|
|
2
|
-
|
|
3
|
-
## Good Examples
|
|
4
|
-
|
|
5
|
-
### Single Statement Actions
|
|
6
|
-
```al
|
|
7
|
-
procedure ProcessOrderStatus(Status: Option Open,Released,Pending)
|
|
8
|
-
begin
|
|
9
|
-
case Status of
|
|
10
|
-
Status::Open:
|
|
11
|
-
Message('Order is open for editing');
|
|
12
|
-
Status::Released:
|
|
13
|
-
Message('Order has been released');
|
|
14
|
-
Status::Pending:
|
|
15
|
-
Message('Order is pending approval');
|
|
16
|
-
end;
|
|
17
|
-
end;
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
### Multi-Statement Actions with Begin-End
|
|
21
|
-
```al
|
|
22
|
-
procedure HandleDocumentType(DocumentType: Option Quote,Order,Invoice)
|
|
23
|
-
var
|
|
24
|
-
SalesHeader: Record "Sales Header";
|
|
25
|
-
begin
|
|
26
|
-
case DocumentType of
|
|
27
|
-
DocumentType::Quote:
|
|
28
|
-
begin
|
|
29
|
-
SalesHeader."Document Type" := SalesHeader."Document Type"::Quote;
|
|
30
|
-
SalesHeader."Quote Valid Until Date" := CalcDate('+30D', Today);
|
|
31
|
-
SalesHeader.Insert();
|
|
32
|
-
end;
|
|
33
|
-
DocumentType::Order:
|
|
34
|
-
begin
|
|
35
|
-
SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
|
|
36
|
-
SalesHeader."Shipment Date" := CalcDate('+7D', Today);
|
|
37
|
-
SalesHeader.Insert();
|
|
38
|
-
SendOrderConfirmation(SalesHeader);
|
|
39
|
-
end;
|
|
40
|
-
DocumentType::Invoice:
|
|
41
|
-
begin
|
|
42
|
-
SalesHeader."Document Type" := SalesHeader."Document Type"::Invoice;
|
|
43
|
-
SalesHeader."Due Date" := CalcDate('+30D', Today);
|
|
44
|
-
SalesHeader.Insert();
|
|
45
|
-
PostInvoice(SalesHeader);
|
|
46
|
-
end;
|
|
47
|
-
end;
|
|
48
|
-
end;
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Complex Case with Nested Logic
|
|
52
|
-
```al
|
|
53
|
-
procedure ProcessPaymentMethod(PaymentMethod: Option Cash,CreditCard,BankTransfer,Check)
|
|
54
|
-
var
|
|
55
|
-
PaymentEntry: Record "Payment Entry";
|
|
56
|
-
BankAccount: Record "Bank Account";
|
|
57
|
-
begin
|
|
58
|
-
case PaymentMethod of
|
|
59
|
-
PaymentMethod::Cash:
|
|
60
|
-
begin
|
|
61
|
-
PaymentEntry."Payment Type" := PaymentEntry."Payment Type"::Cash;
|
|
62
|
-
PaymentEntry."Processing Fee" := 0;
|
|
63
|
-
PaymentEntry.Insert();
|
|
64
|
-
end;
|
|
65
|
-
PaymentMethod::CreditCard:
|
|
66
|
-
begin
|
|
67
|
-
PaymentEntry."Payment Type" := PaymentEntry."Payment Type"::"Credit Card";
|
|
68
|
-
PaymentEntry."Processing Fee" := PaymentEntry.Amount * 0.03;
|
|
69
|
-
if PaymentEntry."Processing Fee" < 2.50 then
|
|
70
|
-
PaymentEntry."Processing Fee" := 2.50;
|
|
71
|
-
PaymentEntry.Insert();
|
|
72
|
-
end;
|
|
73
|
-
PaymentMethod::BankTransfer:
|
|
74
|
-
begin
|
|
75
|
-
if BankAccount.Get(PaymentEntry."Bank Account No.") then begin
|
|
76
|
-
PaymentEntry."Payment Type" := PaymentEntry."Payment Type"::"Bank Transfer";
|
|
77
|
-
PaymentEntry."Processing Fee" := 5.00;
|
|
78
|
-
PaymentEntry.Insert();
|
|
79
|
-
InitiateBankTransfer(PaymentEntry);
|
|
80
|
-
end else
|
|
81
|
-
Error('Bank account not found');
|
|
82
|
-
end;
|
|
83
|
-
PaymentMethod::Check:
|
|
84
|
-
begin
|
|
85
|
-
PaymentEntry."Payment Type" := PaymentEntry."Payment Type"::Check;
|
|
86
|
-
PaymentEntry."Processing Fee" := 1.00;
|
|
87
|
-
PaymentEntry."Hold Period" := 3;
|
|
88
|
-
PaymentEntry.Insert();
|
|
89
|
-
end;
|
|
90
|
-
end;
|
|
91
|
-
end;
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Bad Examples
|
|
95
|
-
|
|
96
|
-
### Inconsistent Formatting
|
|
97
|
-
```al
|
|
98
|
-
procedure BadCaseFormatting(Status: Option Open,Released,Pending)
|
|
99
|
-
begin
|
|
100
|
-
case Status of
|
|
101
|
-
Status::Open: Message('Order is open');
|
|
102
|
-
Status::Released:
|
|
103
|
-
begin
|
|
104
|
-
Message('Order released');
|
|
105
|
-
UpdateStatus();
|
|
106
|
-
end;
|
|
107
|
-
Status::Pending: begin Message('Pending approval'); RequestApproval(); end;
|
|
108
|
-
end;
|
|
109
|
-
end;
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### Missing Begin-End for Multi-Statement Actions
|
|
113
|
-
```al
|
|
114
|
-
procedure MissingBeginEnd(DocumentType: Option Quote,Order,Invoice)
|
|
115
|
-
var
|
|
116
|
-
SalesHeader: Record "Sales Header";
|
|
117
|
-
begin
|
|
118
|
-
case DocumentType of
|
|
119
|
-
DocumentType::Quote:
|
|
120
|
-
SalesHeader."Document Type" := SalesHeader."Document Type"::Quote;
|
|
121
|
-
SalesHeader."Quote Valid Until Date" := CalcDate('+30D', Today); // Wrong: not in begin-end block
|
|
122
|
-
DocumentType::Order:
|
|
123
|
-
SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
|
|
124
|
-
SalesHeader."Shipment Date" := CalcDate('+7D', Today); // Wrong: not in begin-end block
|
|
125
|
-
end;
|
|
126
|
-
end;
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Poor Indentation
|
|
130
|
-
```al
|
|
131
|
-
procedure PoorIndentation(Status: Option Open,Released,Pending)
|
|
132
|
-
begin
|
|
133
|
-
case Status of
|
|
134
|
-
Status::Open:
|
|
135
|
-
Message('Order is open');
|
|
136
|
-
Status::Released:
|
|
137
|
-
begin
|
|
138
|
-
Message('Order released');
|
|
139
|
-
UpdateStatus();
|
|
140
|
-
end;
|
|
141
|
-
Status::Pending:
|
|
142
|
-
begin
|
|
143
|
-
Message('Pending approval');
|
|
144
|
-
RequestApproval();
|
|
145
|
-
end;
|
|
146
|
-
end;
|
|
147
|
-
end;
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Unnecessary Begin-End for Single Statements
|
|
151
|
-
```al
|
|
152
|
-
procedure UnnecessaryBeginEnd(Status: Option Open,Released,Pending)
|
|
153
|
-
begin
|
|
154
|
-
case Status of
|
|
155
|
-
Status::Open:
|
|
156
|
-
begin // Unnecessary for single statement
|
|
157
|
-
Message('Order is open');
|
|
158
|
-
end;
|
|
159
|
-
Status::Released:
|
|
160
|
-
begin // Unnecessary for single statement
|
|
161
|
-
Message('Order released');
|
|
162
|
-
end;
|
|
163
|
-
Status::Pending:
|
|
164
|
-
begin // Unnecessary for single statement
|
|
165
|
-
Message('Pending approval');
|
|
166
|
-
end;
|
|
167
|
-
end;
|
|
168
|
-
end;
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## Best Practices
|
|
172
|
-
|
|
173
|
-
1. **Single statements** don't need begin-end blocks
|
|
174
|
-
2. **Multiple statements** must use begin-end blocks
|
|
175
|
-
3. **Consistent indentation** for all case branches
|
|
176
|
-
4. **Align case labels** for visual clarity
|
|
177
|
-
5. **Group related case logic** with appropriate spacing
|
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
# AL Lonely Repeat Pattern - Code Examples
|
|
2
|
-
|
|
3
|
-
## Good Examples
|
|
4
|
-
|
|
5
|
-
### Proper Repeat-Until Loop Structure
|
|
6
|
-
```al
|
|
7
|
-
procedure ProcessCustomerRecords()
|
|
8
|
-
var
|
|
9
|
-
Customer: Record Customer;
|
|
10
|
-
ProcessedCount: Integer;
|
|
11
|
-
begin
|
|
12
|
-
ProcessedCount := 0;
|
|
13
|
-
|
|
14
|
-
if Customer.FindSet() then
|
|
15
|
-
repeat
|
|
16
|
-
// Process each customer record
|
|
17
|
-
if not Customer.Blocked then begin
|
|
18
|
-
Customer."Last Contact Date" := Today;
|
|
19
|
-
Customer.Modify();
|
|
20
|
-
ProcessedCount += 1;
|
|
21
|
-
end;
|
|
22
|
-
until Customer.Next() = 0; // Proper until condition
|
|
23
|
-
|
|
24
|
-
Message('Processed %1 customer records', ProcessedCount);
|
|
25
|
-
end;
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### Repeat Loop with Error Handling and Exit Conditions
|
|
29
|
-
```al
|
|
30
|
-
procedure SafeDataProcessing()
|
|
31
|
-
var
|
|
32
|
-
DataRecord: Record "Data Processing Queue";
|
|
33
|
-
MaxAttempts: Integer;
|
|
34
|
-
AttemptCount: Integer;
|
|
35
|
-
ProcessingComplete: Boolean;
|
|
36
|
-
begin
|
|
37
|
-
MaxAttempts := 5;
|
|
38
|
-
AttemptCount := 0;
|
|
39
|
-
ProcessingComplete := false;
|
|
40
|
-
|
|
41
|
-
if DataRecord.FindSet() then
|
|
42
|
-
repeat
|
|
43
|
-
AttemptCount += 1;
|
|
44
|
-
|
|
45
|
-
// Process with error handling
|
|
46
|
-
if TryProcessRecord(DataRecord) then begin
|
|
47
|
-
ProcessingComplete := true;
|
|
48
|
-
DataRecord."Processing Status" := DataRecord."Processing Status"::Completed;
|
|
49
|
-
DataRecord.Modify();
|
|
50
|
-
end else begin
|
|
51
|
-
DataRecord."Error Count" += 1;
|
|
52
|
-
DataRecord.Modify();
|
|
53
|
-
end;
|
|
54
|
-
|
|
55
|
-
until (DataRecord.Next() = 0) or (AttemptCount >= MaxAttempts) or ProcessingComplete;
|
|
56
|
-
|
|
57
|
-
if not ProcessingComplete then
|
|
58
|
-
Error('Data processing failed after %1 attempts', MaxAttempts);
|
|
59
|
-
end;
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Complex Repeat Loop with Multiple Exit Conditions
|
|
63
|
-
```al
|
|
64
|
-
procedure BatchOrderProcessing()
|
|
65
|
-
var
|
|
66
|
-
SalesHeader: Record "Sales Header";
|
|
67
|
-
ProcessingStartTime: Time;
|
|
68
|
-
MaxProcessingTime: Duration;
|
|
69
|
-
OrdersProcessed: Integer;
|
|
70
|
-
BatchSize: Integer;
|
|
71
|
-
begin
|
|
72
|
-
ProcessingStartTime := Time;
|
|
73
|
-
MaxProcessingTime := 300000; // 5 minutes in milliseconds
|
|
74
|
-
OrdersProcessed := 0;
|
|
75
|
-
BatchSize := 100;
|
|
76
|
-
|
|
77
|
-
SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
|
|
78
|
-
SalesHeader.SetRange(Status, SalesHeader.Status::Open);
|
|
79
|
-
|
|
80
|
-
if SalesHeader.FindSet() then
|
|
81
|
-
repeat
|
|
82
|
-
// Process individual order
|
|
83
|
-
if ProcessSingleOrder(SalesHeader) then
|
|
84
|
-
OrdersProcessed += 1;
|
|
85
|
-
|
|
86
|
-
// Update progress every 10 orders
|
|
87
|
-
if OrdersProcessed mod 10 = 0 then
|
|
88
|
-
UpdateProgressIndicator(OrdersProcessed);
|
|
89
|
-
|
|
90
|
-
until (SalesHeader.Next() = 0) or
|
|
91
|
-
(OrdersProcessed >= BatchSize) or
|
|
92
|
-
(Time - ProcessingStartTime > MaxProcessingTime);
|
|
93
|
-
|
|
94
|
-
Message('Batch processing complete. Processed %1 orders', OrdersProcessed);
|
|
95
|
-
end;
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Repeat Loop with Data Validation
|
|
99
|
-
```al
|
|
100
|
-
procedure ValidateAndProcessItems()
|
|
101
|
-
var
|
|
102
|
-
Item: Record Item;
|
|
103
|
-
ValidationErrors: Integer;
|
|
104
|
-
TotalItems: Integer;
|
|
105
|
-
begin
|
|
106
|
-
ValidationErrors := 0;
|
|
107
|
-
TotalItems := 0;
|
|
108
|
-
|
|
109
|
-
Item.SetRange(Blocked, false);
|
|
110
|
-
|
|
111
|
-
if Item.FindSet() then
|
|
112
|
-
repeat
|
|
113
|
-
TotalItems += 1;
|
|
114
|
-
|
|
115
|
-
// Validate each item
|
|
116
|
-
if not ValidateItemData(Item) then begin
|
|
117
|
-
ValidationErrors += 1;
|
|
118
|
-
LogValidationError(Item."No.");
|
|
119
|
-
end else begin
|
|
120
|
-
Item."Last Validation Date" := Today;
|
|
121
|
-
Item.Modify();
|
|
122
|
-
end;
|
|
123
|
-
|
|
124
|
-
until Item.Next() = 0;
|
|
125
|
-
|
|
126
|
-
if ValidationErrors > 0 then
|
|
127
|
-
Message('Validation complete: %1 errors found out of %2 items', ValidationErrors, TotalItems)
|
|
128
|
-
else
|
|
129
|
-
Message('All %1 items validated successfully', TotalItems);
|
|
130
|
-
end;
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
## Bad Examples
|
|
134
|
-
|
|
135
|
-
### Lonely Repeat Without Until
|
|
136
|
-
```al
|
|
137
|
-
procedure LonelyRepeat()
|
|
138
|
-
var
|
|
139
|
-
Customer: Record Customer;
|
|
140
|
-
begin
|
|
141
|
-
if Customer.FindSet() then
|
|
142
|
-
repeat
|
|
143
|
-
Customer."Last Contact Date" := Today;
|
|
144
|
-
Customer.Modify();
|
|
145
|
-
// Missing until condition - this creates an infinite loop!
|
|
146
|
-
|
|
147
|
-
Message('Processing complete'); // This will never execute
|
|
148
|
-
end;
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Unreachable Until Condition
|
|
152
|
-
```al
|
|
153
|
-
procedure UnreachableUntil()
|
|
154
|
-
var
|
|
155
|
-
Counter: Integer;
|
|
156
|
-
MaxCount: Integer;
|
|
157
|
-
begin
|
|
158
|
-
Counter := 1;
|
|
159
|
-
MaxCount := 10;
|
|
160
|
-
|
|
161
|
-
repeat
|
|
162
|
-
Message('Processing item %1', Counter);
|
|
163
|
-
// Counter is never incremented - until condition can never be met
|
|
164
|
-
until Counter > MaxCount; // This creates an infinite loop
|
|
165
|
-
end;
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### Complex Until Logic That Obscures Termination
|
|
169
|
-
```al
|
|
170
|
-
procedure ObscureTermination()
|
|
171
|
-
var
|
|
172
|
-
SalesLine: Record "Sales Line";
|
|
173
|
-
ComplexCondition: Boolean;
|
|
174
|
-
AnotherCondition: Boolean;
|
|
175
|
-
YetAnotherCondition: Boolean;
|
|
176
|
-
begin
|
|
177
|
-
if SalesLine.FindSet() then
|
|
178
|
-
repeat
|
|
179
|
-
// Complex processing logic
|
|
180
|
-
ComplexCondition := (SalesLine.Quantity > 0) and (SalesLine."Unit Price" > 0);
|
|
181
|
-
AnotherCondition := (SalesLine."Line Discount %" < 50) or (SalesLine.Type = SalesLine.Type::Item);
|
|
182
|
-
YetAnotherCondition := not ((SalesLine."Shipment Date" = 0D) and (SalesLine."Qty. to Ship" > 0));
|
|
183
|
-
|
|
184
|
-
ProcessSalesLine(SalesLine);
|
|
185
|
-
|
|
186
|
-
until (SalesLine.Next() = 0) and ComplexCondition and AnotherCondition and YetAnotherCondition; // Poor: complex until condition
|
|
187
|
-
end;
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### No Loop Variable Progression
|
|
191
|
-
```al
|
|
192
|
-
procedure NoProgression()
|
|
193
|
-
var
|
|
194
|
-
ItemNo: Code[20];
|
|
195
|
-
Item: Record Item;
|
|
196
|
-
FoundItem: Boolean;
|
|
197
|
-
begin
|
|
198
|
-
ItemNo := 'ITEM001';
|
|
199
|
-
FoundItem := false;
|
|
200
|
-
|
|
201
|
-
repeat
|
|
202
|
-
if Item.Get(ItemNo) then begin
|
|
203
|
-
FoundItem := true;
|
|
204
|
-
ProcessItem(Item);
|
|
205
|
-
end;
|
|
206
|
-
// ItemNo never changes - if item doesn't exist, this becomes infinite loop
|
|
207
|
-
until FoundItem;
|
|
208
|
-
end;
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### Missing Error Handling for Loop Failures
|
|
212
|
-
```al
|
|
213
|
-
procedure NoErrorHandling()
|
|
214
|
-
var
|
|
215
|
-
DataRecord: Record "Processing Queue";
|
|
216
|
-
ProcessingSuccess: Boolean;
|
|
217
|
-
begin
|
|
218
|
-
ProcessingSuccess := false;
|
|
219
|
-
|
|
220
|
-
if DataRecord.FindSet() then
|
|
221
|
-
repeat
|
|
222
|
-
// Processing that might fail
|
|
223
|
-
ProcessRecord(DataRecord); // No error handling
|
|
224
|
-
ProcessingSuccess := true;
|
|
225
|
-
until DataRecord.Next() = 0;
|
|
226
|
-
|
|
227
|
-
// No handling for case where processing fails
|
|
228
|
-
Message('Processing complete');
|
|
229
|
-
end;
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
## Best Practices
|
|
233
|
-
|
|
234
|
-
1. **Always pair repeat with until** - never leave repeat statements incomplete
|
|
235
|
-
2. **Ensure until conditions can be met** - validate that loop variables progress toward termination
|
|
236
|
-
3. **Include multiple exit strategies** when appropriate (time limits, error counts, batch sizes)
|
|
237
|
-
4. **Use clear, simple until conditions** that are easy to understand and verify
|
|
238
|
-
5. **Add error handling** to prevent infinite loops from processing failures
|
|
239
|
-
6. **Validate loop progression** to ensure forward movement toward termination condition
|