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,186 +0,0 @@
|
|
|
1
|
-
# BC24 No. Series Conversion Examples
|
|
2
|
-
|
|
3
|
-
## Complete Conversion Examples
|
|
4
|
-
|
|
5
|
-
### Sales Document Conversion
|
|
6
|
-
```al
|
|
7
|
-
// BEFORE (BC14-23): Legacy NoSeriesManagement approach
|
|
8
|
-
table 50100 "Sales Document"
|
|
9
|
-
{
|
|
10
|
-
trigger OnInsert()
|
|
11
|
-
var
|
|
12
|
-
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
13
|
-
begin
|
|
14
|
-
if "No." = '' then
|
|
15
|
-
NoSeriesMgt.InitSeries(GetNoSeriesCode(), xRec."No. Series", 0D, "No.", "No. Series");
|
|
16
|
-
end;
|
|
17
|
-
|
|
18
|
-
procedure GetNoSeriesCode(): Code[20]
|
|
19
|
-
begin
|
|
20
|
-
exit('SALES-DOC');
|
|
21
|
-
end;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// AFTER (BC24+): New No. Series module approach
|
|
25
|
-
table 50100 "Sales Document"
|
|
26
|
-
{
|
|
27
|
-
trigger OnInsert()
|
|
28
|
-
var
|
|
29
|
-
NoSeries: Codeunit "No. Series";
|
|
30
|
-
begin
|
|
31
|
-
if "No." = '' then
|
|
32
|
-
"No." := NoSeries.GetNextNo("No. Series", WorkDate());
|
|
33
|
-
end;
|
|
34
|
-
|
|
35
|
-
procedure GetNoSeriesCode(): Code[20]
|
|
36
|
-
begin
|
|
37
|
-
exit('SALES-DOC');
|
|
38
|
-
end;
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Manual Number Testing Conversion
|
|
43
|
-
```al
|
|
44
|
-
// BEFORE (BC14-23): Multiple method calls for manual testing
|
|
45
|
-
procedure ValidateManualEntry()
|
|
46
|
-
var
|
|
47
|
-
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
48
|
-
begin
|
|
49
|
-
NoSeriesMgt.TestManual("No. Series");
|
|
50
|
-
if not NoSeriesMgt.ManualNoAllowed("No. Series") then
|
|
51
|
-
Error('Manual numbers not allowed for series %1', "No. Series");
|
|
52
|
-
end;
|
|
53
|
-
|
|
54
|
-
// AFTER (BC24+): Single method with built-in logic
|
|
55
|
-
procedure ValidateManualEntry()
|
|
56
|
-
var
|
|
57
|
-
NoSeries: Codeunit "No. Series";
|
|
58
|
-
begin
|
|
59
|
-
NoSeries.TestManual("No. Series");
|
|
60
|
-
// Built-in error handling provides comprehensive validation
|
|
61
|
-
end;
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Number Peek vs Allocation Conversion
|
|
65
|
-
```al
|
|
66
|
-
// BEFORE (BC14-23): Boolean parameter controls behavior
|
|
67
|
-
procedure GetNumberPreview(): Code[20]
|
|
68
|
-
var
|
|
69
|
-
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
70
|
-
begin
|
|
71
|
-
exit(NoSeriesMgt.GetNextNo("No. Series", WorkDate(), false)); // Peek only
|
|
72
|
-
end;
|
|
73
|
-
|
|
74
|
-
procedure AllocateNumber(): Code[20]
|
|
75
|
-
var
|
|
76
|
-
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
77
|
-
begin
|
|
78
|
-
exit(NoSeriesMgt.GetNextNo("No. Series", WorkDate(), true)); // Allocate
|
|
79
|
-
end;
|
|
80
|
-
|
|
81
|
-
// AFTER (BC24+): Explicit method names for clear intent
|
|
82
|
-
procedure GetNumberPreview(): Code[20]
|
|
83
|
-
var
|
|
84
|
-
NoSeries: Codeunit "No. Series";
|
|
85
|
-
begin
|
|
86
|
-
exit(NoSeries.PeekNextNo("No. Series", WorkDate())); // Explicit peek
|
|
87
|
-
end;
|
|
88
|
-
|
|
89
|
-
procedure AllocateNumber(): Code[20]
|
|
90
|
-
var
|
|
91
|
-
NoSeries: Codeunit "No. Series";
|
|
92
|
-
begin
|
|
93
|
-
exit(NoSeries.GetNextNo("No. Series", WorkDate())); // Explicit allocation
|
|
94
|
-
end;
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Event Migration Examples
|
|
98
|
-
|
|
99
|
-
### Replacing Obsolete Events
|
|
100
|
-
```al
|
|
101
|
-
// BEFORE (BC14-23): Event subscriber approach
|
|
102
|
-
[EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnBeforeGetNextNo', '', true, true)]
|
|
103
|
-
local procedure OnBeforeGetNextNo(NoSeriesCode: Code[20]; var NoSeriesLine: Record "No. Series Line"; var IsHandled: Boolean)
|
|
104
|
-
begin
|
|
105
|
-
// Custom logic before number generation
|
|
106
|
-
if NoSeriesCode = 'SPECIAL-SERIES' then begin
|
|
107
|
-
PerformCustomValidation(NoSeriesCode);
|
|
108
|
-
IsHandled := true;
|
|
109
|
-
end;
|
|
110
|
-
end;
|
|
111
|
-
|
|
112
|
-
// AFTER (BC24+): Direct method call with wrapper
|
|
113
|
-
procedure GetNextNoWithCustomLogic(SeriesCode: Code[20]): Code[20]
|
|
114
|
-
var
|
|
115
|
-
NoSeries: Codeunit "No. Series";
|
|
116
|
-
begin
|
|
117
|
-
// Pre-processing logic (replaces OnBeforeGetNextNo)
|
|
118
|
-
if SeriesCode = 'SPECIAL-SERIES' then
|
|
119
|
-
PerformCustomValidation(SeriesCode);
|
|
120
|
-
|
|
121
|
-
// Get number using new module
|
|
122
|
-
exit(NoSeries.GetNextNo(SeriesCode, WorkDate()));
|
|
123
|
-
end;
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### Complex Event Replacement
|
|
127
|
-
```al
|
|
128
|
-
// BEFORE (BC14-23): Multiple event subscriptions
|
|
129
|
-
[EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnAfterGetNextNo', '', true, true)]
|
|
130
|
-
local procedure OnAfterGetNextNo(NoSeriesCode: Code[20]; NextNo: Code[20])
|
|
131
|
-
begin
|
|
132
|
-
LogNumberAllocation(NoSeriesCode, NextNo);
|
|
133
|
-
UpdateRelatedSeries(NoSeriesCode, NextNo);
|
|
134
|
-
end;
|
|
135
|
-
|
|
136
|
-
// AFTER (BC24+): Integrated procedure with post-processing
|
|
137
|
-
procedure AllocateNumberWithLogging(SeriesCode: Code[20]): Code[20]
|
|
138
|
-
var
|
|
139
|
-
NoSeries: Codeunit "No. Series";
|
|
140
|
-
AllocatedNumber: Code[20];
|
|
141
|
-
begin
|
|
142
|
-
// Allocate number
|
|
143
|
-
AllocatedNumber := NoSeries.GetNextNo(SeriesCode, WorkDate());
|
|
144
|
-
|
|
145
|
-
// Post-processing logic (replaces OnAfterGetNextNo)
|
|
146
|
-
LogNumberAllocation(SeriesCode, AllocatedNumber);
|
|
147
|
-
UpdateRelatedSeries(SeriesCode, AllocatedNumber);
|
|
148
|
-
|
|
149
|
-
exit(AllocatedNumber);
|
|
150
|
-
end;
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## Complete Migration Checklist
|
|
154
|
-
|
|
155
|
-
### Step 1: Variable Declaration Updates
|
|
156
|
-
```al
|
|
157
|
-
// Remove these legacy declarations
|
|
158
|
-
var
|
|
159
|
-
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
160
|
-
|
|
161
|
-
// Replace with new module references
|
|
162
|
-
var
|
|
163
|
-
NoSeries: Codeunit "No. Series";
|
|
164
|
-
NoSeriesBatch: Codeunit "No. Series - Batch";
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Step 2: Method Call Replacements
|
|
168
|
-
```al
|
|
169
|
-
// Replace all instances of these patterns:
|
|
170
|
-
NoSeriesMgt.InitSeries(...) → NoSeries.GetNextNo(...)
|
|
171
|
-
NoSeriesMgt.TestManual(...) → NoSeries.TestManual(...)
|
|
172
|
-
NoSeriesMgt.SelectSeries(...) → NoSeries.LookupRelatedNoSeries(...)
|
|
173
|
-
NoSeriesMgt.GetNextNo(..., false) → NoSeries.PeekNextNo(...)
|
|
174
|
-
NoSeriesMgt.GetNextNo(..., true) → NoSeries.GetNextNo(...)
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### Step 3: Error Handling Migration
|
|
178
|
-
```al
|
|
179
|
-
// BEFORE: Custom error handling required
|
|
180
|
-
if not NoSeriesMgt.TryFunction(...) then
|
|
181
|
-
Error('Custom error message');
|
|
182
|
-
|
|
183
|
-
// AFTER: Built-in error handling with try methods
|
|
184
|
-
if not NoSeries.TryGetNextNo(ResultNo, SeriesCode, WorkDate()) then
|
|
185
|
-
HandleSpecificFailureScenario();
|
|
186
|
-
```
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# Case Statement Performance Optimization - AL Code Samples
|
|
2
|
-
|
|
3
|
-
## Frequency-Based Ordering
|
|
4
|
-
|
|
5
|
-
```al
|
|
6
|
-
procedure ProcessTransactionOptimized(TransactionType: Text[20]; Amount: Decimal): Boolean
|
|
7
|
-
begin
|
|
8
|
-
// Order by frequency - most common first
|
|
9
|
-
case TransactionType of
|
|
10
|
-
'SALE': // 60% of transactions
|
|
11
|
-
exit(ProcessSaleTransaction(Amount));
|
|
12
|
-
'PAYMENT': // 25% of transactions
|
|
13
|
-
exit(ProcessPaymentTransaction(Amount));
|
|
14
|
-
'REFUND': // 10% of transactions
|
|
15
|
-
exit(ProcessRefundTransaction(Amount));
|
|
16
|
-
else
|
|
17
|
-
exit(ProcessUnknownTransaction(TransactionType, Amount));
|
|
18
|
-
end;
|
|
19
|
-
end;
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Enum vs Text Performance
|
|
23
|
-
|
|
24
|
-
```al
|
|
25
|
-
// Faster enum-based approach
|
|
26
|
-
procedure ProcessTransactionEnum(TransactionType: Enum "Transaction Type"; Amount: Decimal): Boolean
|
|
27
|
-
begin
|
|
28
|
-
case TransactionType of
|
|
29
|
-
TransactionType::Sale:
|
|
30
|
-
exit(ProcessSaleTransaction(Amount));
|
|
31
|
-
TransactionType::Payment:
|
|
32
|
-
exit(ProcessPaymentTransaction(Amount));
|
|
33
|
-
else
|
|
34
|
-
exit(false);
|
|
35
|
-
end;
|
|
36
|
-
end;
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Dictionary Alternative for Large Case Sets
|
|
40
|
-
|
|
41
|
-
```al
|
|
42
|
-
procedure ProcessWithDictionary(ProcessingType: Text[20]; Data: Text): Text
|
|
43
|
-
var
|
|
44
|
-
ProcessingFunctions: Dictionary of [Text, Integer];
|
|
45
|
-
FunctionId: Integer;
|
|
46
|
-
begin
|
|
47
|
-
ProcessingFunctions.Add('FORMAT', 1);
|
|
48
|
-
ProcessingFunctions.Add('VALIDATE', 2);
|
|
49
|
-
ProcessingFunctions.Add('TRANSFORM', 3);
|
|
50
|
-
|
|
51
|
-
if ProcessingFunctions.Get(ProcessingType, FunctionId) then
|
|
52
|
-
case FunctionId of
|
|
53
|
-
1: exit(FormatData(Data));
|
|
54
|
-
2: exit(ValidateData(Data));
|
|
55
|
-
3: exit(TransformData(Data));
|
|
56
|
-
end;
|
|
57
|
-
|
|
58
|
-
exit('Unknown processing type');
|
|
59
|
-
end;
|
|
60
|
-
```
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
# AL Compound Statements for Enhanced Debugging Examples
|
|
2
|
-
|
|
3
|
-
## Strategic Breakpoint Placement
|
|
4
|
-
|
|
5
|
-
### Clear Breakpoint Locations with Compound Statements
|
|
6
|
-
```al
|
|
7
|
-
local procedure ProcessCustomerOrder(var SalesHeader: Record "Sales Header"): Boolean
|
|
8
|
-
var
|
|
9
|
-
Customer: Record Customer;
|
|
10
|
-
ValidationResult: Boolean;
|
|
11
|
-
begin
|
|
12
|
-
// Breakpoint here provides clear entry context
|
|
13
|
-
if Customer.Get(SalesHeader."Sell-to Customer No.") then begin
|
|
14
|
-
// Breakpoint here confirms customer retrieval success
|
|
15
|
-
ValidationResult := ValidateCustomerData(Customer);
|
|
16
|
-
|
|
17
|
-
if ValidationResult then begin
|
|
18
|
-
// Breakpoint here enters successful validation path
|
|
19
|
-
if ProcessOrderValidation(SalesHeader) then begin
|
|
20
|
-
// Breakpoint here confirms order validation success
|
|
21
|
-
ProcessApprovedOrder(SalesHeader);
|
|
22
|
-
exit(true);
|
|
23
|
-
end else begin
|
|
24
|
-
// Breakpoint here enters order validation failure path
|
|
25
|
-
LogOrderValidationFailure(SalesHeader."No.");
|
|
26
|
-
exit(false);
|
|
27
|
-
end;
|
|
28
|
-
end else begin
|
|
29
|
-
// Breakpoint here enters customer validation failure path
|
|
30
|
-
LogCustomerValidationFailure(Customer."No.");
|
|
31
|
-
exit(false);
|
|
32
|
-
end;
|
|
33
|
-
end else begin
|
|
34
|
-
// Breakpoint here captures customer not found scenario
|
|
35
|
-
LogCustomerNotFound(SalesHeader."Sell-to Customer No.");
|
|
36
|
-
exit(false);
|
|
37
|
-
end;
|
|
38
|
-
end;
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Exception Context Enhancement
|
|
42
|
-
|
|
43
|
-
### Clear Exception Boundaries with Compound Statements
|
|
44
|
-
```al
|
|
45
|
-
local procedure ProcessDocumentPosting(var GenJournalLine: Record "Gen. Journal Line")
|
|
46
|
-
var
|
|
47
|
-
PostingResult: Boolean;
|
|
48
|
-
begin
|
|
49
|
-
try
|
|
50
|
-
// Compound block provides clear exception scope
|
|
51
|
-
if ValidateJournalLine(GenJournalLine) then begin
|
|
52
|
-
if CheckAccountingPeriod(GenJournalLine."Posting Date") then begin
|
|
53
|
-
PostingResult := PostJournalLine(GenJournalLine);
|
|
54
|
-
|
|
55
|
-
if PostingResult then begin
|
|
56
|
-
// Breakpoint here confirms successful posting
|
|
57
|
-
LogSuccessfulPosting(GenJournalLine."Document No.");
|
|
58
|
-
end else begin
|
|
59
|
-
// Breakpoint here captures posting failure
|
|
60
|
-
LogPostingFailure(GenJournalLine."Document No.");
|
|
61
|
-
end;
|
|
62
|
-
end else begin
|
|
63
|
-
// Breakpoint here captures period validation failure
|
|
64
|
-
Error('Accounting period is closed for date %1', GenJournalLine."Posting Date");
|
|
65
|
-
end;
|
|
66
|
-
end else begin
|
|
67
|
-
// Breakpoint here captures journal line validation failure
|
|
68
|
-
Error('Journal line validation failed');
|
|
69
|
-
end;
|
|
70
|
-
except
|
|
71
|
-
on E: Exception do begin
|
|
72
|
-
// Breakpoint here provides clear exception context
|
|
73
|
-
LogPostingException(GenJournalLine."Document No.", E.Message);
|
|
74
|
-
|
|
75
|
-
if E.Message.Contains('period') then begin
|
|
76
|
-
// Breakpoint here handles period-specific exceptions
|
|
77
|
-
HandlePeriodException(GenJournalLine);
|
|
78
|
-
end else begin
|
|
79
|
-
// Breakpoint here handles general posting exceptions
|
|
80
|
-
HandleGeneralPostingException(GenJournalLine, E);
|
|
81
|
-
end;
|
|
82
|
-
end;
|
|
83
|
-
end;
|
|
84
|
-
end;
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Loop Debugging with Compound Statements
|
|
88
|
-
|
|
89
|
-
### Clear Loop Iteration Boundaries
|
|
90
|
-
```al
|
|
91
|
-
local procedure ProcessItemBatch(var ItemBuffer: Record "Item Buffer")
|
|
92
|
-
var
|
|
93
|
-
ProcessedCount: Integer;
|
|
94
|
-
ErrorCount: Integer;
|
|
95
|
-
CurrentItem: Code[20];
|
|
96
|
-
begin
|
|
97
|
-
ProcessedCount := 0;
|
|
98
|
-
ErrorCount := 0;
|
|
99
|
-
|
|
100
|
-
if ItemBuffer.FindSet() then begin
|
|
101
|
-
// Breakpoint here confirms record set found
|
|
102
|
-
repeat
|
|
103
|
-
CurrentItem := ItemBuffer."No.";
|
|
104
|
-
|
|
105
|
-
// Breakpoint here shows current item being processed
|
|
106
|
-
if ValidateItemData(ItemBuffer) then begin
|
|
107
|
-
// Breakpoint here enters successful validation path
|
|
108
|
-
try
|
|
109
|
-
if UpdateItemCosts(ItemBuffer) then begin
|
|
110
|
-
// Breakpoint here confirms successful cost update
|
|
111
|
-
ProcessedCount += 1;
|
|
112
|
-
LogItemProcessed(CurrentItem);
|
|
113
|
-
end else begin
|
|
114
|
-
// Breakpoint here captures cost update failure
|
|
115
|
-
ErrorCount += 1;
|
|
116
|
-
LogItemError(CurrentItem, 'Cost update failed');
|
|
117
|
-
end;
|
|
118
|
-
except
|
|
119
|
-
on E: Exception do begin
|
|
120
|
-
// Breakpoint here captures processing exceptions
|
|
121
|
-
ErrorCount += 1;
|
|
122
|
-
LogItemException(CurrentItem, E.Message);
|
|
123
|
-
end;
|
|
124
|
-
end;
|
|
125
|
-
end else begin
|
|
126
|
-
// Breakpoint here captures validation failures
|
|
127
|
-
ErrorCount += 1;
|
|
128
|
-
LogItemValidationError(CurrentItem);
|
|
129
|
-
end;
|
|
130
|
-
until ItemBuffer.Next() = 0;
|
|
131
|
-
|
|
132
|
-
// Breakpoint here provides final processing summary
|
|
133
|
-
LogBatchSummary(ProcessedCount, ErrorCount);
|
|
134
|
-
end else begin
|
|
135
|
-
// Breakpoint here captures empty batch scenario
|
|
136
|
-
LogEmptyBatch();
|
|
137
|
-
end;
|
|
138
|
-
end;
|
|
139
|
-
```
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
# Custom Dimension Implementation Examples - AL Code Samples
|
|
2
|
-
|
|
3
|
-
## Standard Custom Dimensions Pattern
|
|
4
|
-
```al
|
|
5
|
-
codeunit 50110 "Custom Dimensions Examples"
|
|
6
|
-
{
|
|
7
|
-
// Example 1: Building comprehensive custom dimensions
|
|
8
|
-
procedure BuildStandardDimensions(): Dictionary of [Text, Text]
|
|
9
|
-
var
|
|
10
|
-
CustomDimensions: Dictionary of [Text, Text];
|
|
11
|
-
begin
|
|
12
|
-
// Core identification dimensions
|
|
13
|
-
CustomDimensions.Add('CompanyName', CompanyName());
|
|
14
|
-
CustomDimensions.Add('UserID', UserId());
|
|
15
|
-
CustomDimensions.Add('SessionID', Format(SessionId()));
|
|
16
|
-
|
|
17
|
-
// Environment context
|
|
18
|
-
CustomDimensions.Add('Environment', GetEnvironmentType());
|
|
19
|
-
CustomDimensions.Add('AppVersion', GetAppVersion());
|
|
20
|
-
CustomDimensions.Add('BCVersion', GetBCVersion());
|
|
21
|
-
|
|
22
|
-
// Temporal dimensions
|
|
23
|
-
CustomDimensions.Add('Timestamp', Format(CurrentDateTime, 0, 9));
|
|
24
|
-
CustomDimensions.Add('Date', Format(Today(), 0, '<Year4>-<Month,2>-<Day,2>'));
|
|
25
|
-
CustomDimensions.Add('Hour', Format(Time(), 0, '<Hours24>'));
|
|
26
|
-
|
|
27
|
-
exit(CustomDimensions);
|
|
28
|
-
end;
|
|
29
|
-
|
|
30
|
-
// Example 2: Business context dimensions
|
|
31
|
-
procedure BuildBusinessContextDimensions(CustomerNo: Code[20]; ItemNo: Code[20]): Dictionary of [Text, Text]
|
|
32
|
-
var
|
|
33
|
-
CustomDimensions: Dictionary of [Text, Text];
|
|
34
|
-
Customer: Record Customer;
|
|
35
|
-
Item: Record Item;
|
|
36
|
-
begin
|
|
37
|
-
CustomDimensions := BuildStandardDimensions();
|
|
38
|
-
|
|
39
|
-
// Customer context
|
|
40
|
-
if Customer.Get(CustomerNo) then begin
|
|
41
|
-
CustomDimensions.Add('CustomerNo', CustomerNo);
|
|
42
|
-
CustomDimensions.Add('CustomerGroup', Customer."Customer Posting Group");
|
|
43
|
-
CustomDimensions.Add('SalespersonCode', Customer."Salesperson Code");
|
|
44
|
-
CustomDimensions.Add('CountryRegion', Customer."Country/Region Code");
|
|
45
|
-
end;
|
|
46
|
-
|
|
47
|
-
// Item context
|
|
48
|
-
if Item.Get(ItemNo) then begin
|
|
49
|
-
CustomDimensions.Add('ItemNo', ItemNo);
|
|
50
|
-
CustomDimensions.Add('ItemCategory', Item."Item Category Code");
|
|
51
|
-
CustomDimensions.Add('ItemType', Format(Item.Type));
|
|
52
|
-
CustomDimensions.Add('UnitOfMeasure', Item."Base Unit of Measure");
|
|
53
|
-
end;
|
|
54
|
-
|
|
55
|
-
exit(CustomDimensions);
|
|
56
|
-
end;
|
|
57
|
-
|
|
58
|
-
// Helper methods
|
|
59
|
-
local procedure GetEnvironmentType(): Text
|
|
60
|
-
begin
|
|
61
|
-
exit('Production'); // Implement actual environment detection
|
|
62
|
-
end;
|
|
63
|
-
|
|
64
|
-
local procedure GetAppVersion(): Text
|
|
65
|
-
begin
|
|
66
|
-
exit('1.0.0.0'); // Implement actual version detection
|
|
67
|
-
end;
|
|
68
|
-
|
|
69
|
-
local procedure GetBCVersion(): Text
|
|
70
|
-
begin
|
|
71
|
-
exit('24.0'); // Implement actual BC version detection
|
|
72
|
-
end;
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## Performance-Optimized Dimension Patterns
|
|
77
|
-
```al
|
|
78
|
-
codeunit 50111 "Optimized Dimension Builder"
|
|
79
|
-
{
|
|
80
|
-
var
|
|
81
|
-
CachedDimensions: Dictionary of [Text, Text];
|
|
82
|
-
LastCacheTime: DateTime;
|
|
83
|
-
CacheValidityMinutes: Integer;
|
|
84
|
-
|
|
85
|
-
// Example 3: Cached dimension building for performance
|
|
86
|
-
procedure GetCachedStandardDimensions(): Dictionary of [Text, Text]
|
|
87
|
-
begin
|
|
88
|
-
if ShouldRefreshCache() then
|
|
89
|
-
RefreshCachedDimensions();
|
|
90
|
-
|
|
91
|
-
exit(CachedDimensions);
|
|
92
|
-
end;
|
|
93
|
-
|
|
94
|
-
local procedure ShouldRefreshCache(): Boolean
|
|
95
|
-
begin
|
|
96
|
-
if LastCacheTime = 0DT then
|
|
97
|
-
exit(true);
|
|
98
|
-
|
|
99
|
-
exit(CurrentDateTime - LastCacheTime > CacheValidityMinutes * 60000);
|
|
100
|
-
end;
|
|
101
|
-
|
|
102
|
-
local procedure RefreshCachedDimensions()
|
|
103
|
-
begin
|
|
104
|
-
CachedDimensions.Clear();
|
|
105
|
-
|
|
106
|
-
// Cache static dimensions that don't change frequently
|
|
107
|
-
CachedDimensions.Add('CompanyName', CompanyName());
|
|
108
|
-
CachedDimensions.Add('Environment', 'Production');
|
|
109
|
-
CachedDimensions.Add('AppVersion', '1.0.0.0');
|
|
110
|
-
CachedDimensions.Add('BCVersion', '24.0');
|
|
111
|
-
|
|
112
|
-
LastCacheTime := CurrentDateTime;
|
|
113
|
-
end;
|
|
114
|
-
|
|
115
|
-
// Example 4: Conditional dimension building
|
|
116
|
-
procedure BuildConditionalDimensions(IncludeDetailed: Boolean; IncludePerformance: Boolean): Dictionary of [Text, Text]
|
|
117
|
-
var
|
|
118
|
-
CustomDimensions: Dictionary of [Text, Text];
|
|
119
|
-
begin
|
|
120
|
-
CustomDimensions := GetCachedStandardDimensions();
|
|
121
|
-
|
|
122
|
-
// Always include dynamic dimensions
|
|
123
|
-
CustomDimensions.Add('UserID', UserId());
|
|
124
|
-
CustomDimensions.Add('Timestamp', Format(CurrentDateTime, 0, 9));
|
|
125
|
-
|
|
126
|
-
if IncludeDetailed then begin
|
|
127
|
-
CustomDimensions.Add('SessionID', Format(SessionId()));
|
|
128
|
-
CustomDimensions.Add('ClientType', Format(ClientType()));
|
|
129
|
-
CustomDimensions.Add('LanguageID', Format(GlobalLanguage()));
|
|
130
|
-
end;
|
|
131
|
-
|
|
132
|
-
if IncludePerformance then begin
|
|
133
|
-
CustomDimensions.Add('MemoryUsage', 'Unknown');
|
|
134
|
-
CustomDimensions.Add('CPUTime', 'Unknown');
|
|
135
|
-
end;
|
|
136
|
-
|
|
137
|
-
exit(CustomDimensions);
|
|
138
|
-
end;
|
|
139
|
-
}
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## Domain-Specific Dimension Patterns
|
|
143
|
-
```al
|
|
144
|
-
codeunit 50112 "Domain Telemetry Dimensions"
|
|
145
|
-
{
|
|
146
|
-
// Example 5: Sales process dimensions
|
|
147
|
-
procedure BuildSalesDimensions(SalesHeader: Record "Sales Header"): Dictionary of [Text, Text]
|
|
148
|
-
var
|
|
149
|
-
CustomDimensions: Dictionary of [Text, Text];
|
|
150
|
-
Customer: Record Customer;
|
|
151
|
-
Salesperson: Record "Salesperson/Purchaser";
|
|
152
|
-
begin
|
|
153
|
-
CustomDimensions.Add('Domain', 'Sales');
|
|
154
|
-
CustomDimensions.Add('DocumentType', Format(SalesHeader."Document Type"));
|
|
155
|
-
CustomDimensions.Add('DocumentNo', SalesHeader."No.");
|
|
156
|
-
CustomDimensions.Add('CustomerNo', SalesHeader."Sell-to Customer No.");
|
|
157
|
-
|
|
158
|
-
if Customer.Get(SalesHeader."Sell-to Customer No.") then begin
|
|
159
|
-
CustomDimensions.Add('CustomerGroup', Customer."Customer Posting Group");
|
|
160
|
-
CustomDimensions.Add('PaymentTerms', Customer."Payment Terms Code");
|
|
161
|
-
CustomDimensions.Add('CustomerSize', ClassifyCustomerSize(Customer."Credit Limit (LCY)"));
|
|
162
|
-
end;
|
|
163
|
-
|
|
164
|
-
if Salesperson.Get(SalesHeader."Salesperson Code") then
|
|
165
|
-
CustomDimensions.Add('SalespersonName', Salesperson.Name);
|
|
166
|
-
|
|
167
|
-
// Financial dimensions
|
|
168
|
-
CustomDimensions.Add('CurrencyCode', SalesHeader."Currency Code");
|
|
169
|
-
CustomDimensions.Add('AmountLCY', Format(SalesHeader."Amount Including VAT"));
|
|
170
|
-
CustomDimensions.Add('PriceGroup', SalesHeader."Customer Price Group");
|
|
171
|
-
|
|
172
|
-
exit(CustomDimensions);
|
|
173
|
-
end;
|
|
174
|
-
|
|
175
|
-
// Helper function for customer classification
|
|
176
|
-
local procedure ClassifyCustomerSize(CreditLimit: Decimal): Text
|
|
177
|
-
begin
|
|
178
|
-
case true of
|
|
179
|
-
CreditLimit >= 1000000:
|
|
180
|
-
exit('Enterprise');
|
|
181
|
-
CreditLimit >= 100000:
|
|
182
|
-
exit('Large');
|
|
183
|
-
CreditLimit >= 10000:
|
|
184
|
-
exit('Medium');
|
|
185
|
-
else
|
|
186
|
-
exit('Small');
|
|
187
|
-
end;
|
|
188
|
-
end;
|
|
189
|
-
}
|
|
190
|
-
```
|