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,696 +0,0 @@
|
|
|
1
|
-
# Facade Pattern AL Implementation - Code Examples
|
|
2
|
-
|
|
3
|
-
This sample demonstrates implementing facade patterns to simplify complex subsystems in Business Central.
|
|
4
|
-
|
|
5
|
-
## Basic Facade Interface
|
|
6
|
-
|
|
7
|
-
```al
|
|
8
|
-
// Simple customer management facade
|
|
9
|
-
codeunit 50400 "Customer Management Facade"
|
|
10
|
-
{
|
|
11
|
-
procedure CreateCustomer(CustomerData: Dictionary of [Text, Variant]): Code[20]
|
|
12
|
-
var
|
|
13
|
-
Customer: Record Customer;
|
|
14
|
-
CustomerNo: Code[20];
|
|
15
|
-
begin
|
|
16
|
-
CustomerNo := CreateNewCustomer(CustomerData);
|
|
17
|
-
SetupCustomerDefaults(CustomerNo);
|
|
18
|
-
InitializeCustomerRelationships(CustomerNo);
|
|
19
|
-
|
|
20
|
-
exit(CustomerNo);
|
|
21
|
-
end;
|
|
22
|
-
|
|
23
|
-
procedure ProcessCustomerOrder(CustomerNo: Code[20]; OrderData: Dictionary of [Text, Variant]): Code[20]
|
|
24
|
-
var
|
|
25
|
-
SalesOrderNo: Code[20];
|
|
26
|
-
begin
|
|
27
|
-
ValidateCustomerEligibility(CustomerNo);
|
|
28
|
-
SalesOrderNo := CreateSalesOrder(CustomerNo, OrderData);
|
|
29
|
-
ApplyCustomerDiscounts(SalesOrderNo);
|
|
30
|
-
SetupOrderApprovals(SalesOrderNo);
|
|
31
|
-
|
|
32
|
-
exit(SalesOrderNo);
|
|
33
|
-
end;
|
|
34
|
-
|
|
35
|
-
procedure GetCustomerAnalytics(CustomerNo: Code[20]): Dictionary of [Text, Variant]
|
|
36
|
-
var
|
|
37
|
-
Analytics: Dictionary of [Text, Variant];
|
|
38
|
-
begin
|
|
39
|
-
Analytics := CalculateCustomerMetrics(CustomerNo);
|
|
40
|
-
AddSalesHistory(CustomerNo, Analytics);
|
|
41
|
-
AddPaymentHistory(CustomerNo, Analytics);
|
|
42
|
-
AddCreditAnalysis(CustomerNo, Analytics);
|
|
43
|
-
|
|
44
|
-
exit(Analytics);
|
|
45
|
-
end;
|
|
46
|
-
|
|
47
|
-
local procedure CreateNewCustomer(CustomerData: Dictionary of [Text, Variant]): Code[20]
|
|
48
|
-
var
|
|
49
|
-
Customer: Record Customer;
|
|
50
|
-
CustomerName: Text[100];
|
|
51
|
-
ContactName: Text[100];
|
|
52
|
-
begin
|
|
53
|
-
Customer.Init();
|
|
54
|
-
Customer."No." := '';
|
|
55
|
-
Customer.Insert(true);
|
|
56
|
-
|
|
57
|
-
if CustomerData.Get('Name', CustomerName) then
|
|
58
|
-
Customer.Validate(Name, CustomerName);
|
|
59
|
-
|
|
60
|
-
if CustomerData.Get('Contact', ContactName) then
|
|
61
|
-
Customer.Validate(Contact, ContactName);
|
|
62
|
-
|
|
63
|
-
Customer.Modify(true);
|
|
64
|
-
exit(Customer."No.");
|
|
65
|
-
end;
|
|
66
|
-
|
|
67
|
-
local procedure SetupCustomerDefaults(CustomerNo: Code[20])
|
|
68
|
-
var
|
|
69
|
-
Customer: Record Customer;
|
|
70
|
-
begin
|
|
71
|
-
Customer.Get(CustomerNo);
|
|
72
|
-
Customer.Validate("Customer Posting Group", 'DOMESTIC');
|
|
73
|
-
Customer.Validate("Gen. Bus. Posting Group", 'DOMESTIC');
|
|
74
|
-
Customer.Validate("Payment Terms Code", '30 DAYS');
|
|
75
|
-
Customer.Modify(true);
|
|
76
|
-
end;
|
|
77
|
-
|
|
78
|
-
local procedure InitializeCustomerRelationships(CustomerNo: Code[20])
|
|
79
|
-
begin
|
|
80
|
-
// Setup default contacts, ship-to addresses, etc.
|
|
81
|
-
CreateDefaultShipToAddress(CustomerNo);
|
|
82
|
-
AssignCustomerToSalesperson(CustomerNo);
|
|
83
|
-
end;
|
|
84
|
-
|
|
85
|
-
local procedure ValidateCustomerEligibility(CustomerNo: Code[20])
|
|
86
|
-
var
|
|
87
|
-
Customer: Record Customer;
|
|
88
|
-
begin
|
|
89
|
-
Customer.Get(CustomerNo);
|
|
90
|
-
if Customer.Blocked <> Customer.Blocked::" " then
|
|
91
|
-
Error('Customer %1 is blocked and cannot place orders', CustomerNo);
|
|
92
|
-
|
|
93
|
-
CheckCreditLimit(Customer);
|
|
94
|
-
end;
|
|
95
|
-
|
|
96
|
-
local procedure CreateSalesOrder(CustomerNo: Code[20]; OrderData: Dictionary of [Text, Variant]): Code[20]
|
|
97
|
-
var
|
|
98
|
-
SalesHeader: Record "Sales Header";
|
|
99
|
-
Items: List of [Dictionary of [Text, Variant]];
|
|
100
|
-
ItemData: Dictionary of [Text, Variant];
|
|
101
|
-
begin
|
|
102
|
-
// Create sales header
|
|
103
|
-
SalesHeader.Init();
|
|
104
|
-
SalesHeader."Document Type" := SalesHeader."Document Type"::Order;
|
|
105
|
-
SalesHeader."No." := '';
|
|
106
|
-
SalesHeader.Insert(true);
|
|
107
|
-
SalesHeader.Validate("Sell-to Customer No.", CustomerNo);
|
|
108
|
-
SalesHeader.Modify(true);
|
|
109
|
-
|
|
110
|
-
// Add lines from order data
|
|
111
|
-
if OrderData.Get('Items', Items) then begin
|
|
112
|
-
foreach ItemData in Items do
|
|
113
|
-
CreateSalesLine(SalesHeader, ItemData);
|
|
114
|
-
end;
|
|
115
|
-
|
|
116
|
-
exit(SalesHeader."No.");
|
|
117
|
-
end;
|
|
118
|
-
|
|
119
|
-
local procedure CreateSalesLine(var SalesHeader: Record "Sales Header"; ItemData: Dictionary of [Text, Variant])
|
|
120
|
-
var
|
|
121
|
-
SalesLine: Record "Sales Line";
|
|
122
|
-
ItemNo: Code[20];
|
|
123
|
-
Quantity: Decimal;
|
|
124
|
-
NextLineNo: Integer;
|
|
125
|
-
begin
|
|
126
|
-
NextLineNo := GetNextLineNo(SalesHeader);
|
|
127
|
-
|
|
128
|
-
SalesLine.Init();
|
|
129
|
-
SalesLine."Document Type" := SalesHeader."Document Type";
|
|
130
|
-
SalesLine."Document No." := SalesHeader."No.";
|
|
131
|
-
SalesLine."Line No." := NextLineNo;
|
|
132
|
-
SalesLine.Insert(true);
|
|
133
|
-
|
|
134
|
-
if ItemData.Get('ItemNo', ItemNo) then
|
|
135
|
-
SalesLine.Validate("No.", ItemNo);
|
|
136
|
-
|
|
137
|
-
if ItemData.Get('Quantity', Quantity) then
|
|
138
|
-
SalesLine.Validate(Quantity, Quantity);
|
|
139
|
-
|
|
140
|
-
SalesLine.Modify(true);
|
|
141
|
-
end;
|
|
142
|
-
|
|
143
|
-
local procedure CalculateCustomerMetrics(CustomerNo: Code[20]): Dictionary of [Text, Variant]
|
|
144
|
-
var
|
|
145
|
-
Metrics: Dictionary of [Text, Variant];
|
|
146
|
-
Customer: Record Customer;
|
|
147
|
-
TotalSales: Decimal;
|
|
148
|
-
OrderCount: Integer;
|
|
149
|
-
begin
|
|
150
|
-
Customer.Get(CustomerNo);
|
|
151
|
-
Customer.CalcFields("Sales (LCY)", "Balance (LCY)");
|
|
152
|
-
|
|
153
|
-
Metrics.Set('TotalSales', Customer."Sales (LCY)");
|
|
154
|
-
Metrics.Set('CurrentBalance', Customer."Balance (LCY)");
|
|
155
|
-
Metrics.Set('CreditLimit', Customer."Credit Limit (LCY)");
|
|
156
|
-
Metrics.Set('LastOrderDate', GetLastOrderDate(CustomerNo));
|
|
157
|
-
Metrics.Set('OrderCount', GetOrderCount(CustomerNo));
|
|
158
|
-
|
|
159
|
-
exit(Metrics);
|
|
160
|
-
end;
|
|
161
|
-
|
|
162
|
-
// Additional helper procedures...
|
|
163
|
-
local procedure CreateDefaultShipToAddress(CustomerNo: Code[20])
|
|
164
|
-
begin
|
|
165
|
-
// Implementation for default ship-to address
|
|
166
|
-
end;
|
|
167
|
-
|
|
168
|
-
local procedure AssignCustomerToSalesperson(CustomerNo: Code[20])
|
|
169
|
-
begin
|
|
170
|
-
// Implementation for salesperson assignment
|
|
171
|
-
end;
|
|
172
|
-
|
|
173
|
-
local procedure CheckCreditLimit(Customer: Record Customer)
|
|
174
|
-
begin
|
|
175
|
-
// Implementation for credit limit checking
|
|
176
|
-
end;
|
|
177
|
-
|
|
178
|
-
local procedure ApplyCustomerDiscounts(SalesOrderNo: Code[20])
|
|
179
|
-
begin
|
|
180
|
-
// Implementation for discount application
|
|
181
|
-
end;
|
|
182
|
-
|
|
183
|
-
local procedure SetupOrderApprovals(SalesOrderNo: Code[20])
|
|
184
|
-
begin
|
|
185
|
-
// Implementation for approval workflow setup
|
|
186
|
-
end;
|
|
187
|
-
|
|
188
|
-
local procedure AddSalesHistory(CustomerNo: Code[20]; var Analytics: Dictionary of [Text, Variant])
|
|
189
|
-
begin
|
|
190
|
-
// Implementation for sales history analysis
|
|
191
|
-
end;
|
|
192
|
-
|
|
193
|
-
local procedure AddPaymentHistory(CustomerNo: Code[20]; var Analytics: Dictionary of [Text, Variant])
|
|
194
|
-
begin
|
|
195
|
-
// Implementation for payment history analysis
|
|
196
|
-
end;
|
|
197
|
-
|
|
198
|
-
local procedure AddCreditAnalysis(CustomerNo: Code[20]; var Analytics: Dictionary of [Text, Variant])
|
|
199
|
-
begin
|
|
200
|
-
// Implementation for credit analysis
|
|
201
|
-
end;
|
|
202
|
-
|
|
203
|
-
local procedure GetNextLineNo(SalesHeader: Record "Sales Header"): Integer
|
|
204
|
-
var
|
|
205
|
-
SalesLine: Record "Sales Line";
|
|
206
|
-
begin
|
|
207
|
-
SalesLine.SetRange("Document Type", SalesHeader."Document Type");
|
|
208
|
-
SalesLine.SetRange("Document No.", SalesHeader."No.");
|
|
209
|
-
if SalesLine.FindLast() then
|
|
210
|
-
exit(SalesLine."Line No." + 10000)
|
|
211
|
-
else
|
|
212
|
-
exit(10000);
|
|
213
|
-
end;
|
|
214
|
-
|
|
215
|
-
local procedure GetLastOrderDate(CustomerNo: Code[20]): Date
|
|
216
|
-
var
|
|
217
|
-
SalesHeader: Record "Sales Header";
|
|
218
|
-
begin
|
|
219
|
-
SalesHeader.SetRange("Sell-to Customer No.", CustomerNo);
|
|
220
|
-
SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
|
|
221
|
-
if SalesHeader.FindLast() then
|
|
222
|
-
exit(SalesHeader."Order Date");
|
|
223
|
-
|
|
224
|
-
exit(0D);
|
|
225
|
-
end;
|
|
226
|
-
|
|
227
|
-
local procedure GetOrderCount(CustomerNo: Code[20]): Integer
|
|
228
|
-
var
|
|
229
|
-
SalesHeader: Record "Sales Header";
|
|
230
|
-
begin
|
|
231
|
-
SalesHeader.SetRange("Sell-to Customer No.", CustomerNo);
|
|
232
|
-
SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
|
|
233
|
-
exit(SalesHeader.Count);
|
|
234
|
-
end;
|
|
235
|
-
}
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
## Integration Facade
|
|
239
|
-
|
|
240
|
-
```al
|
|
241
|
-
// Facade for external system integration
|
|
242
|
-
codeunit 50401 "External Integration Facade"
|
|
243
|
-
{
|
|
244
|
-
var
|
|
245
|
-
HttpClient: HttpClient;
|
|
246
|
-
BaseUrl: Text;
|
|
247
|
-
|
|
248
|
-
procedure SynchronizeCustomer(CustomerNo: Code[20]): Boolean
|
|
249
|
-
var
|
|
250
|
-
CustomerData: Dictionary of [Text, Variant];
|
|
251
|
-
SyncResult: Boolean;
|
|
252
|
-
begin
|
|
253
|
-
CustomerData := ExtractCustomerData(CustomerNo);
|
|
254
|
-
SyncResult := SendCustomerToExternalSystem(CustomerData);
|
|
255
|
-
|
|
256
|
-
if SyncResult then
|
|
257
|
-
UpdateSynchronizationStatus(CustomerNo, true)
|
|
258
|
-
else
|
|
259
|
-
LogSynchronizationError(CustomerNo);
|
|
260
|
-
|
|
261
|
-
exit(SyncResult);
|
|
262
|
-
end;
|
|
263
|
-
|
|
264
|
-
procedure ImportExternalOrders(): Integer
|
|
265
|
-
var
|
|
266
|
-
ExternalOrders: List of [Dictionary of [Text, Variant]];
|
|
267
|
-
OrderData: Dictionary of [Text, Variant];
|
|
268
|
-
ImportedCount: Integer;
|
|
269
|
-
CustomerFacade: Codeunit "Customer Management Facade";
|
|
270
|
-
begin
|
|
271
|
-
ExternalOrders := FetchOrdersFromExternalSystem();
|
|
272
|
-
ImportedCount := 0;
|
|
273
|
-
|
|
274
|
-
foreach OrderData in ExternalOrders do begin
|
|
275
|
-
if ProcessExternalOrder(OrderData, CustomerFacade) then
|
|
276
|
-
ImportedCount += 1;
|
|
277
|
-
end;
|
|
278
|
-
|
|
279
|
-
exit(ImportedCount);
|
|
280
|
-
end;
|
|
281
|
-
|
|
282
|
-
procedure ExportInventoryLevels(): Boolean
|
|
283
|
-
var
|
|
284
|
-
InventoryData: List of [Dictionary of [Text, Variant]];
|
|
285
|
-
ExportResult: Boolean;
|
|
286
|
-
begin
|
|
287
|
-
InventoryData := ExtractInventoryData();
|
|
288
|
-
ExportResult := SendInventoryToExternalSystem(InventoryData);
|
|
289
|
-
|
|
290
|
-
if ExportResult then
|
|
291
|
-
UpdateInventoryExportTimestamp();
|
|
292
|
-
|
|
293
|
-
exit(ExportResult);
|
|
294
|
-
end;
|
|
295
|
-
|
|
296
|
-
local procedure ExtractCustomerData(CustomerNo: Code[20]): Dictionary of [Text, Variant]
|
|
297
|
-
var
|
|
298
|
-
Customer: Record Customer;
|
|
299
|
-
CustomerData: Dictionary of [Text, Variant];
|
|
300
|
-
begin
|
|
301
|
-
Customer.Get(CustomerNo);
|
|
302
|
-
|
|
303
|
-
CustomerData.Set('CustomerNumber', Customer."No.");
|
|
304
|
-
CustomerData.Set('Name', Customer.Name);
|
|
305
|
-
CustomerData.Set('Address', Customer.Address);
|
|
306
|
-
CustomerData.Set('City', Customer.City);
|
|
307
|
-
CustomerData.Set('PostCode', Customer."Post Code");
|
|
308
|
-
CustomerData.Set('Country', Customer."Country/Region Code");
|
|
309
|
-
CustomerData.Set('PhoneNumber', Customer."Phone No.");
|
|
310
|
-
CustomerData.Set('Email', Customer."E-Mail");
|
|
311
|
-
CustomerData.Set('CreditLimit', Customer."Credit Limit (LCY)");
|
|
312
|
-
|
|
313
|
-
exit(CustomerData);
|
|
314
|
-
end;
|
|
315
|
-
|
|
316
|
-
local procedure SendCustomerToExternalSystem(CustomerData: Dictionary of [Text, Variant]): Boolean
|
|
317
|
-
var
|
|
318
|
-
JsonPayload: Text;
|
|
319
|
-
HttpContent: HttpContent;
|
|
320
|
-
HttpResponseMessage: HttpResponseMessage;
|
|
321
|
-
Headers: HttpHeaders;
|
|
322
|
-
begin
|
|
323
|
-
JsonPayload := ConvertToJson(CustomerData);
|
|
324
|
-
|
|
325
|
-
HttpContent.WriteFrom(JsonPayload);
|
|
326
|
-
HttpContent.GetHeaders(Headers);
|
|
327
|
-
Headers.Remove('Content-Type');
|
|
328
|
-
Headers.Add('Content-Type', 'application/json');
|
|
329
|
-
|
|
330
|
-
if HttpClient.Post(BaseUrl + '/api/customers', HttpContent, HttpResponseMessage) then
|
|
331
|
-
exit(HttpResponseMessage.IsSuccessStatusCode)
|
|
332
|
-
else
|
|
333
|
-
exit(false);
|
|
334
|
-
end;
|
|
335
|
-
|
|
336
|
-
local procedure FetchOrdersFromExternalSystem(): List of [Dictionary of [Text, Variant]]
|
|
337
|
-
var
|
|
338
|
-
HttpResponseMessage: HttpResponseMessage;
|
|
339
|
-
ResponseText: Text;
|
|
340
|
-
Orders: List of [Dictionary of [Text, Variant]];
|
|
341
|
-
begin
|
|
342
|
-
if HttpClient.Get(BaseUrl + '/api/orders', HttpResponseMessage) then begin
|
|
343
|
-
if HttpResponseMessage.IsSuccessStatusCode then begin
|
|
344
|
-
HttpResponseMessage.Content.ReadAs(ResponseText);
|
|
345
|
-
Orders := ParseOrdersFromJson(ResponseText);
|
|
346
|
-
end;
|
|
347
|
-
end;
|
|
348
|
-
|
|
349
|
-
exit(Orders);
|
|
350
|
-
end;
|
|
351
|
-
|
|
352
|
-
local procedure ProcessExternalOrder(OrderData: Dictionary of [Text, Variant]; CustomerFacade: Codeunit "Customer Management Facade"): Boolean
|
|
353
|
-
var
|
|
354
|
-
CustomerNo: Code[20];
|
|
355
|
-
OrderNo: Code[20];
|
|
356
|
-
begin
|
|
357
|
-
// Extract and validate customer
|
|
358
|
-
if not OrderData.Get('CustomerNumber', CustomerNo) then
|
|
359
|
-
exit(false);
|
|
360
|
-
|
|
361
|
-
if not CustomerExists(CustomerNo) then
|
|
362
|
-
CustomerNo := CreateCustomerFromOrderData(OrderData, CustomerFacade);
|
|
363
|
-
|
|
364
|
-
// Process the order
|
|
365
|
-
OrderNo := CustomerFacade.ProcessCustomerOrder(CustomerNo, OrderData);
|
|
366
|
-
|
|
367
|
-
exit(OrderNo <> '');
|
|
368
|
-
end;
|
|
369
|
-
|
|
370
|
-
local procedure ExtractInventoryData(): List of [Dictionary of [Text, Variant]]
|
|
371
|
-
var
|
|
372
|
-
Item: Record Item;
|
|
373
|
-
InventoryList: List of [Dictionary of [Text, Variant]];
|
|
374
|
-
ItemData: Dictionary of [Text, Variant];
|
|
375
|
-
begin
|
|
376
|
-
Item.SetRange(Blocked, false);
|
|
377
|
-
if Item.FindSet() then
|
|
378
|
-
repeat
|
|
379
|
-
Item.CalcFields(Inventory);
|
|
380
|
-
|
|
381
|
-
Clear(ItemData);
|
|
382
|
-
ItemData.Set('ItemNumber', Item."No.");
|
|
383
|
-
ItemData.Set('Description', Item.Description);
|
|
384
|
-
ItemData.Set('Inventory', Item.Inventory);
|
|
385
|
-
ItemData.Set('UnitOfMeasure', Item."Base Unit of Measure");
|
|
386
|
-
ItemData.Set('LastUpdated', CurrentDateTime);
|
|
387
|
-
|
|
388
|
-
InventoryList.Add(ItemData);
|
|
389
|
-
until Item.Next() = 0;
|
|
390
|
-
|
|
391
|
-
exit(InventoryList);
|
|
392
|
-
end;
|
|
393
|
-
|
|
394
|
-
local procedure SendInventoryToExternalSystem(InventoryData: List of [Dictionary of [Text, Variant]]): Boolean
|
|
395
|
-
var
|
|
396
|
-
JsonPayload: Text;
|
|
397
|
-
HttpContent: HttpContent;
|
|
398
|
-
HttpResponseMessage: HttpResponseMessage;
|
|
399
|
-
Headers: HttpHeaders;
|
|
400
|
-
begin
|
|
401
|
-
JsonPayload := ConvertInventoryToJson(InventoryData);
|
|
402
|
-
|
|
403
|
-
HttpContent.WriteFrom(JsonPayload);
|
|
404
|
-
HttpContent.GetHeaders(Headers);
|
|
405
|
-
Headers.Remove('Content-Type');
|
|
406
|
-
Headers.Add('Content-Type', 'application/json');
|
|
407
|
-
|
|
408
|
-
if HttpClient.Post(BaseUrl + '/api/inventory', HttpContent, HttpResponseMessage) then
|
|
409
|
-
exit(HttpResponseMessage.IsSuccessStatusCode)
|
|
410
|
-
else
|
|
411
|
-
exit(false);
|
|
412
|
-
end;
|
|
413
|
-
|
|
414
|
-
// Helper procedures
|
|
415
|
-
local procedure ConvertToJson(Data: Dictionary of [Text, Variant]): Text
|
|
416
|
-
begin
|
|
417
|
-
// JSON conversion implementation
|
|
418
|
-
exit('{}'); // Placeholder
|
|
419
|
-
end;
|
|
420
|
-
|
|
421
|
-
local procedure ParseOrdersFromJson(JsonText: Text): List of [Dictionary of [Text, Variant]]
|
|
422
|
-
var
|
|
423
|
-
Orders: List of [Dictionary of [Text, Variant]];
|
|
424
|
-
begin
|
|
425
|
-
// JSON parsing implementation
|
|
426
|
-
exit(Orders);
|
|
427
|
-
end;
|
|
428
|
-
|
|
429
|
-
local procedure ConvertInventoryToJson(InventoryData: List of [Dictionary of [Text, Variant]]): Text
|
|
430
|
-
begin
|
|
431
|
-
// JSON conversion for inventory data
|
|
432
|
-
exit('[]'); // Placeholder
|
|
433
|
-
end;
|
|
434
|
-
|
|
435
|
-
local procedure CustomerExists(CustomerNo: Code[20]): Boolean
|
|
436
|
-
var
|
|
437
|
-
Customer: Record Customer;
|
|
438
|
-
begin
|
|
439
|
-
exit(Customer.Get(CustomerNo));
|
|
440
|
-
end;
|
|
441
|
-
|
|
442
|
-
local procedure CreateCustomerFromOrderData(OrderData: Dictionary of [Text, Variant]; CustomerFacade: Codeunit "Customer Management Facade"): Code[20]
|
|
443
|
-
var
|
|
444
|
-
CustomerData: Dictionary of [Text, Variant];
|
|
445
|
-
begin
|
|
446
|
-
// Extract customer info from order data
|
|
447
|
-
CustomerData.Set('Name', OrderData.Get('CustomerName'));
|
|
448
|
-
CustomerData.Set('Contact', OrderData.Get('ContactName'));
|
|
449
|
-
|
|
450
|
-
exit(CustomerFacade.CreateCustomer(CustomerData));
|
|
451
|
-
end;
|
|
452
|
-
|
|
453
|
-
local procedure UpdateSynchronizationStatus(CustomerNo: Code[20]; Success: Boolean)
|
|
454
|
-
begin
|
|
455
|
-
// Update sync status tracking
|
|
456
|
-
end;
|
|
457
|
-
|
|
458
|
-
local procedure LogSynchronizationError(CustomerNo: Code[20])
|
|
459
|
-
begin
|
|
460
|
-
// Log sync errors for troubleshooting
|
|
461
|
-
end;
|
|
462
|
-
|
|
463
|
-
local procedure UpdateInventoryExportTimestamp()
|
|
464
|
-
begin
|
|
465
|
-
// Update last export timestamp
|
|
466
|
-
end;
|
|
467
|
-
}
|
|
468
|
-
```
|
|
469
|
-
|
|
470
|
-
## Multi-Layer Business Process Facade
|
|
471
|
-
|
|
472
|
-
```al
|
|
473
|
-
// Complex facade coordinating multiple business processes
|
|
474
|
-
codeunit 50402 "Sales Process Facade"
|
|
475
|
-
{
|
|
476
|
-
var
|
|
477
|
-
CustomerFacade: Codeunit "Customer Management Facade";
|
|
478
|
-
IntegrationFacade: Codeunit "External Integration Facade";
|
|
479
|
-
|
|
480
|
-
procedure ProcessCompleteOrder(OrderRequest: Dictionary of [Text, Variant]): Dictionary of [Text, Variant]
|
|
481
|
-
var
|
|
482
|
-
ProcessingResult: Dictionary of [Text, Variant];
|
|
483
|
-
CustomerNo: Code[20];
|
|
484
|
-
OrderNo: Code[20];
|
|
485
|
-
ProcessingSteps: List of [Text];
|
|
486
|
-
begin
|
|
487
|
-
ProcessingSteps.Add('Validate Customer');
|
|
488
|
-
ProcessingSteps.Add('Create/Update Customer');
|
|
489
|
-
ProcessingSteps.Add('Process Order');
|
|
490
|
-
ProcessingSteps.Add('Apply Business Rules');
|
|
491
|
-
ProcessingSteps.Add('External Synchronization');
|
|
492
|
-
ProcessingSteps.Add('Generate Confirmations');
|
|
493
|
-
|
|
494
|
-
ProcessingResult.Set('Steps', ProcessingSteps);
|
|
495
|
-
ProcessingResult.Set('StartTime', CurrentDateTime);
|
|
496
|
-
|
|
497
|
-
try
|
|
498
|
-
// Step 1: Customer handling
|
|
499
|
-
CustomerNo := HandleCustomerProcess(OrderRequest, ProcessingResult);
|
|
500
|
-
|
|
501
|
-
// Step 2: Order processing
|
|
502
|
-
OrderNo := HandleOrderProcess(CustomerNo, OrderRequest, ProcessingResult);
|
|
503
|
-
|
|
504
|
-
// Step 3: Business rules and approvals
|
|
505
|
-
HandleBusinessRulesProcess(OrderNo, ProcessingResult);
|
|
506
|
-
|
|
507
|
-
// Step 4: External integration
|
|
508
|
-
HandleExternalIntegration(CustomerNo, OrderNo, ProcessingResult);
|
|
509
|
-
|
|
510
|
-
// Step 5: Confirmations and notifications
|
|
511
|
-
HandleConfirmationProcess(OrderNo, ProcessingResult);
|
|
512
|
-
|
|
513
|
-
ProcessingResult.Set('Success', true);
|
|
514
|
-
ProcessingResult.Set('OrderNumber', OrderNo);
|
|
515
|
-
ProcessingResult.Set('CustomerNumber', CustomerNo);
|
|
516
|
-
|
|
517
|
-
except
|
|
518
|
-
ProcessingResult.Set('Success', false);
|
|
519
|
-
ProcessingResult.Set('Error', GetLastErrorText);
|
|
520
|
-
end;
|
|
521
|
-
|
|
522
|
-
ProcessingResult.Set('EndTime', CurrentDateTime);
|
|
523
|
-
exit(ProcessingResult);
|
|
524
|
-
end;
|
|
525
|
-
|
|
526
|
-
procedure GetOrderStatus(OrderNo: Code[20]): Dictionary of [Text, Variant]
|
|
527
|
-
var
|
|
528
|
-
StatusInfo: Dictionary of [Text, Variant];
|
|
529
|
-
SalesHeader: Record "Sales Header";
|
|
530
|
-
begin
|
|
531
|
-
if SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo) then begin
|
|
532
|
-
StatusInfo.Set('OrderNumber', OrderNo);
|
|
533
|
-
StatusInfo.Set('Status', Format(SalesHeader.Status));
|
|
534
|
-
StatusInfo.Set('CustomerNumber', SalesHeader."Sell-to Customer No.");
|
|
535
|
-
StatusInfo.Set('OrderDate', SalesHeader."Order Date");
|
|
536
|
-
StatusInfo.Set('Amount', SalesHeader."Amount Including VAT");
|
|
537
|
-
StatusInfo.Set('PaymentTerms', SalesHeader."Payment Terms Code");
|
|
538
|
-
|
|
539
|
-
// Add processing history
|
|
540
|
-
AddProcessingHistory(OrderNo, StatusInfo);
|
|
541
|
-
end else begin
|
|
542
|
-
StatusInfo.Set('Found', false);
|
|
543
|
-
StatusInfo.Set('Error', 'Order not found');
|
|
544
|
-
end;
|
|
545
|
-
|
|
546
|
-
exit(StatusInfo);
|
|
547
|
-
end;
|
|
548
|
-
|
|
549
|
-
local procedure HandleCustomerProcess(OrderRequest: Dictionary of [Text, Variant]; var ProcessingResult: Dictionary of [Text, Variant]): Code[20]
|
|
550
|
-
var
|
|
551
|
-
CustomerNo: Code[20];
|
|
552
|
-
CustomerData: Dictionary of [Text, Variant];
|
|
553
|
-
begin
|
|
554
|
-
ProcessingResult.Set('CurrentStep', 'Processing Customer');
|
|
555
|
-
|
|
556
|
-
if OrderRequest.Get('CustomerNumber', CustomerNo) then begin
|
|
557
|
-
if not CustomerExists(CustomerNo) then begin
|
|
558
|
-
ExtractCustomerDataFromOrder(OrderRequest, CustomerData);
|
|
559
|
-
CustomerNo := CustomerFacade.CreateCustomer(CustomerData);
|
|
560
|
-
ProcessingResult.Set('CustomerCreated', true);
|
|
561
|
-
end else begin
|
|
562
|
-
ProcessingResult.Set('CustomerCreated', false);
|
|
563
|
-
end;
|
|
564
|
-
end else begin
|
|
565
|
-
Error('Customer number is required for order processing');
|
|
566
|
-
end;
|
|
567
|
-
|
|
568
|
-
ProcessingResult.Set('CustomerNumber', CustomerNo);
|
|
569
|
-
exit(CustomerNo);
|
|
570
|
-
end;
|
|
571
|
-
|
|
572
|
-
local procedure HandleOrderProcess(CustomerNo: Code[20]; OrderRequest: Dictionary of [Text, Variant]; var ProcessingResult: Dictionary of [Text, Variant]): Code[20]
|
|
573
|
-
var
|
|
574
|
-
OrderNo: Code[20];
|
|
575
|
-
begin
|
|
576
|
-
ProcessingResult.Set('CurrentStep', 'Processing Order');
|
|
577
|
-
|
|
578
|
-
OrderNo := CustomerFacade.ProcessCustomerOrder(CustomerNo, OrderRequest);
|
|
579
|
-
|
|
580
|
-
if OrderNo <> '' then begin
|
|
581
|
-
ProcessingResult.Set('OrderCreated', true);
|
|
582
|
-
ProcessingResult.Set('OrderNumber', OrderNo);
|
|
583
|
-
end else begin
|
|
584
|
-
Error('Failed to create sales order');
|
|
585
|
-
end;
|
|
586
|
-
|
|
587
|
-
exit(OrderNo);
|
|
588
|
-
end;
|
|
589
|
-
|
|
590
|
-
local procedure HandleBusinessRulesProcess(OrderNo: Code[20]; var ProcessingResult: Dictionary of [Text, Variant])
|
|
591
|
-
var
|
|
592
|
-
ApprovalRequired: Boolean;
|
|
593
|
-
CreditCheckPassed: Boolean;
|
|
594
|
-
begin
|
|
595
|
-
ProcessingResult.Set('CurrentStep', 'Applying Business Rules');
|
|
596
|
-
|
|
597
|
-
// Check if approval is required
|
|
598
|
-
ApprovalRequired := CheckApprovalRequirement(OrderNo);
|
|
599
|
-
ProcessingResult.Set('ApprovalRequired', ApprovalRequired);
|
|
600
|
-
|
|
601
|
-
// Perform credit check
|
|
602
|
-
CreditCheckPassed := PerformCreditCheck(OrderNo);
|
|
603
|
-
ProcessingResult.Set('CreditCheckPassed', CreditCheckPassed);
|
|
604
|
-
|
|
605
|
-
if ApprovalRequired then
|
|
606
|
-
InitiateApprovalWorkflow(OrderNo);
|
|
607
|
-
|
|
608
|
-
if not CreditCheckPassed then
|
|
609
|
-
Error('Credit check failed for order %1', OrderNo);
|
|
610
|
-
end;
|
|
611
|
-
|
|
612
|
-
local procedure HandleExternalIntegration(CustomerNo: Code[20]; OrderNo: Code[20]; var ProcessingResult: Dictionary of [Text, Variant])
|
|
613
|
-
var
|
|
614
|
-
SyncResult: Boolean;
|
|
615
|
-
begin
|
|
616
|
-
ProcessingResult.Set('CurrentStep', 'External Synchronization');
|
|
617
|
-
|
|
618
|
-
// Synchronize customer with external system
|
|
619
|
-
SyncResult := IntegrationFacade.SynchronizeCustomer(CustomerNo);
|
|
620
|
-
ProcessingResult.Set('CustomerSyncSuccess', SyncResult);
|
|
621
|
-
|
|
622
|
-
// Additional integration as needed
|
|
623
|
-
ProcessingResult.Set('ExternalIntegrationCompleted', true);
|
|
624
|
-
end;
|
|
625
|
-
|
|
626
|
-
local procedure HandleConfirmationProcess(OrderNo: Code[20]; var ProcessingResult: Dictionary of [Text, Variant])
|
|
627
|
-
begin
|
|
628
|
-
ProcessingResult.Set('CurrentStep', 'Generating Confirmations');
|
|
629
|
-
|
|
630
|
-
SendOrderConfirmation(OrderNo);
|
|
631
|
-
NotifyWarehouse(OrderNo);
|
|
632
|
-
UpdateCustomerStatistics(OrderNo);
|
|
633
|
-
|
|
634
|
-
ProcessingResult.Set('ConfirmationsGenerated', true);
|
|
635
|
-
end;
|
|
636
|
-
|
|
637
|
-
// Additional helper procedures...
|
|
638
|
-
local procedure CustomerExists(CustomerNo: Code[20]): Boolean
|
|
639
|
-
var
|
|
640
|
-
Customer: Record Customer;
|
|
641
|
-
begin
|
|
642
|
-
exit(Customer.Get(CustomerNo));
|
|
643
|
-
end;
|
|
644
|
-
|
|
645
|
-
local procedure ExtractCustomerDataFromOrder(OrderRequest: Dictionary of [Text, Variant]; var CustomerData: Dictionary of [Text, Variant])
|
|
646
|
-
begin
|
|
647
|
-
// Extract customer information from order request
|
|
648
|
-
CustomerData.Set('Name', OrderRequest.Get('CustomerName'));
|
|
649
|
-
CustomerData.Set('Contact', OrderRequest.Get('ContactName'));
|
|
650
|
-
CustomerData.Set('Address', OrderRequest.Get('CustomerAddress'));
|
|
651
|
-
end;
|
|
652
|
-
|
|
653
|
-
local procedure CheckApprovalRequirement(OrderNo: Code[20]): Boolean
|
|
654
|
-
var
|
|
655
|
-
SalesHeader: Record "Sales Header";
|
|
656
|
-
begin
|
|
657
|
-
if SalesHeader.Get(SalesHeader."Document Type"::Order, OrderNo) then
|
|
658
|
-
exit(SalesHeader."Amount Including VAT" > 10000); // Approval required for orders > 10,000
|
|
659
|
-
|
|
660
|
-
exit(false);
|
|
661
|
-
end;
|
|
662
|
-
|
|
663
|
-
local procedure PerformCreditCheck(OrderNo: Code[20]): Boolean
|
|
664
|
-
begin
|
|
665
|
-
// Credit check implementation
|
|
666
|
-
exit(true); // Simplified for example
|
|
667
|
-
end;
|
|
668
|
-
|
|
669
|
-
local procedure InitiateApprovalWorkflow(OrderNo: Code[20])
|
|
670
|
-
begin
|
|
671
|
-
// Approval workflow initiation
|
|
672
|
-
end;
|
|
673
|
-
|
|
674
|
-
local procedure SendOrderConfirmation(OrderNo: Code[20])
|
|
675
|
-
begin
|
|
676
|
-
// Order confirmation implementation
|
|
677
|
-
end;
|
|
678
|
-
|
|
679
|
-
local procedure NotifyWarehouse(OrderNo: Code[20])
|
|
680
|
-
begin
|
|
681
|
-
// Warehouse notification implementation
|
|
682
|
-
end;
|
|
683
|
-
|
|
684
|
-
local procedure UpdateCustomerStatistics(OrderNo: Code[20])
|
|
685
|
-
begin
|
|
686
|
-
// Customer statistics update implementation
|
|
687
|
-
end;
|
|
688
|
-
|
|
689
|
-
local procedure AddProcessingHistory(OrderNo: Code[20]; var StatusInfo: Dictionary of [Text, Variant])
|
|
690
|
-
begin
|
|
691
|
-
// Add processing history to status information
|
|
692
|
-
end;
|
|
693
|
-
}
|
|
694
|
-
```
|
|
695
|
-
|
|
696
|
-
This comprehensive facade implementation demonstrates how to simplify complex business processes by providing clean, unified interfaces that coordinate multiple subsystems while hiding implementation complexity from consumers.
|