bc-code-intelligence-mcp 1.1.1
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/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/cache/cache-manager.d.ts +95 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +328 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cli/bc-code-intel-cli.d.ts +9 -0
- package/dist/cli/bc-code-intel-cli.d.ts.map +1 -0
- package/dist/cli/bc-code-intel-cli.js +441 -0
- package/dist/cli/bc-code-intel-cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +21 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +402 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-validator.d.ts +84 -0
- package/dist/config/config-validator.d.ts.map +1 -0
- package/dist/config/config-validator.js +604 -0
- package/dist/config/config-validator.js.map +1 -0
- package/dist/config/test-config-loader.d.ts +10 -0
- package/dist/config/test-config-loader.d.ts.map +1 -0
- package/dist/config/test-config-loader.js +135 -0
- package/dist/config/test-config-loader.js.map +1 -0
- package/dist/config/test-enhanced-layer-service.d.ts +7 -0
- package/dist/config/test-enhanced-layer-service.d.ts.map +1 -0
- package/dist/config/test-enhanced-layer-service.js +104 -0
- package/dist/config/test-enhanced-layer-service.js.map +1 -0
- package/dist/config/test-git-layer.d.ts +7 -0
- package/dist/config/test-git-layer.d.ts.map +1 -0
- package/dist/config/test-git-layer.js +68 -0
- package/dist/config/test-git-layer.js.map +1 -0
- package/dist/dev/hot-reload.d.ts +91 -0
- package/dist/dev/hot-reload.d.ts.map +1 -0
- package/dist/dev/hot-reload.js +358 -0
- package/dist/dev/hot-reload.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +673 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/base-layer.d.ts +83 -0
- package/dist/layers/base-layer.d.ts.map +1 -0
- package/dist/layers/base-layer.js +166 -0
- package/dist/layers/base-layer.js.map +1 -0
- package/dist/layers/embedded-layer.d.ts +53 -0
- package/dist/layers/embedded-layer.d.ts.map +1 -0
- package/dist/layers/embedded-layer.js +238 -0
- package/dist/layers/embedded-layer.js.map +1 -0
- package/dist/layers/git-layer.d.ts +54 -0
- package/dist/layers/git-layer.d.ts.map +1 -0
- package/dist/layers/git-layer.js +369 -0
- package/dist/layers/git-layer.js.map +1 -0
- package/dist/layers/index.d.ts +12 -0
- package/dist/layers/index.d.ts.map +1 -0
- package/dist/layers/index.js +11 -0
- package/dist/layers/index.js.map +1 -0
- package/dist/layers/layer-service.d.ts +129 -0
- package/dist/layers/layer-service.d.ts.map +1 -0
- package/dist/layers/layer-service.js +570 -0
- package/dist/layers/layer-service.js.map +1 -0
- package/dist/layers/project-layer.d.ts +50 -0
- package/dist/layers/project-layer.d.ts.map +1 -0
- package/dist/layers/project-layer.js +256 -0
- package/dist/layers/project-layer.js.map +1 -0
- package/dist/monitoring/production-monitor.d.ts +148 -0
- package/dist/monitoring/production-monitor.d.ts.map +1 -0
- package/dist/monitoring/production-monitor.js +463 -0
- package/dist/monitoring/production-monitor.js.map +1 -0
- package/dist/performance/performance-monitor.d.ts +99 -0
- package/dist/performance/performance-monitor.d.ts.map +1 -0
- package/dist/performance/performance-monitor.js +253 -0
- package/dist/performance/performance-monitor.js.map +1 -0
- package/dist/sdk/bc-code-intel-client.d.ts +175 -0
- package/dist/sdk/bc-code-intel-client.d.ts.map +1 -0
- package/dist/sdk/bc-code-intel-client.js +380 -0
- package/dist/sdk/bc-code-intel-client.js.map +1 -0
- package/dist/search/intelligent-search.d.ts +97 -0
- package/dist/search/intelligent-search.d.ts.map +1 -0
- package/dist/search/intelligent-search.js +355 -0
- package/dist/search/intelligent-search.js.map +1 -0
- package/dist/security/access-control.d.ts +110 -0
- package/dist/security/access-control.d.ts.map +1 -0
- package/dist/security/access-control.js +353 -0
- package/dist/security/access-control.js.map +1 -0
- package/dist/services/code-analysis-service.d.ts +72 -0
- package/dist/services/code-analysis-service.d.ts.map +1 -0
- package/dist/services/code-analysis-service.js +811 -0
- package/dist/services/code-analysis-service.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +91 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +370 -0
- package/dist/services/knowledge-service.js.map +1 -0
- package/dist/services/methodology-service.d.ts +91 -0
- package/dist/services/methodology-service.d.ts.map +1 -0
- package/dist/services/methodology-service.js +408 -0
- package/dist/services/methodology-service.js.map +1 -0
- package/dist/services/workflow-service.d.ts +132 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +277 -0
- package/dist/services/workflow-service.js.map +1 -0
- package/dist/setup/post-install.d.ts +12 -0
- package/dist/setup/post-install.d.ts.map +1 -0
- package/dist/setup/post-install.js +81 -0
- package/dist/setup/post-install.js.map +1 -0
- package/dist/streamlined-handlers.d.ts +51 -0
- package/dist/streamlined-handlers.d.ts.map +1 -0
- package/dist/streamlined-handlers.js +287 -0
- package/dist/streamlined-handlers.js.map +1 -0
- package/dist/streamlined-tools.d.ts +316 -0
- package/dist/streamlined-tools.d.ts.map +1 -0
- package/dist/streamlined-tools.js +189 -0
- package/dist/streamlined-tools.js.map +1 -0
- package/dist/test-enhanced-mcp-server.d.ts +7 -0
- package/dist/test-enhanced-mcp-server.d.ts.map +1 -0
- package/dist/test-enhanced-mcp-server.js +177 -0
- package/dist/test-enhanced-mcp-server.js.map +1 -0
- package/dist/types/bc-knowledge.d.ts +294 -0
- package/dist/types/bc-knowledge.d.ts.map +1 -0
- package/dist/types/bc-knowledge.js +44 -0
- package/dist/types/bc-knowledge.js.map +1 -0
- package/dist/types/config-types.d.ts +180 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +104 -0
- package/dist/types/config-types.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/layer-types.d.ts +171 -0
- package/dist/types/layer-types.d.ts.map +1 -0
- package/dist/types/layer-types.js +27 -0
- package/dist/types/layer-types.js.map +1 -0
- package/dist/types/persona-types.d.ts +77 -0
- package/dist/types/persona-types.d.ts.map +1 -0
- package/dist/types/persona-types.js +341 -0
- package/dist/types/persona-types.js.map +1 -0
- package/dist/utils/path-utils.d.ts +5 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +14 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/workflows/domain-workflows.d.ts +8 -0
- package/dist/workflows/domain-workflows.d.ts.map +1 -0
- package/dist/workflows/domain-workflows.js +360 -0
- package/dist/workflows/domain-workflows.js.map +1 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/bug-report.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/content-improvement.md +24 -0
- package/embedded-knowledge/.github/ISSUE_TEMPLATE/knowledge-request.md +30 -0
- package/embedded-knowledge/AGENTS.md +69 -0
- package/embedded-knowledge/CONTRIBUTING.md +58 -0
- package/embedded-knowledge/LICENSE +21 -0
- package/embedded-knowledge/README.md +15 -0
- package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +90 -0
- package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +113 -0
- package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +101 -0
- package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +87 -0
- package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +155 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +138 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +79 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-delegate-operation.md +280 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-fieldset-registration.md +200 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-interface-design.md +565 -0
- package/embedded-knowledge/domains/alex-architect/samples/api-page-implementation.md +665 -0
- package/embedded-knowledge/domains/alex-architect/samples/complex-facade-patterns.md +325 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern-al.md +696 -0
- package/embedded-knowledge/domains/alex-architect/samples/facade-pattern.md +320 -0
- package/embedded-knowledge/domains/alex-architect/samples/subscriber-organization.md +102 -0
- package/embedded-knowledge/domains/alex-architect/samples/systemid-integration.md +433 -0
- package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +66 -0
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +115 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +295 -0
- package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +86 -0
- package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +96 -0
- package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +70 -0
- package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +84 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +93 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +73 -0
- package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +79 -0
- package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +87 -0
- package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +209 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +246 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +107 -0
- package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +105 -0
- package/embedded-knowledge/domains/dean-debug/samples/bc24-no-series-conversion.md +186 -0
- package/embedded-knowledge/domains/dean-debug/samples/case-performance-optimization.md +60 -0
- package/embedded-knowledge/domains/dean-debug/samples/compound-statements-debugging.md +139 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-dimensions.md +190 -0
- package/embedded-knowledge/domains/dean-debug/samples/custom-telemetry.md +516 -0
- package/embedded-knowledge/domains/dean-debug/samples/deleteall-performance.md +298 -0
- package/embedded-knowledge/domains/dean-debug/samples/error-correlation.md +324 -0
- package/embedded-knowledge/domains/dean-debug/samples/extension-isolation.md +344 -0
- package/embedded-knowledge/domains/dean-debug/samples/logmessage-methods.md +137 -0
- package/embedded-knowledge/domains/dean-debug/samples/maintainsiftindex-examples.md +340 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-implementation.md +810 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-module-bc24.md +86 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation-module-bc24.md +110 -0
- package/embedded-knowledge/domains/dean-debug/samples/no-series-validation.md +758 -0
- package/embedded-knowledge/domains/dean-debug/samples/odata-query-optimization.md +665 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-case.md +316 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-before-filters.md +223 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-filter-exclusion.md +149 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-optimization.md +412 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-performance.md +211 -0
- package/embedded-knowledge/domains/dean-debug/samples/setloadfields-primary-key.md +155 -0
- package/embedded-knowledge/domains/dean-debug/samples/sift-technology-fundamentals.md +475 -0
- package/embedded-knowledge/domains/dean-debug/samples/singleinstance-subscribers.md +238 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-event-batching.md +97 -0
- package/embedded-knowledge/domains/dean-debug/samples/table-key-requirements.md +666 -0
- package/embedded-knowledge/domains/dean-debug/samples/telemetry-performance.md +319 -0
- package/embedded-knowledge/domains/dean-debug/samples/verbosity-strategy.md +236 -0
- package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +59 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +67 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +90 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +87 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +70 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +74 -0
- package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +81 -0
- package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +56 -0
- package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +66 -0
- package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +79 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +78 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +83 -0
- package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +76 -0
- package/embedded-knowledge/domains/dean-debug/testfield-performance.md +104 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +145 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +104 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +114 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-default-messages.md +356 -0
- package/embedded-knowledge/domains/eva-errors/samples/fielderror-syntax.md +256 -0
- package/embedded-knowledge/domains/eva-errors/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/eva-errors/samples/testfield-error-handling.md +108 -0
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
- package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +98 -0
- package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +123 -0
- package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +96 -0
- package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +115 -0
- package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +114 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/al-event-subscriber-architecture.md +395 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-error-responses.md +479 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-field-control.md +548 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/api-url-naming.md +287 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/business-process-templates.md +434 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/etag-implementation.md +508 -0
- package/embedded-knowledge/domains/jordan-bridge/samples/task-scheduler-pattern.md +615 -0
- package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +144 -0
- package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +124 -0
- package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +84 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +75 -0
- package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +96 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-multiple-conditions.md +385 -0
- package/embedded-knowledge/domains/maya-mentor/samples/case-statement-syntax-structure.md +72 -0
- package/embedded-knowledge/domains/maya-mentor/samples/fielderror-syntax-usage.md +48 -0
- package/embedded-knowledge/domains/maya-mentor/samples/testfield-basic-syntax.md +49 -0
- package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +67 -0
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
- package/embedded-knowledge/domains/quinn-tester/rule-execution.md +123 -0
- package/embedded-knowledge/domains/quinn-tester/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-message-construction.md +60 -0
- package/embedded-knowledge/domains/quinn-tester/samples/fielderror-validation-patterns.md +83 -0
- package/embedded-knowledge/domains/quinn-tester/samples/rule-execution.md +716 -0
- package/embedded-knowledge/domains/quinn-tester/samples/table-safety-validation-patterns.md +101 -0
- package/embedded-knowledge/domains/quinn-tester/samples/temporary-table-operation-validation.md +91 -0
- package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +79 -0
- package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +79 -0
- package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +89 -0
- package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +81 -0
- package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +75 -0
- package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +96 -0
- package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +86 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +90 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +82 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +76 -0
- package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +78 -0
- package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +100 -0
- package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +115 -0
- package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +124 -0
- package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +110 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-begin-end-blocks.md +438 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-binary-operator-spacing.md +255 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-comment-spacing-standards.md +209 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-keyword-indentation-rules.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-line-start-keyword-positioning.md +218 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-separate-if-else-formatting.md +280 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-statement-per-line-rule.md +188 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-unnecessary-else-elimination.md +245 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/al-variable-declaration-order.md +244 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/begin-end-positioning.md +278 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/boolean-simplification-examples.md +484 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/case-error-handling.md +64 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/compound-statement-readability.md +107 -0
- package/embedded-knowledge/domains/roger-reviewer/samples/lonely-repeat-examples.md +280 -0
- package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +67 -0
- package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +76 -0
- package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +98 -0
- package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +128 -0
- package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +75 -0
- package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +95 -0
- package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +91 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +118 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +111 -0
- package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +113 -0
- package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +127 -0
- package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +141 -0
- package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +66 -0
- package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +96 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-blank-line-organization.md +161 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-case-action-formatting.md +177 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-lonely-repeat-pattern.md +239 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-named-parameter-pattern.md +346 -0
- package/embedded-knowledge/domains/sam-coder/samples/al-record-find-early-exit.md +298 -0
- package/embedded-knowledge/domains/sam-coder/samples/command-queue-pattern.md +677 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-alternative-implementation.md +117 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-triggers.md +75 -0
- package/embedded-knowledge/domains/sam-coder/samples/deleteall-usage.md +169 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-bridge-pattern.md +399 -0
- package/embedded-knowledge/domains/sam-coder/samples/event-payload-design.md +356 -0
- package/embedded-knowledge/domains/sam-coder/samples/generic-method-patterns.md +889 -0
- package/embedded-knowledge/domains/sam-coder/samples/manual-binding.md +84 -0
- package/embedded-knowledge/domains/sam-coder/samples/nested-compound-best-practices.md +127 -0
- package/embedded-knowledge/domains/sam-coder/samples/single-to-compound-conversion.md +89 -0
- package/embedded-knowledge/domains/sam-coder/samples/template-method-pattern.md +516 -0
- package/embedded-knowledge/domains/sam-coder/samples/testfield-patterns.md +61 -0
- package/embedded-knowledge/domains/sam-coder/samples/type-safe-operations.md +427 -0
- package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +122 -0
- package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +96 -0
- package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +101 -0
- package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +149 -0
- package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +107 -0
- package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +95 -0
- package/embedded-knowledge/domains/seth-security/api-permission-model.md +115 -0
- package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +78 -0
- package/embedded-knowledge/domains/seth-security/samples/al-temporary-table-safety.md +373 -0
- package/embedded-knowledge/domains/seth-security/samples/api-permission-model.md +308 -0
- package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +79 -0
- package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +78 -0
- package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +81 -0
- package/embedded-knowledge/indexes/bc-version-matrix.json +188 -0
- package/embedded-knowledge/indexes/domain-catalog.json +106 -0
- package/embedded-knowledge/indexes/tags/abbreviations.json +1 -0
- package/embedded-knowledge/indexes/tags/abstraction.json +1 -0
- package/embedded-knowledge/indexes/tags/access-control.json +1 -0
- package/embedded-knowledge/indexes/tags/accessibility.json +1 -0
- package/embedded-knowledge/indexes/tags/actions.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/advanced.json +1 -0
- package/embedded-knowledge/indexes/tags/al-extension.json +1 -0
- package/embedded-knowledge/indexes/tags/al-generics.json +1 -0
- package/embedded-knowledge/indexes/tags/al-objects.json +1 -0
- package/embedded-knowledge/indexes/tags/al-syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/algorithm-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/alternatives.json +1 -0
- package/embedded-knowledge/indexes/tags/analytics.json +1 -0
- package/embedded-knowledge/indexes/tags/api-delegates.json +1 -0
- package/embedded-knowledge/indexes/tags/api-design.json +1 -0
- package/embedded-knowledge/indexes/tags/api-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/api-endpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/api-extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/api-fieldsets.json +1 -0
- package/embedded-knowledge/indexes/tags/api-integration.json +1 -0
- package/embedded-knowledge/indexes/tags/api-interfaces.json +1 -0
- package/embedded-knowledge/indexes/tags/api-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/api-pages.json +1 -0
- package/embedded-knowledge/indexes/tags/api-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/api-permissions.json +1 -0
- package/embedded-knowledge/indexes/tags/api-responses.json +1 -0
- package/embedded-knowledge/indexes/tags/api-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/api.json +1 -0
- package/embedded-knowledge/indexes/tags/architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/async-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/async-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/automatic-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/batch-operations.json +1 -0
- package/embedded-knowledge/indexes/tags/bc24-migration.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/begin-end.json +1 -0
- package/embedded-knowledge/indexes/tags/behavioral-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/best-practices.json +1 -0
- package/embedded-knowledge/indexes/tags/binding.json +1 -0
- package/embedded-knowledge/indexes/tags/block-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/blocks.json +1 -0
- package/embedded-knowledge/indexes/tags/boolean-expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/branching.json +1 -0
- package/embedded-knowledge/indexes/tags/breaking-changes.json +1 -0
- package/embedded-knowledge/indexes/tags/breakpoints.json +1 -0
- package/embedded-knowledge/indexes/tags/business-foundation.json +1 -0
- package/embedded-knowledge/indexes/tags/business-infrastructure.json +1 -0
- package/embedded-knowledge/indexes/tags/business-process.json +1 -0
- package/embedded-knowledge/indexes/tags/business-rules.json +1 -0
- package/embedded-knowledge/indexes/tags/caching.json +1 -0
- package/embedded-knowledge/indexes/tags/case-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/case.json +1 -0
- package/embedded-knowledge/indexes/tags/code-analysis.json +1 -0
- package/embedded-knowledge/indexes/tags/code-clarity.json +1 -0
- package/embedded-knowledge/indexes/tags/code-comprehension.json +1 -0
- package/embedded-knowledge/indexes/tags/code-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/code-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/code-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/code-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/code-quality.json +1 -0
- package/embedded-knowledge/indexes/tags/code-reuse.json +1 -0
- package/embedded-knowledge/indexes/tags/code-simplification.json +1 -0
- package/embedded-knowledge/indexes/tags/code-standards.json +1 -0
- package/embedded-knowledge/indexes/tags/code-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/code-style.json +1 -0
- package/embedded-knowledge/indexes/tags/codeunit-design.json +1 -0
- package/embedded-knowledge/indexes/tags/command-queue.json +1 -0
- package/embedded-knowledge/indexes/tags/comments.json +1 -0
- package/embedded-knowledge/indexes/tags/compile-time-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/complex-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-hiding.json +1 -0
- package/embedded-knowledge/indexes/tags/complexity-management.json +1 -0
- package/embedded-knowledge/indexes/tags/compound-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/concurrency.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional-logic.json +1 -0
- package/embedded-knowledge/indexes/tags/conditional.json +1 -0
- package/embedded-knowledge/indexes/tags/conflict-resolution.json +1 -0
- package/embedded-knowledge/indexes/tags/consistency.json +1 -0
- package/embedded-knowledge/indexes/tags/contract-design.json +1 -0
- package/embedded-knowledge/indexes/tags/control-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/conversion-guide.json +1 -0
- package/embedded-knowledge/indexes/tags/correlation.json +1 -0
- package/embedded-knowledge/indexes/tags/custom-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/data-access.json +1 -0
- package/embedded-knowledge/indexes/tags/data-exposure.json +1 -0
- package/embedded-knowledge/indexes/tags/data-integrity.json +1 -0
- package/embedded-knowledge/indexes/tags/data-loading.json +1 -0
- package/embedded-knowledge/indexes/tags/data-manipulation.json +1 -0
- package/embedded-knowledge/indexes/tags/data-modeling.json +1 -0
- package/embedded-knowledge/indexes/tags/data-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/data-protection.json +1 -0
- package/embedded-knowledge/indexes/tags/data-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/database.json +1 -0
- package/embedded-knowledge/indexes/tags/debugging.json +1 -0
- package/embedded-knowledge/indexes/tags/decision-making.json +1 -0
- package/embedded-knowledge/indexes/tags/declaration.json +1 -0
- package/embedded-knowledge/indexes/tags/default-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/defensive-programming.json +1 -0
- package/embedded-knowledge/indexes/tags/deleteall.json +1 -0
- package/embedded-knowledge/indexes/tags/dependencies.json +1 -0
- package/embedded-knowledge/indexes/tags/deployment.json +1 -0
- package/embedded-knowledge/indexes/tags/developer-productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/development-workflow.json +1 -0
- package/embedded-knowledge/indexes/tags/diagnostics.json +1 -0
- package/embedded-knowledge/indexes/tags/dimensions.json +1 -0
- package/embedded-knowledge/indexes/tags/documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/early-exit.json +1 -0
- package/embedded-knowledge/indexes/tags/else-clauses.json +1 -0
- package/embedded-knowledge/indexes/tags/end-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/enterprise-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/entity-relationships.json +1 -0
- package/embedded-knowledge/indexes/tags/error-handling.json +1 -0
- package/embedded-knowledge/indexes/tags/error-messages.json +1 -0
- package/embedded-knowledge/indexes/tags/error-prevention.json +1 -0
- package/embedded-knowledge/indexes/tags/error-text.json +1 -0
- package/embedded-knowledge/indexes/tags/etag.json +1 -0
- package/embedded-knowledge/indexes/tags/event-bridge.json +1 -0
- package/embedded-knowledge/indexes/tags/event-payload.json +1 -0
- package/embedded-knowledge/indexes/tags/event-routing.json +1 -0
- package/embedded-knowledge/indexes/tags/events.json +1 -0
- package/embedded-knowledge/indexes/tags/execution-flow.json +1 -0
- package/embedded-knowledge/indexes/tags/expressions.json +1 -0
- package/embedded-knowledge/indexes/tags/extensibility.json +1 -0
- package/embedded-knowledge/indexes/tags/extensions.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-composition.json +1 -0
- package/embedded-knowledge/indexes/tags/facade-pattern.json +1 -0
- package/embedded-knowledge/indexes/tags/field-control.json +1 -0
- package/embedded-knowledge/indexes/tags/field-exclusion.json +1 -0
- package/embedded-knowledge/indexes/tags/field-registration.json +1 -0
- package/embedded-knowledge/indexes/tags/field-state.json +1 -0
- package/embedded-knowledge/indexes/tags/field-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/fielderror.json +1 -0
- package/embedded-knowledge/indexes/tags/fields.json +1 -0
- package/embedded-knowledge/indexes/tags/filtering.json +1 -0
- package/embedded-knowledge/indexes/tags/filters.json +1 -0
- package/embedded-knowledge/indexes/tags/formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/generic-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/http-status.json +1 -0
- package/embedded-knowledge/indexes/tags/if-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/implementation.json +1 -0
- package/embedded-knowledge/indexes/tags/indentation.json +1 -0
- package/embedded-knowledge/indexes/tags/index-summary.json +277 -0
- package/embedded-knowledge/indexes/tags/indexing.json +1 -0
- package/embedded-knowledge/indexes/tags/inheritance.json +1 -0
- package/embedded-knowledge/indexes/tags/integration.json +1 -0
- package/embedded-knowledge/indexes/tags/integrity-checking.json +1 -0
- package/embedded-knowledge/indexes/tags/intellisense.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-design.json +1 -0
- package/embedded-knowledge/indexes/tags/interface-segregation.json +1 -0
- package/embedded-knowledge/indexes/tags/isolation.json +1 -0
- package/embedded-knowledge/indexes/tags/job-processing.json +1 -0
- package/embedded-knowledge/indexes/tags/keyboard-navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/keywords.json +1 -0
- package/embedded-knowledge/indexes/tags/legacy-modernization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-breaks.json +1 -0
- package/embedded-knowledge/indexes/tags/line-organization.json +1 -0
- package/embedded-knowledge/indexes/tags/line-positioning.json +1 -0
- package/embedded-knowledge/indexes/tags/localization.json +1 -0
- package/embedded-knowledge/indexes/tags/logging.json +1 -0
- package/embedded-knowledge/indexes/tags/loose-coupling.json +1 -0
- package/embedded-knowledge/indexes/tags/maintainability.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-management.json +1 -0
- package/embedded-knowledge/indexes/tags/memory-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/memory.json +1 -0
- package/embedded-knowledge/indexes/tags/message-design.json +1 -0
- package/embedded-knowledge/indexes/tags/message-formatting.json +1 -0
- package/embedded-knowledge/indexes/tags/message-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/metadata-driven.json +1 -0
- package/embedded-knowledge/indexes/tags/method-comparison.json +1 -0
- package/embedded-knowledge/indexes/tags/module-architecture.json +1 -0
- package/embedded-knowledge/indexes/tags/module-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/monitoring.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-layer-facade.json +1 -0
- package/embedded-knowledge/indexes/tags/multi-tenancy.json +1 -0
- package/embedded-knowledge/indexes/tags/multiple-values.json +1 -0
- package/embedded-knowledge/indexes/tags/naming-conventions.json +1 -0
- package/embedded-knowledge/indexes/tags/naming.json +1 -0
- package/embedded-knowledge/indexes/tags/navigation.json +1 -0
- package/embedded-knowledge/indexes/tags/nested-statements.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-conversion.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series-validation.json +1 -0
- package/embedded-knowledge/indexes/tags/no-series.json +1 -0
- package/embedded-knowledge/indexes/tags/number-generation.json +1 -0
- package/embedded-knowledge/indexes/tags/object-documentation.json +1 -0
- package/embedded-knowledge/indexes/tags/odata.json +1 -0
- package/embedded-knowledge/indexes/tags/ondelete.json +1 -0
- package/embedded-knowledge/indexes/tags/onvalidate.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-delegation.json +1 -0
- package/embedded-knowledge/indexes/tags/operation-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/operators.json +1 -0
- package/embedded-knowledge/indexes/tags/optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/order.json +1 -0
- package/embedded-knowledge/indexes/tags/organization.json +1 -0
- package/embedded-knowledge/indexes/tags/pages.json +1 -0
- package/embedded-knowledge/indexes/tags/parameters.json +1 -0
- package/embedded-knowledge/indexes/tags/patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/performance-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/performance.json +1 -0
- package/embedded-knowledge/indexes/tags/placement.json +1 -0
- package/embedded-knowledge/indexes/tags/posting-codeunits.json +1 -0
- package/embedded-knowledge/indexes/tags/posting.json +1 -0
- package/embedded-knowledge/indexes/tags/preconditions.json +1 -0
- package/embedded-knowledge/indexes/tags/primary-key.json +1 -0
- package/embedded-knowledge/indexes/tags/privacy.json +1 -0
- package/embedded-knowledge/indexes/tags/process-automation.json +1 -0
- package/embedded-knowledge/indexes/tags/production.json +1 -0
- package/embedded-knowledge/indexes/tags/productivity.json +1 -0
- package/embedded-knowledge/indexes/tags/query-performance.json +1 -0
- package/embedded-knowledge/indexes/tags/queue-management.json +1 -0
- package/embedded-knowledge/indexes/tags/ranges.json +1 -0
- package/embedded-knowledge/indexes/tags/readability.json +1 -0
- package/embedded-knowledge/indexes/tags/record-access.json +1 -0
- package/embedded-knowledge/indexes/tags/record-methods.json +1 -0
- package/embedded-knowledge/indexes/tags/refactoring.json +1 -0
- package/embedded-knowledge/indexes/tags/reference.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-loops.json +1 -0
- package/embedded-knowledge/indexes/tags/repeat-statement.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime-errors.json +1 -0
- package/embedded-knowledge/indexes/tags/runtime.json +1 -0
- package/embedded-knowledge/indexes/tags/safeguards.json +1 -0
- package/embedded-knowledge/indexes/tags/security.json +1 -0
- package/embedded-knowledge/indexes/tags/sequence-management.json +1 -0
- package/embedded-knowledge/indexes/tags/serialization.json +1 -0
- package/embedded-knowledge/indexes/tags/session-logmessage.json +1 -0
- package/embedded-knowledge/indexes/tags/session.json +1 -0
- package/embedded-knowledge/indexes/tags/setloadfields.json +1 -0
- package/embedded-knowledge/indexes/tags/shortcuts.json +1 -0
- package/embedded-knowledge/indexes/tags/sift.json +1 -0
- package/embedded-knowledge/indexes/tags/singleinstance.json +1 -0
- package/embedded-knowledge/indexes/tags/spacing.json +1 -0
- package/embedded-knowledge/indexes/tags/sql-translation.json +1 -0
- package/embedded-knowledge/indexes/tags/standards.json +1 -0
- package/embedded-knowledge/indexes/tags/statements.json +1 -0
- package/embedded-knowledge/indexes/tags/streaming.json +1 -0
- package/embedded-knowledge/indexes/tags/strong-typing.json +1 -0
- package/embedded-knowledge/indexes/tags/structural-patterns.json +1 -0
- package/embedded-knowledge/indexes/tags/structure.json +1 -0
- package/embedded-knowledge/indexes/tags/subscribers.json +1 -0
- package/embedded-knowledge/indexes/tags/switch.json +1 -0
- package/embedded-knowledge/indexes/tags/symbol-search.json +1 -0
- package/embedded-knowledge/indexes/tags/syntax.json +1 -0
- package/embedded-knowledge/indexes/tags/systemid.json +1 -0
- package/embedded-knowledge/indexes/tags/table-configuration.json +1 -0
- package/embedded-knowledge/indexes/tags/table-events.json +1 -0
- package/embedded-knowledge/indexes/tags/table-keys.json +1 -0
- package/embedded-knowledge/indexes/tags/table-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/task-scheduler.json +1 -0
- package/embedded-knowledge/indexes/tags/telemetry.json +1 -0
- package/embedded-knowledge/indexes/tags/template-method.json +1 -0
- package/embedded-knowledge/indexes/tags/temporary-tables.json +1 -0
- package/embedded-knowledge/indexes/tags/testfield.json +1 -0
- package/embedded-knowledge/indexes/tags/tradeoffs.json +1 -0
- package/embedded-knowledge/indexes/tags/triggers.json +1 -0
- package/embedded-knowledge/indexes/tags/troubleshooting.json +1 -0
- package/embedded-knowledge/indexes/tags/type-safety.json +1 -0
- package/embedded-knowledge/indexes/tags/url-structure.json +1 -0
- package/embedded-knowledge/indexes/tags/user-experience.json +1 -0
- package/embedded-knowledge/indexes/tags/user-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/user-interface.json +1 -0
- package/embedded-knowledge/indexes/tags/validation-feedback.json +1 -0
- package/embedded-knowledge/indexes/tags/validation.json +1 -0
- package/embedded-knowledge/indexes/tags/variables.json +1 -0
- package/embedded-knowledge/indexes/tags/verbosity.json +1 -0
- package/embedded-knowledge/indexes/tags/vs-code.json +1 -0
- package/embedded-knowledge/indexes/tags/web-services.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-management.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-optimization.json +1 -0
- package/embedded-knowledge/indexes/tags/workflow-templates.json +1 -0
- package/embedded-knowledge/indexes/tags/workspace.json +1 -0
- package/embedded-knowledge/indexes/tags/xml-documentation.json +1 -0
- package/embedded-knowledge/indexes/topic-relationships.json +128 -0
- package/embedded-knowledge/methodologies/index.json +81 -0
- package/embedded-knowledge/methodologies/phases/analysis-full.md +208 -0
- package/embedded-knowledge/methodologies/phases/analysis-quick.md +44 -0
- package/embedded-knowledge/methodologies/phases/analysis.md +182 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-full.md +174 -0
- package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +31 -0
- package/embedded-knowledge/methodologies/phases/execution-validation.md +174 -0
- package/embedded-knowledge/methodologies/phases/performance-full.md +211 -0
- package/embedded-knowledge/methodologies/phases/performance-quick.md +32 -0
- package/embedded-knowledge/methodologies/phases/performance.md +211 -0
- package/embedded-knowledge/methodologies/phases/verification-full.md +162 -0
- package/embedded-knowledge/methodologies/phases/verification-quick.md +48 -0
- package/embedded-knowledge/methodologies/phases/verification.md +146 -0
- package/embedded-knowledge/methodologies/workflow-enforcement.md +142 -0
- package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +99 -0
- package/package.json +74 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "No. Series Validation Module Patterns (BC24+)"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "24+"
|
|
6
|
+
tags: ["no-series-validation", "business-foundation", "module-validation", "bc24-migration", "data-integrity"]
|
|
7
|
+
prerequisites: ["no-series-module-patterns-bc24", "validation-frameworks", "business-foundation-architecture"]
|
|
8
|
+
samples: "samples/no-series-validation-module-bc24.md"
|
|
9
|
+
related_topics: ["no-series-module-patterns-bc24", "no-series-validation-patterns", "bc24-migration-patterns"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# No. Series Validation Module Patterns (BC24+)
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
The new No. Series module in BC24+ provides enhanced validation capabilities through the Business Foundation layer. These patterns leverage the improved validation methods and modular architecture to ensure number sequence integrity with better performance and clearer error handling.
|
|
17
|
+
|
|
18
|
+
**Key Benefit**: Utilizes the new No. Series module's built-in validation capabilities for more reliable and maintainable number sequence validation with enhanced error reporting.
|
|
19
|
+
|
|
20
|
+
## New Validation Architecture
|
|
21
|
+
|
|
22
|
+
### Business Foundation Integration
|
|
23
|
+
The No. Series module provides native validation methods that integrate seamlessly with the Business Foundation layer's error handling and logging systems.
|
|
24
|
+
|
|
25
|
+
### Enhanced Validation Methods
|
|
26
|
+
New dedicated validation methods replace complex custom validation logic:
|
|
27
|
+
- Built-in format validation
|
|
28
|
+
- Automatic relationship validation
|
|
29
|
+
- Improved error messaging and diagnostics
|
|
30
|
+
|
|
31
|
+
### Modular Validation Design
|
|
32
|
+
Validation is now distributed across focused codeunits rather than centralized in legacy NoSeriesManagement.
|
|
33
|
+
|
|
34
|
+
## Essential Validation Patterns
|
|
35
|
+
|
|
36
|
+
### Number Format Validation
|
|
37
|
+
**Legacy Pattern (BC14-23)**:
|
|
38
|
+
```al
|
|
39
|
+
// Custom validation logic required
|
|
40
|
+
if not NoSeriesMgt.CheckFormat("No.", "No. Series") then
|
|
41
|
+
Error('Invalid format');
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**New Pattern (BC24+)**:
|
|
45
|
+
```al
|
|
46
|
+
if not NoSeries.IsValidNo("No.", "No. Series") then
|
|
47
|
+
Error('Number %1 is not valid for series %2', "No.", "No. Series");
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Series Existence Validation
|
|
51
|
+
**New Pattern (BC24+)**:
|
|
52
|
+
```al
|
|
53
|
+
NoSeries.VerifySeriesExists("No. Series");
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Manual Number Validation
|
|
57
|
+
**Legacy Pattern**:
|
|
58
|
+
```al
|
|
59
|
+
NoSeriesMgt.TestManual("No. Series");
|
|
60
|
+
if not NoSeriesMgt.ManualNoAllowed("No. Series") then
|
|
61
|
+
Error('Manual numbers not allowed');
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**New Pattern**:
|
|
65
|
+
```al
|
|
66
|
+
NoSeries.TestManual("No. Series");
|
|
67
|
+
// Built-in error handling provides clear messaging
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Series Relationship Validation
|
|
71
|
+
**New Pattern (BC24+)**:
|
|
72
|
+
```al
|
|
73
|
+
if not NoSeries.AreRelated(CurrentSeries, NewSeries) then
|
|
74
|
+
Error('Series %1 and %2 are not related', CurrentSeries, NewSeries);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Advanced Validation Integration
|
|
78
|
+
|
|
79
|
+
### Batch Validation
|
|
80
|
+
Utilize NoSeriesBatch for validating multiple number allocations:
|
|
81
|
+
```al
|
|
82
|
+
// Validate batch allocation feasibility
|
|
83
|
+
if not NoSeriesBatch.CanAllocateNumbers("No. Series", RequiredCount) then
|
|
84
|
+
Error('Cannot allocate %1 numbers from series %2', RequiredCount, "No. Series");
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Date-Based Validation
|
|
88
|
+
Leverage enhanced date validation in the new module:
|
|
89
|
+
```al
|
|
90
|
+
if not NoSeries.IsValidForDate("No. Series", "Posting Date") then
|
|
91
|
+
Error('Series %1 is not valid for date %2', "No. Series", "Posting Date");
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Cross-Series Validation
|
|
95
|
+
```al
|
|
96
|
+
// Validate consistency across related series
|
|
97
|
+
NoSeries.ValidateRelatedSeries("Primary Series", "Related Series");
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Migration from Legacy Validation
|
|
101
|
+
|
|
102
|
+
### Obsolete Validation Patterns
|
|
103
|
+
**Remove Legacy Patterns**:
|
|
104
|
+
- Custom format checking logic
|
|
105
|
+
- Manual series relationship validation
|
|
106
|
+
- Complex date range validation
|
|
107
|
+
- Direct table validation queries
|
|
108
|
+
|
|
109
|
+
**Replace with Module Methods**:
|
|
110
|
+
- Use built-in `IsValidNo()` for format validation
|
|
111
|
+
- Use `AreRelated()` for relationship checking
|
|
112
|
+
- Use `TestManual()` for manual number validation
|
|
113
|
+
- Use `VerifySeriesExists()` for existence checking
|
|
114
|
+
|
|
115
|
+
### Event Migration Strategy
|
|
116
|
+
**Obsolete Events** (no direct replacement):
|
|
117
|
+
- OnBeforeGetNextNo events
|
|
118
|
+
- OnAfterGetNextNo events
|
|
119
|
+
- Custom validation events in NoSeriesManagement
|
|
120
|
+
|
|
121
|
+
**New Approach**:
|
|
122
|
+
```al
|
|
123
|
+
// Implement validation through direct method calls
|
|
124
|
+
// Use error handling for validation failures
|
|
125
|
+
// Leverage module's built-in logging capabilities
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Enhanced Error Handling
|
|
129
|
+
|
|
130
|
+
### Improved Error Messages
|
|
131
|
+
The new module provides more descriptive error messages with context:
|
|
132
|
+
```al
|
|
133
|
+
// Automatic error context from module
|
|
134
|
+
NoSeries.GetNextNo("No. Series", WorkDate());
|
|
135
|
+
// Provides detailed error if series is invalid, exhausted, or misconfigured
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Structured Exception Handling
|
|
139
|
+
```al
|
|
140
|
+
if not NoSeries.TryGetNextNo(NextNo, "No. Series", WorkDate()) then begin
|
|
141
|
+
// Handle specific validation failure scenarios
|
|
142
|
+
HandleNumberGenerationError("No. Series");
|
|
143
|
+
end;
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Validation Result Processing
|
|
147
|
+
```al
|
|
148
|
+
ValidationResult := NoSeries.ValidateSeriesConfiguration("No. Series");
|
|
149
|
+
if not ValidationResult.Success then
|
|
150
|
+
ProcessValidationErrors(ValidationResult);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Performance-Optimized Validation
|
|
154
|
+
|
|
155
|
+
### Reduced Database Queries
|
|
156
|
+
The new module optimizes validation with fewer database round-trips:
|
|
157
|
+
```al
|
|
158
|
+
// Single call validates multiple aspects
|
|
159
|
+
if NoSeries.IsReadyForGeneration("No. Series", WorkDate()) then
|
|
160
|
+
ProcessNumberGeneration();
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Cached Validation Results
|
|
164
|
+
```al
|
|
165
|
+
// Module handles caching internally
|
|
166
|
+
// Repeated validation calls are optimized
|
|
167
|
+
for i := 1 to DocumentCount do
|
|
168
|
+
NoSeries.GetNextNo("No. Series", WorkDate()); // Cached validation
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Batch Validation Optimization
|
|
172
|
+
```al
|
|
173
|
+
// Validate entire batch before processing
|
|
174
|
+
ValidationResults := NoSeriesBatch.ValidateBatchAllocation("No. Series", BatchSize);
|
|
175
|
+
if ValidationResults.AllValid then
|
|
176
|
+
ProcessBatch();
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Integration with Business Processes
|
|
180
|
+
|
|
181
|
+
### Transaction Validation
|
|
182
|
+
```al
|
|
183
|
+
// Validate number series within transaction context
|
|
184
|
+
NoSeries.ValidateForTransaction("No. Series", TransactionDate);
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Multi-Company Validation
|
|
188
|
+
```al
|
|
189
|
+
// Enhanced support for multi-company scenarios
|
|
190
|
+
NoSeries.ValidateAcrossCompanies("No. Series", CompanyList);
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Audit Trail Integration
|
|
194
|
+
```al
|
|
195
|
+
// Built-in audit trail support
|
|
196
|
+
NoSeries.LogValidationActivity("No. Series", ValidationAction::Validate);
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Best Practices for BC24+
|
|
200
|
+
|
|
201
|
+
### Leverage Built-In Validation
|
|
202
|
+
- Use module's native validation methods instead of custom logic
|
|
203
|
+
- Trust the module's error handling and messaging
|
|
204
|
+
- Utilize built-in logging and audit capabilities
|
|
205
|
+
|
|
206
|
+
### Simplify Validation Logic
|
|
207
|
+
- Remove complex custom validation patterns
|
|
208
|
+
- Focus on business-specific validation requirements
|
|
209
|
+
- Let the module handle technical validation aspects
|
|
210
|
+
|
|
211
|
+
### Error Handling Strategy
|
|
212
|
+
- Implement graceful degradation for validation failures
|
|
213
|
+
- Provide business-friendly error messages
|
|
214
|
+
- Use try-methods for scenarios where validation failure is expected
|
|
215
|
+
|
|
216
|
+
## Common Migration Pitfalls
|
|
217
|
+
|
|
218
|
+
### Over-Validation
|
|
219
|
+
Avoid duplicating validation that the new module already performs internally.
|
|
220
|
+
|
|
221
|
+
### Event Dependency
|
|
222
|
+
Don't rely on obsolete events - redesign validation logic using direct method calls.
|
|
223
|
+
|
|
224
|
+
### Custom Table Access
|
|
225
|
+
Avoid direct table manipulation - use module methods for all series operations.
|
|
226
|
+
|
|
227
|
+
## Testing Validation Migration
|
|
228
|
+
|
|
229
|
+
### Functional Validation Testing
|
|
230
|
+
- Verify all validation scenarios work with new module methods
|
|
231
|
+
- Test error handling and messaging improvements
|
|
232
|
+
- Validate performance improvements in validation-heavy scenarios
|
|
233
|
+
|
|
234
|
+
### Integration Testing
|
|
235
|
+
- Test validation integration with existing business processes
|
|
236
|
+
- Verify compatibility with custom validation requirements
|
|
237
|
+
- Test cross-series validation scenarios
|
|
238
|
+
|
|
239
|
+
### Regression Testing
|
|
240
|
+
- Ensure existing validation behavior is preserved
|
|
241
|
+
- Test edge cases and error conditions
|
|
242
|
+
- Validate performance under load
|
|
243
|
+
|
|
244
|
+
*Complete BC24+ validation examples: samples/no-series-validation-module-bc24.md*
|
|
245
|
+
*Core module patterns: no-series-module-patterns-bc24.md*
|
|
246
|
+
*Migration guidance: bc24-no-series-conversion-guide.md*
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "No Series Validation Patterns"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14..23"
|
|
6
|
+
tags: ["no-series-validation", "data-validation", "integrity-checking", "error-prevention"]
|
|
7
|
+
prerequisites: ["no-series-implementation-patterns", "validation-frameworks", "error-handling"]
|
|
8
|
+
samples: "samples/no-series-validation.md"
|
|
9
|
+
related_topics: ["no-series-implementation-patterns", "data-integrity-patterns"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# No Series Validation Patterns
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
No Series Validation Patterns provide comprehensive approaches for validating number sequences, ensuring data integrity, and preventing common numbering issues in Business Central applications. These patterns help maintain sequence integrity and compliance with business rules.
|
|
17
|
+
|
|
18
|
+
**Key Benefit**: Ensures number sequence integrity and compliance through systematic validation that prevents data corruption and maintains business rule adherence.
|
|
19
|
+
|
|
20
|
+
## Core Validation Architecture
|
|
21
|
+
|
|
22
|
+
### Multi-Layer Validation Strategy
|
|
23
|
+
Implement validation at multiple layers including input validation, business rule validation, and integrity validation to ensure comprehensive coverage.
|
|
24
|
+
|
|
25
|
+
### Real-Time vs. Batch Validation
|
|
26
|
+
Design validation strategies that balance real-time validation for immediate feedback with batch validation for comprehensive integrity checking.
|
|
27
|
+
|
|
28
|
+
### Validation Result Management
|
|
29
|
+
Create systems for managing validation results, tracking issues, and coordinating resolution efforts across different validation scenarios.
|
|
30
|
+
|
|
31
|
+
## Essential Validation Patterns
|
|
32
|
+
|
|
33
|
+
### Format Validation
|
|
34
|
+
Implement validation patterns that ensure generated numbers conform to expected formats, character sets, and length requirements.
|
|
35
|
+
|
|
36
|
+
### Uniqueness Validation
|
|
37
|
+
Design uniqueness checking that can efficiently validate number uniqueness across large datasets while maintaining performance.
|
|
38
|
+
|
|
39
|
+
### Sequence Integrity Validation
|
|
40
|
+
Create validation patterns that check for sequence continuity, gap detection, and sequence corruption issues.
|
|
41
|
+
|
|
42
|
+
## Advanced Validation Techniques
|
|
43
|
+
|
|
44
|
+
### Cross-Reference Validation
|
|
45
|
+
Implement validation that checks number consistency across related tables and ensures referential integrity in number usage.
|
|
46
|
+
|
|
47
|
+
### Business Rule Validation
|
|
48
|
+
Design validation patterns that ensure number generation and usage comply with specific business rules and policies.
|
|
49
|
+
|
|
50
|
+
### Historical Validation
|
|
51
|
+
Create validation capabilities that can check historical number usage and detect retroactive integrity issues.
|
|
52
|
+
|
|
53
|
+
## Validation Framework Architecture
|
|
54
|
+
|
|
55
|
+
### Configurable Validation Rules
|
|
56
|
+
- Design validation frameworks that support configurable rules for different numbering scenarios
|
|
57
|
+
- Enable business users to configure validation criteria through setup interfaces
|
|
58
|
+
- Support dynamic validation rule changes without code modification
|
|
59
|
+
- Provide validation rule testing and simulation capabilities
|
|
60
|
+
|
|
61
|
+
### Validation Pipeline
|
|
62
|
+
Implement sequential validation checks with conditional execution and performance monitoring.
|
|
63
|
+
|
|
64
|
+
## Core Implementation
|
|
65
|
+
|
|
66
|
+
### Error Detection & Reporting
|
|
67
|
+
Categorize errors by severity, provide detailed reports, and implement automated issue detection.
|
|
68
|
+
|
|
69
|
+
### Performance Optimization
|
|
70
|
+
Design efficient algorithms, incremental validation, and intelligent caching for optimal performance.
|
|
71
|
+
|
|
72
|
+
### Business Process Integration
|
|
73
|
+
Integrate with workflows, support transaction validation, and provide real-time feedback.
|
|
74
|
+
|
|
75
|
+
## Advanced Capabilities
|
|
76
|
+
|
|
77
|
+
### Monitoring & Compliance
|
|
78
|
+
Implement metrics collection, health monitoring, and audit trail validation to ensure system reliability and regulatory compliance.
|
|
79
|
+
|
|
80
|
+
### Regulatory Compliance
|
|
81
|
+
Design validation that supports regulatory compliance requirements for number sequence management and documentation.
|
|
82
|
+
|
|
83
|
+
### Compliance Reporting
|
|
84
|
+
Create reporting capabilities that demonstrate compliance with numbering policies and regulatory requirements.
|
|
85
|
+
|
|
86
|
+
## Recovery and Remediation
|
|
87
|
+
|
|
88
|
+
### Validation Failure Recovery
|
|
89
|
+
Design recovery procedures for scenarios where validation failures indicate data integrity issues requiring correction.
|
|
90
|
+
|
|
91
|
+
### Automated Remediation
|
|
92
|
+
Implement automated remediation capabilities for common validation issues that can be safely resolved automatically.
|
|
93
|
+
|
|
94
|
+
### Manual Intervention Support
|
|
95
|
+
Provide tools and procedures for manual intervention in complex validation scenarios requiring human judgment.
|
|
96
|
+
|
|
97
|
+
## Implementation Guidelines
|
|
98
|
+
|
|
99
|
+
### Testing & Best Practices
|
|
100
|
+
Design comprehensive testing strategies, implement early validation, provide actionable feedback, and maintain clear documentation.
|
|
101
|
+
|
|
102
|
+
### Common Pitfalls
|
|
103
|
+
Avoid over-validation, validation gaps, and false positives through balanced design and comprehensive coverage.
|
|
104
|
+
|
|
105
|
+
*Complete validation implementation examples: samples/no-series-validation.md*
|
|
106
|
+
*No series implementation: no-series-implementation-patterns.md*
|
|
107
|
+
*Data integrity frameworks: data-integrity-patterns.md*
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "OData Query Performance Optimization"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["odata", "query-performance", "api-optimization"]
|
|
7
|
+
samples: "samples/odata-query-optimization.md"
|
|
8
|
+
---
|
|
9
|
+
# OData Query Performance Optimization
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
OData query performance in BC API Pages requires understanding how OData expressions translate to SQL queries and how table structure affects execution performance. Proper optimization techniques can dramatically improve API response times and reduce resource consumption.
|
|
14
|
+
|
|
15
|
+
The BC platform automatically translates OData queries into SQL operations against the underlying database. Understanding this translation process helps identify optimization opportunities and avoid performance anti-patterns in API implementations.
|
|
16
|
+
|
|
17
|
+
Query performance varies significantly based on data volume, table structure, indexing strategy, and query complexity. Systematic optimization approaches address these factors to achieve predictable performance characteristics.
|
|
18
|
+
|
|
19
|
+
## Query Translation Mechanisms
|
|
20
|
+
|
|
21
|
+
OData filter expressions map to SQL WHERE clauses with varying efficiency depending on filter complexity and available table keys. Simple equality filters on indexed fields provide optimal performance.
|
|
22
|
+
|
|
23
|
+
Complex filter expressions involving multiple fields, functions, or nested conditions may result in less efficient SQL queries. Understanding the translation patterns helps structure OData queries for optimal database execution.
|
|
24
|
+
|
|
25
|
+
The BC platform may choose different execution strategies based on available indexes and query complexity. Monitoring actual SQL execution provides insight into optimization opportunities.
|
|
26
|
+
|
|
27
|
+
## Filter Optimization Strategies
|
|
28
|
+
|
|
29
|
+
Structure OData filters to leverage available table keys and indexes. Leading filter conditions should target the most selective indexed fields to minimize result set size early in query execution.
|
|
30
|
+
|
|
31
|
+
Avoid complex expressions in filter conditions that prevent index usage. Simple comparisons perform better than function calls or complex logical combinations that cannot be optimized by the query engine.
|
|
32
|
+
|
|
33
|
+
Consider the order of filter conditions in complex expressions. The BC query optimizer may not reorder conditions for optimal performance, making condition ordering an important performance factor.
|
|
34
|
+
|
|
35
|
+
## Projection and Field Selection
|
|
36
|
+
|
|
37
|
+
Use OData $select queries to limit returned fields to only those required by the API consumer. This reduces network transfer overhead and can improve query performance by avoiding unnecessary field retrieval.
|
|
38
|
+
|
|
39
|
+
Avoid selecting large text fields, BLOB fields, or complex calculated fields unless specifically required. These field types consume significant resources and can dramatically impact query performance.
|
|
40
|
+
|
|
41
|
+
Strategic field selection can sometimes influence query execution plans by reducing the data volume processed during query execution and result set construction.
|
|
42
|
+
|
|
43
|
+
## Sorting and Pagination Performance
|
|
44
|
+
|
|
45
|
+
OData $orderby operations require careful optimization to avoid performance issues with large result sets. Ensure sort fields have appropriate indexes or are part of existing table key structures.
|
|
46
|
+
|
|
47
|
+
Implement proper pagination using $skip and $top parameters to limit result set size. Large result sets without pagination can cause timeout issues and resource exhaustion in both BC and API consumers.
|
|
48
|
+
|
|
49
|
+
Consider the impact of sort operations on temporary storage requirements. Complex sorts on large datasets may require significant temporary storage allocation during query execution.
|
|
50
|
+
|
|
51
|
+
## Aggregation Query Optimization
|
|
52
|
+
|
|
53
|
+
OData aggregation queries using $apply operations require special consideration for performance optimization. These queries can be particularly resource-intensive and may benefit from specialized indexing strategies.
|
|
54
|
+
|
|
55
|
+
Consider using SIFT technology for frequently executed aggregation operations. SIFT provides pre-calculated aggregations that can dramatically improve performance for common aggregation patterns.
|
|
56
|
+
|
|
57
|
+
Monitor aggregation query performance closely as these operations can consume significant CPU and memory resources, especially with large datasets and complex grouping requirements.
|
|
58
|
+
|
|
59
|
+
## Expansion and Navigation Performance
|
|
60
|
+
|
|
61
|
+
OData $expand operations that traverse table relationships require optimization to prevent performance issues. Each expansion level adds complexity and resource requirements to query execution.
|
|
62
|
+
|
|
63
|
+
Limit expansion depth and scope to only required related data. Deep expansions across multiple table relationships can result in cartesian product scenarios that consume excessive resources.
|
|
64
|
+
|
|
65
|
+
Consider the performance impact of expanding one-to-many relationships which can dramatically increase result set size and processing requirements.
|
|
66
|
+
|
|
67
|
+
## Caching and Performance Patterns
|
|
68
|
+
|
|
69
|
+
Understand BC platform caching behavior for API queries to optimize for cache effectiveness. Repeated queries with identical parameters may benefit from platform-level caching mechanisms.
|
|
70
|
+
|
|
71
|
+
Design API query patterns that align with BC caching strategies. This may involve structuring queries to maximize cache hit ratios and minimize cache invalidation scenarios.
|
|
72
|
+
|
|
73
|
+
Consider implementing application-level caching for expensive queries that don't require real-time data. This can significantly reduce database load and improve overall system performance.
|
|
74
|
+
|
|
75
|
+
## Resource Management
|
|
76
|
+
|
|
77
|
+
Monitor resource consumption for API queries including CPU utilization, memory usage, and database connection requirements. High-resource queries can impact overall system performance.
|
|
78
|
+
|
|
79
|
+
Implement appropriate timeout settings for API queries to prevent resource exhaustion from long-running operations. Balance timeout values with legitimate query execution requirements.
|
|
80
|
+
|
|
81
|
+
Consider connection pooling and resource allocation strategies for high-volume API scenarios. Resource contention can significantly impact query performance under load.
|
|
82
|
+
|
|
83
|
+
## Performance Testing and Validation
|
|
84
|
+
|
|
85
|
+
Establish performance baselines for critical API queries under realistic data volumes. Performance characteristics often change dramatically as data volumes increase.
|
|
86
|
+
|
|
87
|
+
Test query performance with production-like data distributions and volumes. Development environment testing may not reveal performance issues that occur with production data characteristics.
|
|
88
|
+
|
|
89
|
+
Implement automated performance monitoring for critical API endpoints to detect performance degradation early and enable proactive optimization efforts.
|
|
90
|
+
|
|
91
|
+
## Troubleshooting Performance Issues
|
|
92
|
+
|
|
93
|
+
Use BC telemetry and database performance monitoring tools to identify slow-performing queries and understand root cause performance issues.
|
|
94
|
+
|
|
95
|
+
Analyze actual SQL query execution plans generated from OData queries to identify optimization opportunities and understand query execution characteristics.
|
|
96
|
+
|
|
97
|
+
Monitor for common performance anti-patterns including table scans, excessive temporary storage usage, and resource contention issues that impact query execution.
|
|
98
|
+
|
|
99
|
+
## Best Practices
|
|
100
|
+
|
|
101
|
+
Design OData query patterns based on available table structures and indexing strategies rather than generic OData capabilities. Align query design with underlying database optimization principles.
|
|
102
|
+
|
|
103
|
+
Balance query functionality with performance requirements. Complex OData queries provide flexibility but may sacrifice performance compared to simpler, more targeted query approaches.
|
|
104
|
+
|
|
105
|
+
Document performance assumptions and optimization decisions for critical API endpoints. This documentation supports ongoing performance management and troubleshooting efforts.
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# BC24 No. Series Conversion Examples
|
|
2
|
+
|
|
3
|
+
## Complete Conversion Examples
|
|
4
|
+
|
|
5
|
+
### Sales Document Conversion
|
|
6
|
+
```al
|
|
7
|
+
// BEFORE (BC14-23): Legacy NoSeriesManagement approach
|
|
8
|
+
table 50100 "Sales Document"
|
|
9
|
+
{
|
|
10
|
+
trigger OnInsert()
|
|
11
|
+
var
|
|
12
|
+
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
13
|
+
begin
|
|
14
|
+
if "No." = '' then
|
|
15
|
+
NoSeriesMgt.InitSeries(GetNoSeriesCode(), xRec."No. Series", 0D, "No.", "No. Series");
|
|
16
|
+
end;
|
|
17
|
+
|
|
18
|
+
procedure GetNoSeriesCode(): Code[20]
|
|
19
|
+
begin
|
|
20
|
+
exit('SALES-DOC');
|
|
21
|
+
end;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// AFTER (BC24+): New No. Series module approach
|
|
25
|
+
table 50100 "Sales Document"
|
|
26
|
+
{
|
|
27
|
+
trigger OnInsert()
|
|
28
|
+
var
|
|
29
|
+
NoSeries: Codeunit "No. Series";
|
|
30
|
+
begin
|
|
31
|
+
if "No." = '' then
|
|
32
|
+
"No." := NoSeries.GetNextNo("No. Series", WorkDate());
|
|
33
|
+
end;
|
|
34
|
+
|
|
35
|
+
procedure GetNoSeriesCode(): Code[20]
|
|
36
|
+
begin
|
|
37
|
+
exit('SALES-DOC');
|
|
38
|
+
end;
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Manual Number Testing Conversion
|
|
43
|
+
```al
|
|
44
|
+
// BEFORE (BC14-23): Multiple method calls for manual testing
|
|
45
|
+
procedure ValidateManualEntry()
|
|
46
|
+
var
|
|
47
|
+
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
48
|
+
begin
|
|
49
|
+
NoSeriesMgt.TestManual("No. Series");
|
|
50
|
+
if not NoSeriesMgt.ManualNoAllowed("No. Series") then
|
|
51
|
+
Error('Manual numbers not allowed for series %1', "No. Series");
|
|
52
|
+
end;
|
|
53
|
+
|
|
54
|
+
// AFTER (BC24+): Single method with built-in logic
|
|
55
|
+
procedure ValidateManualEntry()
|
|
56
|
+
var
|
|
57
|
+
NoSeries: Codeunit "No. Series";
|
|
58
|
+
begin
|
|
59
|
+
NoSeries.TestManual("No. Series");
|
|
60
|
+
// Built-in error handling provides comprehensive validation
|
|
61
|
+
end;
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Number Peek vs Allocation Conversion
|
|
65
|
+
```al
|
|
66
|
+
// BEFORE (BC14-23): Boolean parameter controls behavior
|
|
67
|
+
procedure GetNumberPreview(): Code[20]
|
|
68
|
+
var
|
|
69
|
+
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
70
|
+
begin
|
|
71
|
+
exit(NoSeriesMgt.GetNextNo("No. Series", WorkDate(), false)); // Peek only
|
|
72
|
+
end;
|
|
73
|
+
|
|
74
|
+
procedure AllocateNumber(): Code[20]
|
|
75
|
+
var
|
|
76
|
+
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
77
|
+
begin
|
|
78
|
+
exit(NoSeriesMgt.GetNextNo("No. Series", WorkDate(), true)); // Allocate
|
|
79
|
+
end;
|
|
80
|
+
|
|
81
|
+
// AFTER (BC24+): Explicit method names for clear intent
|
|
82
|
+
procedure GetNumberPreview(): Code[20]
|
|
83
|
+
var
|
|
84
|
+
NoSeries: Codeunit "No. Series";
|
|
85
|
+
begin
|
|
86
|
+
exit(NoSeries.PeekNextNo("No. Series", WorkDate())); // Explicit peek
|
|
87
|
+
end;
|
|
88
|
+
|
|
89
|
+
procedure AllocateNumber(): Code[20]
|
|
90
|
+
var
|
|
91
|
+
NoSeries: Codeunit "No. Series";
|
|
92
|
+
begin
|
|
93
|
+
exit(NoSeries.GetNextNo("No. Series", WorkDate())); // Explicit allocation
|
|
94
|
+
end;
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Event Migration Examples
|
|
98
|
+
|
|
99
|
+
### Replacing Obsolete Events
|
|
100
|
+
```al
|
|
101
|
+
// BEFORE (BC14-23): Event subscriber approach
|
|
102
|
+
[EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnBeforeGetNextNo', '', true, true)]
|
|
103
|
+
local procedure OnBeforeGetNextNo(NoSeriesCode: Code[20]; var NoSeriesLine: Record "No. Series Line"; var IsHandled: Boolean)
|
|
104
|
+
begin
|
|
105
|
+
// Custom logic before number generation
|
|
106
|
+
if NoSeriesCode = 'SPECIAL-SERIES' then begin
|
|
107
|
+
PerformCustomValidation(NoSeriesCode);
|
|
108
|
+
IsHandled := true;
|
|
109
|
+
end;
|
|
110
|
+
end;
|
|
111
|
+
|
|
112
|
+
// AFTER (BC24+): Direct method call with wrapper
|
|
113
|
+
procedure GetNextNoWithCustomLogic(SeriesCode: Code[20]): Code[20]
|
|
114
|
+
var
|
|
115
|
+
NoSeries: Codeunit "No. Series";
|
|
116
|
+
begin
|
|
117
|
+
// Pre-processing logic (replaces OnBeforeGetNextNo)
|
|
118
|
+
if SeriesCode = 'SPECIAL-SERIES' then
|
|
119
|
+
PerformCustomValidation(SeriesCode);
|
|
120
|
+
|
|
121
|
+
// Get number using new module
|
|
122
|
+
exit(NoSeries.GetNextNo(SeriesCode, WorkDate()));
|
|
123
|
+
end;
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Complex Event Replacement
|
|
127
|
+
```al
|
|
128
|
+
// BEFORE (BC14-23): Multiple event subscriptions
|
|
129
|
+
[EventSubscriber(ObjectType::Codeunit, Codeunit::NoSeriesManagement, 'OnAfterGetNextNo', '', true, true)]
|
|
130
|
+
local procedure OnAfterGetNextNo(NoSeriesCode: Code[20]; NextNo: Code[20])
|
|
131
|
+
begin
|
|
132
|
+
LogNumberAllocation(NoSeriesCode, NextNo);
|
|
133
|
+
UpdateRelatedSeries(NoSeriesCode, NextNo);
|
|
134
|
+
end;
|
|
135
|
+
|
|
136
|
+
// AFTER (BC24+): Integrated procedure with post-processing
|
|
137
|
+
procedure AllocateNumberWithLogging(SeriesCode: Code[20]): Code[20]
|
|
138
|
+
var
|
|
139
|
+
NoSeries: Codeunit "No. Series";
|
|
140
|
+
AllocatedNumber: Code[20];
|
|
141
|
+
begin
|
|
142
|
+
// Allocate number
|
|
143
|
+
AllocatedNumber := NoSeries.GetNextNo(SeriesCode, WorkDate());
|
|
144
|
+
|
|
145
|
+
// Post-processing logic (replaces OnAfterGetNextNo)
|
|
146
|
+
LogNumberAllocation(SeriesCode, AllocatedNumber);
|
|
147
|
+
UpdateRelatedSeries(SeriesCode, AllocatedNumber);
|
|
148
|
+
|
|
149
|
+
exit(AllocatedNumber);
|
|
150
|
+
end;
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Complete Migration Checklist
|
|
154
|
+
|
|
155
|
+
### Step 1: Variable Declaration Updates
|
|
156
|
+
```al
|
|
157
|
+
// Remove these legacy declarations
|
|
158
|
+
var
|
|
159
|
+
NoSeriesMgt: Codeunit NoSeriesManagement;
|
|
160
|
+
|
|
161
|
+
// Replace with new module references
|
|
162
|
+
var
|
|
163
|
+
NoSeries: Codeunit "No. Series";
|
|
164
|
+
NoSeriesBatch: Codeunit "No. Series - Batch";
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Step 2: Method Call Replacements
|
|
168
|
+
```al
|
|
169
|
+
// Replace all instances of these patterns:
|
|
170
|
+
NoSeriesMgt.InitSeries(...) → NoSeries.GetNextNo(...)
|
|
171
|
+
NoSeriesMgt.TestManual(...) → NoSeries.TestManual(...)
|
|
172
|
+
NoSeriesMgt.SelectSeries(...) → NoSeries.LookupRelatedNoSeries(...)
|
|
173
|
+
NoSeriesMgt.GetNextNo(..., false) → NoSeries.PeekNextNo(...)
|
|
174
|
+
NoSeriesMgt.GetNextNo(..., true) → NoSeries.GetNextNo(...)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Step 3: Error Handling Migration
|
|
178
|
+
```al
|
|
179
|
+
// BEFORE: Custom error handling required
|
|
180
|
+
if not NoSeriesMgt.TryFunction(...) then
|
|
181
|
+
Error('Custom error message');
|
|
182
|
+
|
|
183
|
+
// AFTER: Built-in error handling with try methods
|
|
184
|
+
if not NoSeries.TryGetNextNo(ResultNo, SeriesCode, WorkDate()) then
|
|
185
|
+
HandleSpecificFailureScenario();
|
|
186
|
+
```
|