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,516 +0,0 @@
|
|
|
1
|
-
# Template Method Pattern Sample
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
This sample demonstrates template method pattern implementation in AL including algorithm structure definition, customizable steps, and inheritance-based customization.
|
|
5
|
-
|
|
6
|
-
## Basic Template Method Pattern
|
|
7
|
-
|
|
8
|
-
```al
|
|
9
|
-
codeunit 50500 "Document Processing Template"
|
|
10
|
-
{
|
|
11
|
-
procedure ProcessDocument(var Document: Variant): Boolean
|
|
12
|
-
begin
|
|
13
|
-
if not ValidateDocument(Document) then
|
|
14
|
-
exit(false);
|
|
15
|
-
|
|
16
|
-
if not PreProcessDocument(Document) then
|
|
17
|
-
exit(false);
|
|
18
|
-
|
|
19
|
-
if not ExecuteMainProcessing(Document) then
|
|
20
|
-
exit(false);
|
|
21
|
-
|
|
22
|
-
if not PostProcessDocument(Document) then
|
|
23
|
-
exit(false);
|
|
24
|
-
|
|
25
|
-
if not FinalizeDocument(Document) then
|
|
26
|
-
exit(false);
|
|
27
|
-
|
|
28
|
-
exit(true);
|
|
29
|
-
end;
|
|
30
|
-
|
|
31
|
-
// Template methods (can be overridden by subclasses)
|
|
32
|
-
protected procedure ValidateDocument(var Document: Variant): Boolean
|
|
33
|
-
begin
|
|
34
|
-
// Default validation logic
|
|
35
|
-
exit(true);
|
|
36
|
-
end;
|
|
37
|
-
|
|
38
|
-
protected procedure PreProcessDocument(var Document: Variant): Boolean
|
|
39
|
-
begin
|
|
40
|
-
// Default pre-processing
|
|
41
|
-
exit(true);
|
|
42
|
-
end;
|
|
43
|
-
|
|
44
|
-
// Abstract method (must be implemented by subclasses)
|
|
45
|
-
protected procedure ExecuteMainProcessing(var Document: Variant): Boolean
|
|
46
|
-
begin
|
|
47
|
-
Error('ExecuteMainProcessing must be implemented by derived class');
|
|
48
|
-
end;
|
|
49
|
-
|
|
50
|
-
protected procedure PostProcessDocument(var Document: Variant): Boolean
|
|
51
|
-
begin
|
|
52
|
-
// Default post-processing
|
|
53
|
-
exit(true);
|
|
54
|
-
end;
|
|
55
|
-
|
|
56
|
-
protected procedure FinalizeDocument(var Document: Variant): Boolean
|
|
57
|
-
begin
|
|
58
|
-
// Default finalization
|
|
59
|
-
exit(true);
|
|
60
|
-
end;
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Sales Order Processing Template
|
|
65
|
-
|
|
66
|
-
```al
|
|
67
|
-
codeunit 50501 "Sales Order Processing" extends "Document Processing Template"
|
|
68
|
-
{
|
|
69
|
-
protected procedure ValidateDocument(var Document: Variant): Boolean
|
|
70
|
-
var
|
|
71
|
-
SalesHeader: Record "Sales Header";
|
|
72
|
-
begin
|
|
73
|
-
SalesHeader := Document;
|
|
74
|
-
|
|
75
|
-
if SalesHeader."Sell-to Customer No." = '' then
|
|
76
|
-
exit(false);
|
|
77
|
-
|
|
78
|
-
if not CustomerExists(SalesHeader."Sell-to Customer No.") then
|
|
79
|
-
exit(false);
|
|
80
|
-
|
|
81
|
-
if SalesHeader."Order Date" = 0D then
|
|
82
|
-
exit(false);
|
|
83
|
-
|
|
84
|
-
exit(true);
|
|
85
|
-
end;
|
|
86
|
-
|
|
87
|
-
protected procedure PreProcessDocument(var Document: Variant): Boolean
|
|
88
|
-
var
|
|
89
|
-
SalesHeader: Record "Sales Header";
|
|
90
|
-
SalesLine: Record "Sales Line";
|
|
91
|
-
begin
|
|
92
|
-
SalesHeader := Document;
|
|
93
|
-
|
|
94
|
-
// Apply default values
|
|
95
|
-
if SalesHeader."Posting Date" = 0D then
|
|
96
|
-
SalesHeader."Posting Date" := WorkDate();
|
|
97
|
-
|
|
98
|
-
// Initialize sales lines
|
|
99
|
-
SalesLine.SetRange("Document Type", SalesHeader."Document Type");
|
|
100
|
-
SalesLine.SetRange("Document No.", SalesHeader."No.");
|
|
101
|
-
if SalesLine.FindSet() then
|
|
102
|
-
repeat
|
|
103
|
-
PreProcessSalesLine(SalesLine);
|
|
104
|
-
until SalesLine.Next() = 0;
|
|
105
|
-
|
|
106
|
-
Document := SalesHeader;
|
|
107
|
-
exit(true);
|
|
108
|
-
end;
|
|
109
|
-
|
|
110
|
-
protected procedure ExecuteMainProcessing(var Document: Variant): Boolean
|
|
111
|
-
var
|
|
112
|
-
SalesHeader: Record "Sales Header";
|
|
113
|
-
SalesPost: Codeunit "Sales-Post";
|
|
114
|
-
begin
|
|
115
|
-
SalesHeader := Document;
|
|
116
|
-
|
|
117
|
-
// Execute the main sales processing
|
|
118
|
-
SalesHeader.Ship := true;
|
|
119
|
-
SalesHeader.Invoice := true;
|
|
120
|
-
|
|
121
|
-
if not SalesPost.Run(SalesHeader) then
|
|
122
|
-
exit(false);
|
|
123
|
-
|
|
124
|
-
Document := SalesHeader;
|
|
125
|
-
exit(true);
|
|
126
|
-
end;
|
|
127
|
-
|
|
128
|
-
protected procedure PostProcessDocument(var Document: Variant): Boolean
|
|
129
|
-
var
|
|
130
|
-
SalesHeader: Record "Sales Header";
|
|
131
|
-
begin
|
|
132
|
-
SalesHeader := Document;
|
|
133
|
-
|
|
134
|
-
// Send confirmation email
|
|
135
|
-
SendOrderConfirmation(SalesHeader);
|
|
136
|
-
|
|
137
|
-
// Update customer statistics
|
|
138
|
-
UpdateCustomerStatistics(SalesHeader);
|
|
139
|
-
|
|
140
|
-
// Notify warehouse
|
|
141
|
-
NotifyWarehouse(SalesHeader);
|
|
142
|
-
|
|
143
|
-
Document := SalesHeader;
|
|
144
|
-
exit(true);
|
|
145
|
-
end;
|
|
146
|
-
|
|
147
|
-
local procedure PreProcessSalesLine(var SalesLine: Record "Sales Line")
|
|
148
|
-
begin
|
|
149
|
-
// Calculate pricing
|
|
150
|
-
if SalesLine."Unit Price" = 0 then
|
|
151
|
-
SalesLine.Validate("Unit Price", GetItemPrice(SalesLine."No."));
|
|
152
|
-
|
|
153
|
-
// Apply discounts
|
|
154
|
-
ApplyLineDiscount(SalesLine);
|
|
155
|
-
|
|
156
|
-
SalesLine.Modify();
|
|
157
|
-
end;
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
## Purchase Order Processing Template
|
|
162
|
-
|
|
163
|
-
```al
|
|
164
|
-
codeunit 50502 "Purchase Order Processing" extends "Document Processing Template"
|
|
165
|
-
{
|
|
166
|
-
protected procedure ValidateDocument(var Document: Variant): Boolean
|
|
167
|
-
var
|
|
168
|
-
PurchaseHeader: Record "Purchase Header";
|
|
169
|
-
begin
|
|
170
|
-
PurchaseHeader := Document;
|
|
171
|
-
|
|
172
|
-
if PurchaseHeader."Buy-from Vendor No." = '' then
|
|
173
|
-
exit(false);
|
|
174
|
-
|
|
175
|
-
if not VendorExists(PurchaseHeader."Buy-from Vendor No.") then
|
|
176
|
-
exit(false);
|
|
177
|
-
|
|
178
|
-
if PurchaseHeader."Order Date" = 0D then
|
|
179
|
-
exit(false);
|
|
180
|
-
|
|
181
|
-
exit(true);
|
|
182
|
-
end;
|
|
183
|
-
|
|
184
|
-
protected procedure PreProcessDocument(var Document: Variant): Boolean
|
|
185
|
-
var
|
|
186
|
-
PurchaseHeader: Record "Purchase Header";
|
|
187
|
-
begin
|
|
188
|
-
PurchaseHeader := Document;
|
|
189
|
-
|
|
190
|
-
// Set expected receipt date
|
|
191
|
-
if PurchaseHeader."Expected Receipt Date" = 0D then
|
|
192
|
-
PurchaseHeader."Expected Receipt Date" := CalcDate('+7D', WorkDate());
|
|
193
|
-
|
|
194
|
-
// Apply vendor-specific defaults
|
|
195
|
-
ApplyVendorDefaults(PurchaseHeader);
|
|
196
|
-
|
|
197
|
-
Document := PurchaseHeader;
|
|
198
|
-
exit(true);
|
|
199
|
-
end;
|
|
200
|
-
|
|
201
|
-
protected procedure ExecuteMainProcessing(var Document: Variant): Boolean
|
|
202
|
-
var
|
|
203
|
-
PurchaseHeader: Record "Purchase Header";
|
|
204
|
-
PurchPost: Codeunit "Purch.-Post";
|
|
205
|
-
begin
|
|
206
|
-
PurchaseHeader := Document;
|
|
207
|
-
|
|
208
|
-
// Execute the main purchase processing
|
|
209
|
-
PurchaseHeader.Receive := true;
|
|
210
|
-
PurchaseHeader.Invoice := true;
|
|
211
|
-
|
|
212
|
-
if not PurchPost.Run(PurchaseHeader) then
|
|
213
|
-
exit(false);
|
|
214
|
-
|
|
215
|
-
Document := PurchaseHeader;
|
|
216
|
-
exit(true);
|
|
217
|
-
end;
|
|
218
|
-
|
|
219
|
-
protected procedure PostProcessDocument(var Document: Variant): Boolean
|
|
220
|
-
var
|
|
221
|
-
PurchaseHeader: Record "Purchase Header";
|
|
222
|
-
begin
|
|
223
|
-
PurchaseHeader := Document;
|
|
224
|
-
|
|
225
|
-
// Update inventory
|
|
226
|
-
UpdateInventoryLevels(PurchaseHeader);
|
|
227
|
-
|
|
228
|
-
// Send receipt confirmation
|
|
229
|
-
SendReceiptConfirmation(PurchaseHeader);
|
|
230
|
-
|
|
231
|
-
Document := PurchaseHeader;
|
|
232
|
-
exit(true);
|
|
233
|
-
end;
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Configurable Template Pattern
|
|
238
|
-
|
|
239
|
-
```al
|
|
240
|
-
codeunit 50503 "Configurable Process Template"
|
|
241
|
-
{
|
|
242
|
-
var
|
|
243
|
-
ProcessConfiguration: Record "Process Configuration";
|
|
244
|
-
|
|
245
|
-
procedure ProcessWithConfiguration(var Document: Variant; ConfigCode: Code[20]): Boolean
|
|
246
|
-
begin
|
|
247
|
-
LoadConfiguration(ConfigCode);
|
|
248
|
-
|
|
249
|
-
if ProcessConfiguration."Validate Documents" then
|
|
250
|
-
if not ValidateDocument(Document) then
|
|
251
|
-
exit(false);
|
|
252
|
-
|
|
253
|
-
if ProcessConfiguration."Enable Pre Processing" then
|
|
254
|
-
if not PreProcessDocument(Document) then
|
|
255
|
-
exit(false);
|
|
256
|
-
|
|
257
|
-
if not ExecuteMainProcessing(Document) then
|
|
258
|
-
exit(false);
|
|
259
|
-
|
|
260
|
-
if ProcessConfiguration."Enable Post Processing" then
|
|
261
|
-
if not PostProcessDocument(Document) then
|
|
262
|
-
exit(false);
|
|
263
|
-
|
|
264
|
-
if ProcessConfiguration."Auto Finalize" then
|
|
265
|
-
if not FinalizeDocument(Document) then
|
|
266
|
-
exit(false);
|
|
267
|
-
|
|
268
|
-
exit(true);
|
|
269
|
-
end;
|
|
270
|
-
|
|
271
|
-
protected procedure ExecuteMainProcessing(var Document: Variant): Boolean
|
|
272
|
-
var
|
|
273
|
-
ProcessingStrategy: Interface "Processing Strategy";
|
|
274
|
-
begin
|
|
275
|
-
ProcessingStrategy := GetProcessingStrategy();
|
|
276
|
-
exit(ProcessingStrategy.Process(Document));
|
|
277
|
-
end;
|
|
278
|
-
|
|
279
|
-
local procedure LoadConfiguration(ConfigCode: Code[20])
|
|
280
|
-
begin
|
|
281
|
-
if not ProcessConfiguration.Get(ConfigCode) then
|
|
282
|
-
Error('Process configuration %1 not found', ConfigCode);
|
|
283
|
-
end;
|
|
284
|
-
|
|
285
|
-
local procedure GetProcessingStrategy(): Interface "Processing Strategy"
|
|
286
|
-
var
|
|
287
|
-
StandardStrategy: Codeunit "Standard Processing Strategy";
|
|
288
|
-
FastStrategy: Codeunit "Fast Processing Strategy";
|
|
289
|
-
DetailedStrategy: Codeunit "Detailed Processing Strategy";
|
|
290
|
-
begin
|
|
291
|
-
case ProcessConfiguration."Processing Mode" of
|
|
292
|
-
ProcessConfiguration."Processing Mode"::Standard:
|
|
293
|
-
exit(StandardStrategy);
|
|
294
|
-
ProcessConfiguration."Processing Mode"::Fast:
|
|
295
|
-
exit(FastStrategy);
|
|
296
|
-
ProcessConfiguration."Processing Mode"::Detailed:
|
|
297
|
-
exit(DetailedStrategy);
|
|
298
|
-
end;
|
|
299
|
-
end;
|
|
300
|
-
}
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
## Data Import Template Pattern
|
|
304
|
-
|
|
305
|
-
```al
|
|
306
|
-
codeunit 50504 "Data Import Template"
|
|
307
|
-
{
|
|
308
|
-
procedure ImportData(ImportSource: Text; ImportType: Enum "Import Type"): Boolean
|
|
309
|
-
begin
|
|
310
|
-
if not ValidateImportSource(ImportSource, ImportType) then
|
|
311
|
-
exit(false);
|
|
312
|
-
|
|
313
|
-
if not PrepareImport(ImportSource, ImportType) then
|
|
314
|
-
exit(false);
|
|
315
|
-
|
|
316
|
-
if not ParseData(ImportSource, ImportType) then
|
|
317
|
-
exit(false);
|
|
318
|
-
|
|
319
|
-
if not ValidateData(ImportType) then
|
|
320
|
-
exit(false);
|
|
321
|
-
|
|
322
|
-
if not TransformData(ImportType) then
|
|
323
|
-
exit(false);
|
|
324
|
-
|
|
325
|
-
if not LoadData(ImportType) then
|
|
326
|
-
exit(false);
|
|
327
|
-
|
|
328
|
-
if not FinalizeImport(ImportType) then
|
|
329
|
-
exit(false);
|
|
330
|
-
|
|
331
|
-
exit(true);
|
|
332
|
-
end;
|
|
333
|
-
|
|
334
|
-
// Template methods with default implementations
|
|
335
|
-
protected procedure ValidateImportSource(ImportSource: Text; ImportType: Enum "Import Type"): Boolean
|
|
336
|
-
begin
|
|
337
|
-
exit(ImportSource <> '');
|
|
338
|
-
end;
|
|
339
|
-
|
|
340
|
-
protected procedure PrepareImport(ImportSource: Text; ImportType: Enum "Import Type"): Boolean
|
|
341
|
-
begin
|
|
342
|
-
// Default preparation logic
|
|
343
|
-
exit(true);
|
|
344
|
-
end;
|
|
345
|
-
|
|
346
|
-
// Must be overridden for specific import types
|
|
347
|
-
protected procedure ParseData(ImportSource: Text; ImportType: Enum "Import Type"): Boolean
|
|
348
|
-
begin
|
|
349
|
-
Error('ParseData must be implemented for import type %1', ImportType);
|
|
350
|
-
end;
|
|
351
|
-
|
|
352
|
-
protected procedure ValidateData(ImportType: Enum "Import Type"): Boolean
|
|
353
|
-
begin
|
|
354
|
-
exit(true);
|
|
355
|
-
end;
|
|
356
|
-
|
|
357
|
-
protected procedure TransformData(ImportType: Enum "Import Type"): Boolean
|
|
358
|
-
begin
|
|
359
|
-
exit(true);
|
|
360
|
-
end;
|
|
361
|
-
|
|
362
|
-
protected procedure LoadData(ImportType: Enum "Import Type"): Boolean
|
|
363
|
-
begin
|
|
364
|
-
Error('LoadData must be implemented for import type %1', ImportType);
|
|
365
|
-
end;
|
|
366
|
-
|
|
367
|
-
protected procedure FinalizeImport(ImportType: Enum "Import Type"): Boolean
|
|
368
|
-
begin
|
|
369
|
-
exit(true);
|
|
370
|
-
end;
|
|
371
|
-
}
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
## CSV Import Implementation
|
|
375
|
-
|
|
376
|
-
```al
|
|
377
|
-
codeunit 50505 "CSV Customer Import" extends "Data Import Template"
|
|
378
|
-
{
|
|
379
|
-
var
|
|
380
|
-
TempCustomerBuffer: Record "Customer Import Buffer" temporary;
|
|
381
|
-
|
|
382
|
-
protected procedure ParseData(ImportSource: Text; ImportType: Enum "Import Type"): Boolean
|
|
383
|
-
var
|
|
384
|
-
CSVReader: Codeunit "CSV Reader";
|
|
385
|
-
DataLine: List of [Text];
|
|
386
|
-
begin
|
|
387
|
-
CSVReader.Initialize(ImportSource);
|
|
388
|
-
|
|
389
|
-
while CSVReader.ReadLine(DataLine) do begin
|
|
390
|
-
if not ParseCustomerLine(DataLine) then
|
|
391
|
-
exit(false);
|
|
392
|
-
end;
|
|
393
|
-
|
|
394
|
-
exit(true);
|
|
395
|
-
end;
|
|
396
|
-
|
|
397
|
-
protected procedure ValidateData(ImportType: Enum "Import Type"): Boolean
|
|
398
|
-
var
|
|
399
|
-
ValidationErrors: Integer;
|
|
400
|
-
begin
|
|
401
|
-
ValidationErrors := 0;
|
|
402
|
-
|
|
403
|
-
if TempCustomerBuffer.FindSet() then
|
|
404
|
-
repeat
|
|
405
|
-
if not ValidateCustomerData(TempCustomerBuffer) then
|
|
406
|
-
ValidationErrors += 1;
|
|
407
|
-
until TempCustomerBuffer.Next() = 0;
|
|
408
|
-
|
|
409
|
-
exit(ValidationErrors = 0);
|
|
410
|
-
end;
|
|
411
|
-
|
|
412
|
-
protected procedure TransformData(ImportType: Enum "Import Type"): Boolean
|
|
413
|
-
begin
|
|
414
|
-
if TempCustomerBuffer.FindSet() then
|
|
415
|
-
repeat
|
|
416
|
-
TransformCustomerData(TempCustomerBuffer);
|
|
417
|
-
TempCustomerBuffer.Modify();
|
|
418
|
-
until TempCustomerBuffer.Next() = 0;
|
|
419
|
-
|
|
420
|
-
exit(true);
|
|
421
|
-
end;
|
|
422
|
-
|
|
423
|
-
protected procedure LoadData(ImportType: Enum "Import Type"): Boolean
|
|
424
|
-
var
|
|
425
|
-
Customer: Record Customer;
|
|
426
|
-
ImportedCount: Integer;
|
|
427
|
-
begin
|
|
428
|
-
if TempCustomerBuffer.FindSet() then
|
|
429
|
-
repeat
|
|
430
|
-
Customer.TransferFields(TempCustomerBuffer);
|
|
431
|
-
if Customer.Insert(true) then
|
|
432
|
-
ImportedCount += 1;
|
|
433
|
-
until TempCustomerBuffer.Next() = 0;
|
|
434
|
-
|
|
435
|
-
Message('%1 customers imported successfully', ImportedCount);
|
|
436
|
-
exit(true);
|
|
437
|
-
end;
|
|
438
|
-
|
|
439
|
-
local procedure ParseCustomerLine(DataLine: List of [Text]): Boolean
|
|
440
|
-
begin
|
|
441
|
-
if DataLine.Count < 3 then
|
|
442
|
-
exit(false);
|
|
443
|
-
|
|
444
|
-
TempCustomerBuffer.Init();
|
|
445
|
-
TempCustomerBuffer."No." := DataLine.Get(1);
|
|
446
|
-
TempCustomerBuffer.Name := DataLine.Get(2);
|
|
447
|
-
TempCustomerBuffer."Phone No." := DataLine.Get(3);
|
|
448
|
-
if DataLine.Count > 3 then
|
|
449
|
-
TempCustomerBuffer."E-Mail" := DataLine.Get(4);
|
|
450
|
-
|
|
451
|
-
TempCustomerBuffer.Insert();
|
|
452
|
-
exit(true);
|
|
453
|
-
end;
|
|
454
|
-
}
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
## Workflow Template Pattern
|
|
458
|
-
|
|
459
|
-
```al
|
|
460
|
-
codeunit 50506 "Workflow Processing Template"
|
|
461
|
-
{
|
|
462
|
-
procedure ProcessWorkflow(WorkflowCode: Code[20]; RecordVariant: Variant): Boolean
|
|
463
|
-
var
|
|
464
|
-
WorkflowStep: Record "Workflow Step";
|
|
465
|
-
CurrentStepResult: Boolean;
|
|
466
|
-
begin
|
|
467
|
-
if not InitializeWorkflow(WorkflowCode, RecordVariant) then
|
|
468
|
-
exit(false);
|
|
469
|
-
|
|
470
|
-
WorkflowStep.SetRange("Workflow Code", WorkflowCode);
|
|
471
|
-
WorkflowStep.SetRange(Active, true);
|
|
472
|
-
WorkflowStep.SetCurrentKey("Step Order");
|
|
473
|
-
|
|
474
|
-
if WorkflowStep.FindSet() then
|
|
475
|
-
repeat
|
|
476
|
-
CurrentStepResult := ExecuteWorkflowStep(WorkflowStep, RecordVariant);
|
|
477
|
-
|
|
478
|
-
LogStepExecution(WorkflowStep, CurrentStepResult);
|
|
479
|
-
|
|
480
|
-
if not CurrentStepResult then begin
|
|
481
|
-
HandleStepFailure(WorkflowStep, RecordVariant);
|
|
482
|
-
if WorkflowStep."Stop on Error" then
|
|
483
|
-
exit(false);
|
|
484
|
-
end;
|
|
485
|
-
|
|
486
|
-
until WorkflowStep.Next() = 0;
|
|
487
|
-
|
|
488
|
-
exit(FinalizeWorkflow(WorkflowCode, RecordVariant));
|
|
489
|
-
end;
|
|
490
|
-
|
|
491
|
-
protected procedure InitializeWorkflow(WorkflowCode: Code[20]; RecordVariant: Variant): Boolean
|
|
492
|
-
begin
|
|
493
|
-
// Default initialization
|
|
494
|
-
exit(true);
|
|
495
|
-
end;
|
|
496
|
-
|
|
497
|
-
protected procedure ExecuteWorkflowStep(WorkflowStep: Record "Workflow Step"; var RecordVariant: Variant): Boolean
|
|
498
|
-
begin
|
|
499
|
-
// Must be implemented by specific workflow types
|
|
500
|
-
Error('ExecuteWorkflowStep must be implemented for step type %1', WorkflowStep."Step Type");
|
|
501
|
-
end;
|
|
502
|
-
|
|
503
|
-
protected procedure HandleStepFailure(WorkflowStep: Record "Workflow Step"; RecordVariant: Variant)
|
|
504
|
-
begin
|
|
505
|
-
// Default error handling
|
|
506
|
-
end;
|
|
507
|
-
|
|
508
|
-
protected procedure FinalizeWorkflow(WorkflowCode: Code[20]; RecordVariant: Variant): Boolean
|
|
509
|
-
begin
|
|
510
|
-
// Default finalization
|
|
511
|
-
exit(true);
|
|
512
|
-
end;
|
|
513
|
-
}
|
|
514
|
-
```
|
|
515
|
-
|
|
516
|
-
This sample demonstrates comprehensive template method pattern implementations including basic templates, document processing, configurable templates, data import patterns, and workflow processing with customizable steps and inheritance-based specialization.
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# TestField Implementation Patterns
|
|
2
|
-
|
|
3
|
-
## Entry Point Validation
|
|
4
|
-
```al
|
|
5
|
-
procedure ProcessSalesOrder(var SalesHeader: Record "Sales Header")
|
|
6
|
-
begin
|
|
7
|
-
// Validate prerequisites at procedure entry
|
|
8
|
-
SalesHeader.TestField("Document Type", SalesHeader."Document Type"::Order);
|
|
9
|
-
SalesHeader.TestField("Sell-to Customer No.");
|
|
10
|
-
SalesHeader.TestField("Order Date");
|
|
11
|
-
|
|
12
|
-
// Continue with business logic
|
|
13
|
-
ProcessOrderLines(SalesHeader);
|
|
14
|
-
end;
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## State-Dependent Validation
|
|
18
|
-
```al
|
|
19
|
-
procedure ReleasePurchaseDocument(var PurchaseHeader: Record "Purchase Header")
|
|
20
|
-
begin
|
|
21
|
-
case PurchaseHeader."Document Type" of
|
|
22
|
-
PurchaseHeader."Document Type"::Order:
|
|
23
|
-
begin
|
|
24
|
-
PurchaseHeader.TestField("Buy-from Vendor No.");
|
|
25
|
-
PurchaseHeader.TestField("Expected Receipt Date");
|
|
26
|
-
end;
|
|
27
|
-
PurchaseHeader."Document Type"::Invoice:
|
|
28
|
-
begin
|
|
29
|
-
PurchaseHeader.TestField("Buy-from Vendor No.");
|
|
30
|
-
PurchaseHeader.TestField("Posting Date");
|
|
31
|
-
end;
|
|
32
|
-
end;
|
|
33
|
-
end;
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Conditional Field Requirements
|
|
37
|
-
```al
|
|
38
|
-
trigger OnValidate()
|
|
39
|
-
begin
|
|
40
|
-
if "Payment Method Code" <> '' then begin
|
|
41
|
-
PaymentMethod.Get("Payment Method Code");
|
|
42
|
-
if PaymentMethod."Bal. Account Type" = PaymentMethod."Bal. Account Type"::"Bank Account" then
|
|
43
|
-
TestField("Bank Account No.");
|
|
44
|
-
end;
|
|
45
|
-
end;
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Try Function Integration
|
|
49
|
-
```al
|
|
50
|
-
procedure TryValidateCustomerData(CustomerNo: Code[20]): Boolean
|
|
51
|
-
var
|
|
52
|
-
Customer: Record Customer;
|
|
53
|
-
begin
|
|
54
|
-
if not Customer.Get(CustomerNo) then
|
|
55
|
-
exit(false);
|
|
56
|
-
|
|
57
|
-
Customer.TestField(Name);
|
|
58
|
-
Customer.TestField("Customer Posting Group");
|
|
59
|
-
exit(true);
|
|
60
|
-
end;
|
|
61
|
-
```
|