bc-code-intelligence-mcp 1.3.2 → 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/README.md +1 -0
- 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 +43 -41
- 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/layers/layer-service.d.ts.map +1 -1
- package/dist/layers/layer-service.js +4 -1
- package/dist/layers/layer-service.js.map +1 -1
- package/dist/search/intelligent-search.d.ts.map +1 -1
- package/dist/search/intelligent-search.js +5 -2
- package/dist/search/intelligent-search.js.map +1 -1
- package/dist/services/code-analysis-service.d.ts.map +1 -1
- package/dist/services/code-analysis-service.js +8 -1
- 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 +82 -59
- 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/roleplay-engine.d.ts +1 -1
- package/dist/services/roleplay-engine.d.ts.map +1 -1
- package/dist/services/roleplay-engine.js +40 -12
- package/dist/services/roleplay-engine.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 +152 -110
- 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/dist/tools/specialist-tools.d.ts.map +1 -1
- package/dist/tools/specialist-tools.js +23 -13
- package/dist/tools/specialist-tools.js.map +1 -1
- package/dist/types/bc-knowledge.d.ts +10 -7
- package/dist/types/bc-knowledge.d.ts.map +1 -1
- package/dist/types/bc-knowledge.js +23 -1
- package/dist/types/bc-knowledge.js.map +1 -1
- package/dist/types/roleplay-types.d.ts +1 -0
- package/dist/types/roleplay-types.d.ts.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 -295
- 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/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,438 +0,0 @@
|
|
|
1
|
-
# AL Begin/End Block Structure - Code Examples
|
|
2
|
-
|
|
3
|
-
## Object Trigger Structure
|
|
4
|
-
|
|
5
|
-
### Table Trigger Pattern
|
|
6
|
-
```al
|
|
7
|
-
table 50100 "Sales Order Processing"
|
|
8
|
-
{
|
|
9
|
-
fields
|
|
10
|
-
{
|
|
11
|
-
field(1; "Order No."; Code[20])
|
|
12
|
-
{
|
|
13
|
-
Caption = 'Order No.';
|
|
14
|
-
}
|
|
15
|
-
field(2; "Customer No."; Code[20])
|
|
16
|
-
{
|
|
17
|
-
Caption = 'Customer No.';
|
|
18
|
-
TableRelation = Customer;
|
|
19
|
-
|
|
20
|
-
trigger OnValidate()
|
|
21
|
-
begin
|
|
22
|
-
if "Customer No." <> '' then begin
|
|
23
|
-
Customer.Get("Customer No.");
|
|
24
|
-
"Customer Name" := Customer.Name;
|
|
25
|
-
ValidateCustomerCredit();
|
|
26
|
-
end;
|
|
27
|
-
end;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
var
|
|
32
|
-
Customer: Record Customer;
|
|
33
|
-
|
|
34
|
-
trigger OnInsert()
|
|
35
|
-
begin
|
|
36
|
-
TestField("Customer No.");
|
|
37
|
-
|
|
38
|
-
if "Order No." = '' then begin
|
|
39
|
-
NoSeriesManagement.InitSeries(GetNoSeriesCode(), xRec."No. Series", 0D, "Order No.", "No. Series");
|
|
40
|
-
end;
|
|
41
|
-
end;
|
|
42
|
-
|
|
43
|
-
trigger OnModify()
|
|
44
|
-
begin
|
|
45
|
-
if xRec."Customer No." <> "Customer No." then begin
|
|
46
|
-
if OrderLineExists() then begin
|
|
47
|
-
if not Confirm('Customer changed. Update order lines?') then begin
|
|
48
|
-
Error('Customer change cancelled');
|
|
49
|
-
end;
|
|
50
|
-
UpdateOrderLines();
|
|
51
|
-
end;
|
|
52
|
-
end;
|
|
53
|
-
end;
|
|
54
|
-
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Page Trigger Structure
|
|
58
|
-
```al
|
|
59
|
-
page 50100 "Sales Order Card"
|
|
60
|
-
{
|
|
61
|
-
PageType = Card;
|
|
62
|
-
SourceTable = "Sales Order Processing";
|
|
63
|
-
|
|
64
|
-
layout
|
|
65
|
-
{
|
|
66
|
-
area(Content)
|
|
67
|
-
{
|
|
68
|
-
group(General)
|
|
69
|
-
{
|
|
70
|
-
field("Order No."; "Order No.")
|
|
71
|
-
{
|
|
72
|
-
ApplicationArea = All;
|
|
73
|
-
|
|
74
|
-
trigger OnAssistEdit()
|
|
75
|
-
begin
|
|
76
|
-
if AssistEdit(xRec) then begin
|
|
77
|
-
CurrPage.Update();
|
|
78
|
-
end;
|
|
79
|
-
end;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
actions
|
|
86
|
-
{
|
|
87
|
-
area(Processing)
|
|
88
|
-
{
|
|
89
|
-
action(ProcessOrder)
|
|
90
|
-
{
|
|
91
|
-
Caption = 'Process Order';
|
|
92
|
-
|
|
93
|
-
trigger OnAction()
|
|
94
|
-
begin
|
|
95
|
-
if ValidateOrderData() then begin
|
|
96
|
-
if ConfirmProcessing() then begin
|
|
97
|
-
ProcessOrderLines();
|
|
98
|
-
SendConfirmationEmail();
|
|
99
|
-
Message('Order processed successfully');
|
|
100
|
-
end else begin
|
|
101
|
-
Message('Order processing cancelled');
|
|
102
|
-
end;
|
|
103
|
-
end else begin
|
|
104
|
-
Error('Order validation failed');
|
|
105
|
-
end;
|
|
106
|
-
end;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
trigger OnOpenPage()
|
|
112
|
-
begin
|
|
113
|
-
SetDefaultFilters();
|
|
114
|
-
UpdateVisibility();
|
|
115
|
-
|
|
116
|
-
if IsNewRecord() then begin
|
|
117
|
-
InitializeNewOrder();
|
|
118
|
-
end;
|
|
119
|
-
end;
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## Procedure Organization Patterns
|
|
124
|
-
|
|
125
|
-
```al
|
|
126
|
-
codeunit 50100 "Order Management"
|
|
127
|
-
{
|
|
128
|
-
procedure CreateSalesOrder(CustomerNo: Code[20]; OrderDate: Date): Code[20]
|
|
129
|
-
var
|
|
130
|
-
SalesHeader: Record "Sales Header";
|
|
131
|
-
OrderNo: Code[20];
|
|
132
|
-
begin
|
|
133
|
-
OrderNo := GetNextOrderNumber();
|
|
134
|
-
|
|
135
|
-
SalesHeader.Init();
|
|
136
|
-
SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
|
|
137
|
-
SalesHeader."No." := OrderNo;
|
|
138
|
-
SalesHeader."Sell-to Customer No." := CustomerNo;
|
|
139
|
-
SalesHeader."Order Date" := OrderDate;
|
|
140
|
-
SalesHeader.Insert(true);
|
|
141
|
-
|
|
142
|
-
exit(OrderNo);
|
|
143
|
-
end;
|
|
144
|
-
|
|
145
|
-
procedure ProcessBulkOrders(var TempOrderBuffer: Record "Order Buffer" temporary)
|
|
146
|
-
var
|
|
147
|
-
OrderNo: Code[20];
|
|
148
|
-
ProcessedCount: Integer;
|
|
149
|
-
ErrorCount: Integer;
|
|
150
|
-
begin
|
|
151
|
-
if TempOrderBuffer.IsEmpty() then begin
|
|
152
|
-
Message('No orders to process');
|
|
153
|
-
exit;
|
|
154
|
-
end;
|
|
155
|
-
|
|
156
|
-
TempOrderBuffer.FindSet();
|
|
157
|
-
repeat
|
|
158
|
-
if ValidateOrderBuffer(TempOrderBuffer) then begin
|
|
159
|
-
if CreateOrderFromBuffer(TempOrderBuffer, OrderNo) then begin
|
|
160
|
-
ProcessedCount += 1;
|
|
161
|
-
TempOrderBuffer."Status" := TempOrderBuffer."Status"::Processed;
|
|
162
|
-
TempOrderBuffer."Order No." := OrderNo;
|
|
163
|
-
end else begin
|
|
164
|
-
ErrorCount += 1;
|
|
165
|
-
TempOrderBuffer."Status" := TempOrderBuffer."Status"::Error;
|
|
166
|
-
end;
|
|
167
|
-
end else begin
|
|
168
|
-
ErrorCount += 1;
|
|
169
|
-
TempOrderBuffer."Status" := TempOrderBuffer."Status"::"Validation Error";
|
|
170
|
-
end;
|
|
171
|
-
|
|
172
|
-
TempOrderBuffer.Modify();
|
|
173
|
-
until TempOrderBuffer.Next() = 0;
|
|
174
|
-
|
|
175
|
-
Message('Processing complete. Processed: %1, Errors: %2', ProcessedCount, ErrorCount);
|
|
176
|
-
end;
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## Control Flow Nesting Patterns
|
|
181
|
-
|
|
182
|
-
```al
|
|
183
|
-
codeunit 50101 "Advanced Control Flow"
|
|
184
|
-
{
|
|
185
|
-
procedure DetermineShippingMethod(SalesHeader: Record "Sales Header"): Code[10]
|
|
186
|
-
begin
|
|
187
|
-
if SalesHeader."Sell-to Country/Region Code" = 'US' then begin
|
|
188
|
-
if SalesHeader."Order Date" = Today() then begin
|
|
189
|
-
if SalesHeader.Amount > 1000 then begin
|
|
190
|
-
exit('RUSH-PREMIUM');
|
|
191
|
-
end else begin
|
|
192
|
-
exit('RUSH-STANDARD');
|
|
193
|
-
end;
|
|
194
|
-
end else begin
|
|
195
|
-
if SalesHeader.Amount > 500 then begin
|
|
196
|
-
exit('DOMESTIC-FREE');
|
|
197
|
-
end else begin
|
|
198
|
-
exit('DOMESTIC-PAID');
|
|
199
|
-
end;
|
|
200
|
-
end;
|
|
201
|
-
end else begin
|
|
202
|
-
if SalesHeader.Amount > 2000 then begin
|
|
203
|
-
exit('INTL-EXPRESS');
|
|
204
|
-
end else begin
|
|
205
|
-
if GetShippingDistance(SalesHeader."Sell-to Country/Region Code") <= 5000 then begin
|
|
206
|
-
exit('INTL-STANDARD');
|
|
207
|
-
end else begin
|
|
208
|
-
exit('INTL-ECONOMY');
|
|
209
|
-
end;
|
|
210
|
-
end;
|
|
211
|
-
end;
|
|
212
|
-
end;
|
|
213
|
-
|
|
214
|
-
procedure ProcessOrderByType(OrderType: Enum "Order Type")
|
|
215
|
-
begin
|
|
216
|
-
case OrderType of
|
|
217
|
-
OrderType::Standard:
|
|
218
|
-
begin
|
|
219
|
-
ValidateInventory();
|
|
220
|
-
CreateShipment();
|
|
221
|
-
SendConfirmation();
|
|
222
|
-
end;
|
|
223
|
-
OrderType::DropShip:
|
|
224
|
-
begin
|
|
225
|
-
ValidateVendor();
|
|
226
|
-
CreatePurchaseOrder();
|
|
227
|
-
NotifyCustomer();
|
|
228
|
-
end;
|
|
229
|
-
OrderType::Transfer:
|
|
230
|
-
begin
|
|
231
|
-
ValidateLocations();
|
|
232
|
-
CreateTransferOrder();
|
|
233
|
-
UpdateInventory();
|
|
234
|
-
end;
|
|
235
|
-
else begin
|
|
236
|
-
Error('Unsupported order type: %1', OrderType);
|
|
237
|
-
end;
|
|
238
|
-
end;
|
|
239
|
-
end;
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
## Variable Scope Examples
|
|
244
|
-
|
|
245
|
-
```al
|
|
246
|
-
codeunit 50102 "Variable Scope Examples"
|
|
247
|
-
{
|
|
248
|
-
var
|
|
249
|
-
GlobalCounter: Integer;
|
|
250
|
-
GlobalCustomer: Record Customer;
|
|
251
|
-
|
|
252
|
-
procedure DemonstrateVariableScope()
|
|
253
|
-
var
|
|
254
|
-
LocalCounter: Integer;
|
|
255
|
-
Customer: Record Customer;
|
|
256
|
-
i: Integer;
|
|
257
|
-
begin
|
|
258
|
-
LocalCounter := 0;
|
|
259
|
-
|
|
260
|
-
for i := 1 to 10 do begin
|
|
261
|
-
LocalCounter += 1;
|
|
262
|
-
GlobalCounter += 1;
|
|
263
|
-
|
|
264
|
-
if i mod 2 = 0 then begin
|
|
265
|
-
Customer.SetRange("No.", Format(i));
|
|
266
|
-
if Customer.FindFirst() then begin
|
|
267
|
-
ProcessCustomer(Customer);
|
|
268
|
-
end;
|
|
269
|
-
end;
|
|
270
|
-
end;
|
|
271
|
-
|
|
272
|
-
Message('Local: %1, Global: %2', LocalCounter, GlobalCounter);
|
|
273
|
-
end;
|
|
274
|
-
|
|
275
|
-
procedure ProcessCustomerOrders(CustomerNo: Code[20]; ProcessDate: Date)
|
|
276
|
-
var
|
|
277
|
-
SalesHeader: Record "Sales Header";
|
|
278
|
-
OrderCount: Integer;
|
|
279
|
-
TotalAmount: Decimal;
|
|
280
|
-
begin
|
|
281
|
-
OrderCount := 0;
|
|
282
|
-
TotalAmount := 0;
|
|
283
|
-
|
|
284
|
-
SalesHeader.SetRange("Sell-to Customer No.", CustomerNo);
|
|
285
|
-
SalesHeader.SetRange("Order Date", ProcessDate);
|
|
286
|
-
|
|
287
|
-
if SalesHeader.FindSet() then begin
|
|
288
|
-
repeat
|
|
289
|
-
OrderCount += 1;
|
|
290
|
-
SalesHeader.CalcFields(Amount);
|
|
291
|
-
TotalAmount += SalesHeader.Amount;
|
|
292
|
-
|
|
293
|
-
if SalesHeader.Amount > 1000 then begin
|
|
294
|
-
ApplyVIPProcessing(SalesHeader);
|
|
295
|
-
end;
|
|
296
|
-
|
|
297
|
-
until SalesHeader.Next() = 0;
|
|
298
|
-
end;
|
|
299
|
-
|
|
300
|
-
UpdateCustomerStatistics(CustomerNo, OrderCount, TotalAmount);
|
|
301
|
-
end;
|
|
302
|
-
}
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
## Exception Handling Patterns
|
|
306
|
-
|
|
307
|
-
```al
|
|
308
|
-
codeunit 50103 "Exception Handling Examples"
|
|
309
|
-
{
|
|
310
|
-
procedure SafeOrderProcessing(OrderNo: Code[20]): Boolean
|
|
311
|
-
var
|
|
312
|
-
SalesHeader: Record "Sales Header";
|
|
313
|
-
ProcessingResult: Boolean;
|
|
314
|
-
begin
|
|
315
|
-
ProcessingResult := false;
|
|
316
|
-
|
|
317
|
-
if SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo) then begin
|
|
318
|
-
if ValidateOrderForProcessing(SalesHeader) then begin
|
|
319
|
-
if ProcessOrderSafely(SalesHeader) then begin
|
|
320
|
-
ProcessingResult := true;
|
|
321
|
-
end;
|
|
322
|
-
end;
|
|
323
|
-
end;
|
|
324
|
-
|
|
325
|
-
exit(ProcessingResult);
|
|
326
|
-
end;
|
|
327
|
-
|
|
328
|
-
local procedure ProcessOrderSafely(var SalesHeader: Record "Sales Header"): Boolean
|
|
329
|
-
begin
|
|
330
|
-
if not Codeunit.Run(Codeunit::"Sales-Post", SalesHeader) then begin
|
|
331
|
-
LogProcessingError(SalesHeader."No.", GetLastErrorText());
|
|
332
|
-
ClearLastError();
|
|
333
|
-
exit(false);
|
|
334
|
-
end;
|
|
335
|
-
|
|
336
|
-
exit(true);
|
|
337
|
-
end;
|
|
338
|
-
|
|
339
|
-
procedure BatchProcessOrders(var TempOrderList: Record "Order Processing Queue" temporary)
|
|
340
|
-
var
|
|
341
|
-
ProcessedCount: Integer;
|
|
342
|
-
ErrorCount: Integer;
|
|
343
|
-
CurrentOrder: Code[20];
|
|
344
|
-
begin
|
|
345
|
-
ProcessedCount := 0;
|
|
346
|
-
ErrorCount := 0;
|
|
347
|
-
|
|
348
|
-
if TempOrderList.FindSet() then begin
|
|
349
|
-
repeat
|
|
350
|
-
CurrentOrder := TempOrderList."Order No.";
|
|
351
|
-
|
|
352
|
-
if ProcessSingleOrder(CurrentOrder) then begin
|
|
353
|
-
ProcessedCount += 1;
|
|
354
|
-
TempOrderList.Status := TempOrderList.Status::Completed;
|
|
355
|
-
end else begin
|
|
356
|
-
ErrorCount += 1;
|
|
357
|
-
TempOrderList.Status := TempOrderList.Status::Error;
|
|
358
|
-
TempOrderList."Error Message" := GetLastErrorText();
|
|
359
|
-
ClearLastError();
|
|
360
|
-
end;
|
|
361
|
-
|
|
362
|
-
TempOrderList.Modify();
|
|
363
|
-
|
|
364
|
-
until TempOrderList.Next() = 0;
|
|
365
|
-
end;
|
|
366
|
-
|
|
367
|
-
Message('Batch processing complete.\Processed: %1\Errors: %2', ProcessedCount, ErrorCount);
|
|
368
|
-
end;
|
|
369
|
-
}
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
## Anti-Pattern Examples
|
|
373
|
-
|
|
374
|
-
```al
|
|
375
|
-
// ❌ ANTI-PATTERN: Poor block structure
|
|
376
|
-
procedure BadExample()
|
|
377
|
-
var
|
|
378
|
-
Customer: Record Customer;
|
|
379
|
-
begin
|
|
380
|
-
// Missing begin/end for multi-statement block
|
|
381
|
-
if Customer.FindFirst() then
|
|
382
|
-
Customer.CalcFields(Balance);
|
|
383
|
-
UpdateCustomerStatus(Customer); // This always executes!
|
|
384
|
-
|
|
385
|
-
// Inconsistent block structure
|
|
386
|
-
repeat
|
|
387
|
-
ProcessCustomer();
|
|
388
|
-
until Customer.Next() = 0; // Should be in begin/end block
|
|
389
|
-
end;
|
|
390
|
-
|
|
391
|
-
// ❌ ANTI-PATTERN: Poor variable scope
|
|
392
|
-
procedure BadVariableScope()
|
|
393
|
-
begin
|
|
394
|
-
if SomeCondition then begin
|
|
395
|
-
Customer: Record Customer; // SYNTAX ERROR - can't declare here
|
|
396
|
-
Customer.FindFirst();
|
|
397
|
-
end;
|
|
398
|
-
end;
|
|
399
|
-
|
|
400
|
-
// ✅ CORRECT: Proper block structure
|
|
401
|
-
procedure GoodExample()
|
|
402
|
-
var
|
|
403
|
-
Customer: Record Customer;
|
|
404
|
-
begin
|
|
405
|
-
if Customer.FindFirst() then begin
|
|
406
|
-
Customer.CalcFields(Balance);
|
|
407
|
-
UpdateCustomerStatus(Customer);
|
|
408
|
-
end;
|
|
409
|
-
|
|
410
|
-
if Customer.FindSet() then begin
|
|
411
|
-
repeat
|
|
412
|
-
ProcessCustomer();
|
|
413
|
-
until Customer.Next() = 0;
|
|
414
|
-
end;
|
|
415
|
-
end;
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
## Best Practices Summary
|
|
419
|
-
|
|
420
|
-
### Block Structure Guidelines
|
|
421
|
-
1. **Always use begin/end** for multi-statement blocks
|
|
422
|
-
2. **Consistent indentation** - use 4 spaces per level
|
|
423
|
-
3. **Clear nesting** - avoid deeply nested structures
|
|
424
|
-
4. **Logical grouping** - group related statements
|
|
425
|
-
5. **Single responsibility** - each block has clear purpose
|
|
426
|
-
|
|
427
|
-
### Variable Scope Best Practices
|
|
428
|
-
1. **Declare at procedure level** for maximum flexibility
|
|
429
|
-
2. **Initialize variables** before use
|
|
430
|
-
3. **Use meaningful names** indicating scope and purpose
|
|
431
|
-
4. **Minimize global variables** - prefer parameters
|
|
432
|
-
|
|
433
|
-
### Error Handling Standards
|
|
434
|
-
1. **Check return values** from system functions
|
|
435
|
-
2. **Use ClearLastError()** after handling errors
|
|
436
|
-
3. **Provide meaningful messages** with context
|
|
437
|
-
4. **Implement graceful degradation** where possible
|
|
438
|
-
5. **Log errors appropriately** for troubleshooting
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
# AL Binary Operator Spacing - Code Examples
|
|
2
|
-
|
|
3
|
-
## Good Examples
|
|
4
|
-
|
|
5
|
-
### Arithmetic Operators with Proper Spacing
|
|
6
|
-
```al
|
|
7
|
-
procedure CalculateOrderTotals(BaseAmount: Decimal; TaxRate: Decimal; DiscountPct: Decimal): Decimal
|
|
8
|
-
var
|
|
9
|
-
TaxAmount: Decimal;
|
|
10
|
-
DiscountAmount: Decimal;
|
|
11
|
-
NetAmount: Decimal;
|
|
12
|
-
FinalTotal: Decimal;
|
|
13
|
-
begin
|
|
14
|
-
// Arithmetic operations with consistent spacing
|
|
15
|
-
TaxAmount := BaseAmount * TaxRate / 100;
|
|
16
|
-
DiscountAmount := BaseAmount * DiscountPct / 100;
|
|
17
|
-
NetAmount := BaseAmount - DiscountAmount;
|
|
18
|
-
FinalTotal := NetAmount + TaxAmount;
|
|
19
|
-
|
|
20
|
-
// Complex calculations with proper spacing
|
|
21
|
-
FinalTotal := (BaseAmount * (1 - DiscountPct / 100)) * (1 + TaxRate / 100);
|
|
22
|
-
|
|
23
|
-
exit(FinalTotal);
|
|
24
|
-
end;
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### Comparison Operators with Consistent Spacing
|
|
28
|
-
```al
|
|
29
|
-
procedure ValidateCustomerData(var Customer: Record Customer): Boolean
|
|
30
|
-
var
|
|
31
|
-
ValidationResult: Boolean;
|
|
32
|
-
begin
|
|
33
|
-
ValidationResult := true;
|
|
34
|
-
|
|
35
|
-
// Comparison operations with proper spacing
|
|
36
|
-
if Customer."No." = '' then
|
|
37
|
-
ValidationResult := false;
|
|
38
|
-
|
|
39
|
-
if Customer."Credit Limit (LCY)" <= 0 then
|
|
40
|
-
ValidationResult := false;
|
|
41
|
-
|
|
42
|
-
if Customer."Balance (LCY)" >= Customer."Credit Limit (LCY)" then
|
|
43
|
-
ValidationResult := false;
|
|
44
|
-
|
|
45
|
-
if Customer."Last Date Modified" <> Today then
|
|
46
|
-
Customer."Last Date Modified" := Today;
|
|
47
|
-
|
|
48
|
-
// Complex comparison with proper spacing
|
|
49
|
-
if (Customer."Balance (LCY)" > 0) and (Customer."Credit Limit (LCY)" > 0) then
|
|
50
|
-
if Customer."Balance (LCY)" / Customer."Credit Limit (LCY)" > 0.8 then
|
|
51
|
-
Message('Customer approaching credit limit');
|
|
52
|
-
|
|
53
|
-
exit(ValidationResult);
|
|
54
|
-
end;
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Logical Operators with Clear Spacing
|
|
58
|
-
```al
|
|
59
|
-
procedure ProcessOrderLogic(var SalesHeader: Record "Sales Header"): Boolean
|
|
60
|
-
var
|
|
61
|
-
CanProcess: Boolean;
|
|
62
|
-
Customer: Record Customer;
|
|
63
|
-
begin
|
|
64
|
-
Customer.Get(SalesHeader."Sell-to Customer No.");
|
|
65
|
-
|
|
66
|
-
// Logical operations with proper spacing
|
|
67
|
-
CanProcess := (SalesHeader.Status = SalesHeader.Status::Open) and
|
|
68
|
-
(not Customer.Blocked) and
|
|
69
|
-
(SalesHeader."Order Date" <> 0D);
|
|
70
|
-
|
|
71
|
-
// Complex logical expressions with clear spacing
|
|
72
|
-
if (Customer."Credit Limit (LCY)" > 0) and
|
|
73
|
-
(Customer."Balance (LCY)" < Customer."Credit Limit (LCY)") and
|
|
74
|
-
((SalesHeader."Amount Including VAT" + Customer."Balance (LCY)") <= Customer."Credit Limit (LCY)") then
|
|
75
|
-
CanProcess := true
|
|
76
|
-
else
|
|
77
|
-
CanProcess := false;
|
|
78
|
-
|
|
79
|
-
// Multiple condition checks with proper spacing
|
|
80
|
-
if (SalesHeader."Shipment Date" <> 0D) or
|
|
81
|
-
(SalesHeader."Requested Delivery Date" <> 0D) or
|
|
82
|
-
(SalesHeader."Promised Delivery Date" <> 0D) then
|
|
83
|
-
SalesHeader."Has Delivery Date" := true;
|
|
84
|
-
|
|
85
|
-
exit(CanProcess);
|
|
86
|
-
end;
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Assignment Operators with Consistent Formatting
|
|
90
|
-
```al
|
|
91
|
-
procedure UpdateCustomerInformation(var Customer: Record Customer; NewCredit: Decimal)
|
|
92
|
-
var
|
|
93
|
-
PreviousCredit: Decimal;
|
|
94
|
-
CreditIncrease: Decimal;
|
|
95
|
-
begin
|
|
96
|
-
// Assignment operations with proper spacing
|
|
97
|
-
PreviousCredit := Customer."Credit Limit (LCY)";
|
|
98
|
-
Customer."Credit Limit (LCY)" := NewCredit;
|
|
99
|
-
CreditIncrease := NewCredit - PreviousCredit;
|
|
100
|
-
|
|
101
|
-
// Complex assignments with proper spacing
|
|
102
|
-
Customer."Credit Available (LCY)" := Customer."Credit Limit (LCY)" - Customer."Balance (LCY)";
|
|
103
|
-
|
|
104
|
-
// Multiple assignments maintaining consistency
|
|
105
|
-
Customer."Last Date Modified" := Today;
|
|
106
|
-
Customer."Last Time Modified" := Time;
|
|
107
|
-
Customer."Modified By" := UserId;
|
|
108
|
-
|
|
109
|
-
Customer.Modify();
|
|
110
|
-
end;
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Mixed Operators in Complex Expressions
|
|
114
|
-
```al
|
|
115
|
-
procedure CalculateComplexPricing(ItemNo: Code[20]; Quantity: Decimal; CustomerNo: Code[20]): Decimal
|
|
116
|
-
var
|
|
117
|
-
Item: Record Item;
|
|
118
|
-
Customer: Record Customer;
|
|
119
|
-
BasePrice: Decimal;
|
|
120
|
-
VolumeDiscount: Decimal;
|
|
121
|
-
CustomerDiscount: Decimal;
|
|
122
|
-
FinalPrice: Decimal;
|
|
123
|
-
begin
|
|
124
|
-
Item.Get(ItemNo);
|
|
125
|
-
Customer.Get(CustomerNo);
|
|
126
|
-
|
|
127
|
-
BasePrice := Item."Unit Price";
|
|
128
|
-
|
|
129
|
-
// Complex calculations with consistent operator spacing
|
|
130
|
-
if Quantity >= 100 then
|
|
131
|
-
VolumeDiscount := 0.15
|
|
132
|
-
else if Quantity >= 50 then
|
|
133
|
-
VolumeDiscount := 0.10
|
|
134
|
-
else if Quantity >= 20 then
|
|
135
|
-
VolumeDiscount := 0.05
|
|
136
|
-
else
|
|
137
|
-
VolumeDiscount := 0.00;
|
|
138
|
-
|
|
139
|
-
// Customer type discount calculation
|
|
140
|
-
if Customer."Customer Price Group" = 'VIP' then
|
|
141
|
-
CustomerDiscount := 0.20
|
|
142
|
-
else if Customer."Customer Price Group" = 'PREMIUM' then
|
|
143
|
-
CustomerDiscount := 0.10
|
|
144
|
-
else
|
|
145
|
-
CustomerDiscount := 0.00;
|
|
146
|
-
|
|
147
|
-
// Final price calculation with proper spacing
|
|
148
|
-
FinalPrice := BasePrice * Quantity * (1 - VolumeDiscount) * (1 - CustomerDiscount);
|
|
149
|
-
|
|
150
|
-
exit(FinalPrice);
|
|
151
|
-
end;
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## Bad Examples
|
|
155
|
-
|
|
156
|
-
### Cramped Arithmetic Operations
|
|
157
|
-
```al
|
|
158
|
-
procedure BadArithmeticSpacing(Amount: Decimal; Tax: Decimal): Decimal
|
|
159
|
-
var
|
|
160
|
-
Result: Decimal;
|
|
161
|
-
begin
|
|
162
|
-
Result:=Amount*Tax/100; // Bad: no spaces around operators
|
|
163
|
-
Result:=Amount+Result; // Bad: no spaces around operators
|
|
164
|
-
Result:=(Amount*1.1)+Tax-5; // Bad: inconsistent spacing
|
|
165
|
-
exit(Result);
|
|
166
|
-
end;
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### Inconsistent Comparison Spacing
|
|
170
|
-
```al
|
|
171
|
-
procedure BadComparisonSpacing(Customer: Record Customer): Boolean
|
|
172
|
-
begin
|
|
173
|
-
if Customer."No."='' then // Bad: no spaces around =
|
|
174
|
-
exit(false);
|
|
175
|
-
|
|
176
|
-
if Customer."Credit Limit (LCY)" <=0 then // Bad: no space before <=
|
|
177
|
-
exit(false);
|
|
178
|
-
|
|
179
|
-
if Customer."Balance (LCY)">= Customer."Credit Limit (LCY)" then // Bad: inconsistent spacing around >=
|
|
180
|
-
exit(false);
|
|
181
|
-
|
|
182
|
-
exit(true);
|
|
183
|
-
end;
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### Poor Logical Operator Spacing
|
|
187
|
-
```al
|
|
188
|
-
procedure BadLogicalSpacing(SalesHeader: Record "Sales Header"): Boolean
|
|
189
|
-
var
|
|
190
|
-
Customer: Record Customer;
|
|
191
|
-
begin
|
|
192
|
-
Customer.Get(SalesHeader."Sell-to Customer No.");
|
|
193
|
-
|
|
194
|
-
// Bad logical operator spacing
|
|
195
|
-
if(SalesHeader.Status=SalesHeader.Status::Open)and(not Customer.Blocked)and(SalesHeader."Order Date"<>0D)then // Bad: no spaces
|
|
196
|
-
exit(true);
|
|
197
|
-
|
|
198
|
-
if (Customer."Credit Limit (LCY)">0)and (Customer."Balance (LCY)"<Customer."Credit Limit (LCY)")then // Bad: inconsistent spacing
|
|
199
|
-
exit(true);
|
|
200
|
-
|
|
201
|
-
exit(false);
|
|
202
|
-
end;
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
### Cramped Assignment Operations
|
|
206
|
-
```al
|
|
207
|
-
procedure BadAssignmentSpacing(var Customer: Record Customer)
|
|
208
|
-
var
|
|
209
|
-
NewCredit: Decimal;
|
|
210
|
-
begin
|
|
211
|
-
NewCredit:=5000; // Bad: no spaces around :=
|
|
212
|
-
Customer."Credit Limit (LCY)":=NewCredit; // Bad: no spaces around :=
|
|
213
|
-
Customer."Credit Available (LCY)":=Customer."Credit Limit (LCY)"-Customer."Balance (LCY)"; // Bad: no spaces around operators
|
|
214
|
-
end;
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
### Mixed Spacing Inconsistency
|
|
218
|
-
```al
|
|
219
|
-
procedure InconsistentSpacing(Amount: Decimal; Discount: Decimal): Decimal
|
|
220
|
-
var
|
|
221
|
-
Result: Decimal;
|
|
222
|
-
begin
|
|
223
|
-
Result := Amount * (1-Discount/100); // Bad: inconsistent spacing (some operators have spaces, others don't)
|
|
224
|
-
Result:= Result+10; // Bad: space only on one side of :=
|
|
225
|
-
Result=Result *1.1; // Bad: wrong assignment operator and poor spacing
|
|
226
|
-
|
|
227
|
-
if Result> 1000 then // Bad: space only on one side of >
|
|
228
|
-
Result := Result- 50; // Bad: space only on one side of -
|
|
229
|
-
|
|
230
|
-
exit(Result);
|
|
231
|
-
end;
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### Extremely Cramped Complex Expressions
|
|
235
|
-
```al
|
|
236
|
-
procedure CrampedComplexExpressions(Item: Record Item; Qty: Decimal; Customer: Record Customer): Decimal
|
|
237
|
-
var
|
|
238
|
-
Price: Decimal;
|
|
239
|
-
begin
|
|
240
|
-
Price:=Item."Unit Price"*Qty*(1-GetVolumeDiscount(Qty)/100)*(1-GetCustomerDiscount(Customer."No.")/100); // Bad: no spacing in complex expression
|
|
241
|
-
|
|
242
|
-
if(Item."Unit Price">0)and(Qty>0)and(Customer."Credit Limit (LCY)">Customer."Balance (LCY)")then // Bad: cramped logical expression
|
|
243
|
-
Price:=Price*1.1; // Bad: no spaces
|
|
244
|
-
|
|
245
|
-
exit(Price);
|
|
246
|
-
end;
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
## Best Practices
|
|
250
|
-
|
|
251
|
-
1. **Single space before and after** all binary operators (+, -, *, /, =, <>, <, >, <=, >=, :=)
|
|
252
|
-
2. **Consistent spacing** throughout all expressions and assignments
|
|
253
|
-
3. **Clear separation** in complex expressions with parentheses and spacing
|
|
254
|
-
4. **Maintain spacing** in multi-line expressions for readability
|
|
255
|
-
5. **Use consistent patterns** across entire codebase for professional appearance
|