@jwikman/bc-code-intelligence-mcp 1.5.7-dev.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 +165 -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 +440 -0
- package/dist/cli/bc-code-intel-cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +28 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +497 -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 +608 -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 +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1211 -0
- package/dist/index.js.map +1 -0
- package/dist/layers/base-layer.d.ts +133 -0
- package/dist/layers/base-layer.d.ts.map +1 -0
- package/dist/layers/base-layer.js +290 -0
- package/dist/layers/base-layer.js.map +1 -0
- package/dist/layers/embedded-layer.d.ts +130 -0
- package/dist/layers/embedded-layer.d.ts.map +1 -0
- package/dist/layers/embedded-layer.js +612 -0
- package/dist/layers/embedded-layer.js.map +1 -0
- package/dist/layers/git-layer.d.ts +77 -0
- package/dist/layers/git-layer.d.ts.map +1 -0
- package/dist/layers/git-layer.js +529 -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 +135 -0
- package/dist/layers/layer-service.d.ts.map +1 -0
- package/dist/layers/layer-service.js +586 -0
- package/dist/layers/layer-service.js.map +1 -0
- package/dist/layers/project-layer.d.ts +58 -0
- package/dist/layers/project-layer.d.ts.map +1 -0
- package/dist/layers/project-layer.js +286 -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 +358 -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 +818 -0
- package/dist/services/code-analysis-service.js.map +1 -0
- package/dist/services/enhanced-prompt-service.d.ts +56 -0
- package/dist/services/enhanced-prompt-service.d.ts.map +1 -0
- package/dist/services/enhanced-prompt-service.js +165 -0
- package/dist/services/enhanced-prompt-service.js.map +1 -0
- package/dist/services/knowledge-service.d.ts +90 -0
- package/dist/services/knowledge-service.d.ts.map +1 -0
- package/dist/services/knowledge-service.js +342 -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 +423 -0
- package/dist/services/methodology-service.js.map +1 -0
- package/dist/services/multi-content-layer-service.d.ts +198 -0
- package/dist/services/multi-content-layer-service.d.ts.map +1 -0
- package/dist/services/multi-content-layer-service.js +991 -0
- package/dist/services/multi-content-layer-service.js.map +1 -0
- package/dist/services/roleplay-engine.d.ts +161 -0
- package/dist/services/roleplay-engine.d.ts.map +1 -0
- package/dist/services/roleplay-engine.js +994 -0
- package/dist/services/roleplay-engine.js.map +1 -0
- package/dist/services/session-storage/file-storage.d.ts +30 -0
- package/dist/services/session-storage/file-storage.d.ts.map +1 -0
- package/dist/services/session-storage/file-storage.js +229 -0
- package/dist/services/session-storage/file-storage.js.map +1 -0
- package/dist/services/session-storage/in-memory-storage.d.ts +31 -0
- package/dist/services/session-storage/in-memory-storage.d.ts.map +1 -0
- package/dist/services/session-storage/in-memory-storage.js +142 -0
- package/dist/services/session-storage/in-memory-storage.js.map +1 -0
- package/dist/services/specialist-discovery.d.ts +98 -0
- package/dist/services/specialist-discovery.d.ts.map +1 -0
- package/dist/services/specialist-discovery.js +387 -0
- package/dist/services/specialist-discovery.js.map +1 -0
- package/dist/services/specialist-loader.d.ts +101 -0
- package/dist/services/specialist-loader.d.ts.map +1 -0
- package/dist/services/specialist-loader.js +256 -0
- package/dist/services/specialist-loader.js.map +1 -0
- package/dist/services/specialist-session-manager.d.ts +76 -0
- package/dist/services/specialist-session-manager.d.ts.map +1 -0
- package/dist/services/specialist-session-manager.js +255 -0
- package/dist/services/specialist-session-manager.js.map +1 -0
- package/dist/services/workflow-service.d.ts +146 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +409 -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 +94 -0
- package/dist/streamlined-handlers.d.ts.map +1 -0
- package/dist/streamlined-handlers.js +665 -0
- package/dist/streamlined-handlers.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/tools/config-diagnostic-tools.d.ts +234 -0
- package/dist/tools/config-diagnostic-tools.d.ts.map +1 -0
- package/dist/tools/config-diagnostic-tools.js +887 -0
- package/dist/tools/config-diagnostic-tools.js.map +1 -0
- package/dist/tools/core-tools.d.ts +26 -0
- package/dist/tools/core-tools.d.ts.map +1 -0
- package/dist/tools/core-tools.js +241 -0
- package/dist/tools/core-tools.js.map +1 -0
- package/dist/tools/handoff-tools.d.ts +37 -0
- package/dist/tools/handoff-tools.d.ts.map +1 -0
- package/dist/tools/handoff-tools.js +265 -0
- package/dist/tools/handoff-tools.js.map +1 -0
- package/dist/tools/index.d.ts +61 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +75 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/onboarding-tools.d.ts +43 -0
- package/dist/tools/onboarding-tools.d.ts.map +1 -0
- package/dist/tools/onboarding-tools.js +353 -0
- package/dist/tools/onboarding-tools.js.map +1 -0
- package/dist/tools/specialist-discovery-tools.d.ts +27 -0
- package/dist/tools/specialist-discovery-tools.d.ts.map +1 -0
- package/dist/tools/specialist-discovery-tools.js +275 -0
- package/dist/tools/specialist-discovery-tools.js.map +1 -0
- package/dist/tools/specialist-tools.d.ts +43 -0
- package/dist/tools/specialist-tools.d.ts.map +1 -0
- package/dist/tools/specialist-tools.js +372 -0
- package/dist/tools/specialist-tools.js.map +1 -0
- package/dist/tools/workspace-tools.d.ts +96 -0
- package/dist/tools/workspace-tools.d.ts.map +1 -0
- package/dist/tools/workspace-tools.js +188 -0
- package/dist/tools/workspace-tools.js.map +1 -0
- package/dist/types/bc-knowledge.d.ts +303 -0
- package/dist/types/bc-knowledge.d.ts.map +1 -0
- package/dist/types/bc-knowledge.js +69 -0
- package/dist/types/bc-knowledge.js.map +1 -0
- package/dist/types/config-types.d.ts +186 -0
- package/dist/types/config-types.d.ts.map +1 -0
- package/dist/types/config-types.js +109 -0
- package/dist/types/config-types.js.map +1 -0
- package/dist/types/enhanced-layer-types.d.ts +193 -0
- package/dist/types/enhanced-layer-types.d.ts.map +1 -0
- package/dist/types/enhanced-layer-types.js +9 -0
- package/dist/types/enhanced-layer-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 +173 -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/roleplay-types.d.ts +156 -0
- package/dist/types/roleplay-types.d.ts.map +1 -0
- package/dist/types/roleplay-types.js +8 -0
- package/dist/types/roleplay-types.js.map +1 -0
- package/dist/types/session-types.d.ts +127 -0
- package/dist/types/session-types.d.ts.map +1 -0
- package/dist/types/session-types.js +8 -0
- package/dist/types/session-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 +178 -0
- package/embedded-knowledge/CONTRIBUTING.md +58 -0
- package/embedded-knowledge/LICENSE +21 -0
- package/embedded-knowledge/README.md +32 -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/delegating-to-github-copilot-agents.md +371 -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/object-id-ninja-integration.md +281 -0
- package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +248 -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/samples/testability-design-patterns.md +223 -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/alex-architect/testability-design-patterns.md +77 -0
- package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +263 -0
- package/embedded-knowledge/domains/casey-copilot/samples/long-running-session-instructions.md +323 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +846 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +595 -0
- package/embedded-knowledge/domains/chris-config/content-types-structure.md +421 -0
- package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +437 -0
- package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +257 -0
- package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +302 -0
- package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +336 -0
- package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +453 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +360 -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/recommend-bc-telemetry-buddy.md +160 -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/codeunit-run-pattern.md +159 -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/codeunit-run-pattern.md +239 -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/samples/try-function-usage.md +195 -0
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +80 -0
- package/embedded-knowledge/domains/eva-errors/try-function-usage.md +129 -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/morgan-market/partner-readiness-analysis.md +201 -0
- package/embedded-knowledge/domains/morgan-market/samples/partner-readiness-checklist.md +288 -0
- package/embedded-knowledge/domains/parker-pragmatic/README.md +39 -0
- package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +583 -0
- package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +587 -0
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +119 -0
- package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +82 -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/isolation-testing-patterns.md +424 -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/roger-reviewer/samples/testability-code-smells.md +256 -0
- package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +67 -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/shared/al-file-naming-conventions.md +146 -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/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +535 -0
- package/embedded-knowledge/specialists/alex-architect.md +305 -0
- package/embedded-knowledge/specialists/casey-copilot.md +314 -0
- package/embedded-knowledge/specialists/chris-config.md +226 -0
- package/embedded-knowledge/specialists/dean-debug.md +365 -0
- package/embedded-knowledge/specialists/eva-errors.md +291 -0
- package/embedded-knowledge/specialists/jordan-bridge.md +291 -0
- package/embedded-knowledge/specialists/logan-legacy.md +265 -0
- package/embedded-knowledge/specialists/maya-mentor.md +299 -0
- package/embedded-knowledge/specialists/morgan-market.md +281 -0
- package/embedded-knowledge/specialists/parker-pragmatic.md +564 -0
- package/embedded-knowledge/specialists/quinn-tester.md +323 -0
- package/embedded-knowledge/specialists/roger-reviewer.md +317 -0
- package/embedded-knowledge/specialists/sam-coder.md +342 -0
- package/embedded-knowledge/specialists/seth-security.md +290 -0
- package/embedded-knowledge/specialists/taylor-docs.md +312 -0
- package/embedded-knowledge/specialists/uma-ux.md +291 -0
- package/package.json +82 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "SetLoadFields Partial Loading Performance Impact"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["performance", "memory-optimization", "data-loading", "setloadfields"]
|
|
7
|
+
samples: "samples/setloadfields-performance.md"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# SetLoadFields Partial Loading Performance Impact
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
SetLoadFields enables partial record loading in Business Central, fundamentally changing data retrieval from traditional full-record loading to selective field loading. This optimization reduces memory overhead and database I/O by loading only specified fields rather than entire record structures.
|
|
15
|
+
|
|
16
|
+
**Key Impact**: Performance gains scale with field count differential - loading 3 fields from a 50-field table shows dramatic improvement, while loading 45 fields shows minimal benefit.
|
|
17
|
+
|
|
18
|
+
## Strategic Framework
|
|
19
|
+
|
|
20
|
+
### High-Impact Scenarios
|
|
21
|
+
- **Large field count tables** (20+ fields) where only 2-3 fields needed
|
|
22
|
+
- **Blob field tables** (images, documents) when blob data won't be accessed
|
|
23
|
+
- **Batch processing operations** handling large datasets
|
|
24
|
+
- **Cloud environments** where bandwidth optimization is critical
|
|
25
|
+
|
|
26
|
+
### Low-Impact Scenarios
|
|
27
|
+
- Small tables with few fields
|
|
28
|
+
- Operations requiring most table fields
|
|
29
|
+
- Single-record lookups with minimal field requirements
|
|
30
|
+
|
|
31
|
+
### Decision Threshold
|
|
32
|
+
Apply SetLoadFields when loading less than 30% of available table fields for meaningful performance gains.
|
|
33
|
+
|
|
34
|
+
## Architecture Focus
|
|
35
|
+
|
|
36
|
+
### Memory Optimization Pattern
|
|
37
|
+
SetLoadFields restricts AL's data retrieval to specified fields only, reducing the in-memory footprint proportional to field count reduction. This is particularly effective with tables containing blob fields or wide data structures.
|
|
38
|
+
|
|
39
|
+
### Query Performance Impact
|
|
40
|
+
Database queries become more efficient through reduced data transfer and faster result set processing. The optimization compounds in batch operations where multiple records are processed.
|
|
41
|
+
|
|
42
|
+
### Critical Constraint
|
|
43
|
+
Once a record is loaded with SetLoadFields, accessing non-loaded fields triggers automatic reloading of the entire record, potentially negating performance benefits if field access patterns aren't carefully planned.
|
|
44
|
+
|
|
45
|
+
## Best Practices
|
|
46
|
+
|
|
47
|
+
### Implementation Strategy
|
|
48
|
+
- **Analyze field usage patterns** before applying SetLoadFields
|
|
49
|
+
- **Group related field access** to minimize reload triggers
|
|
50
|
+
- **Apply consistently** in batch processing scenarios
|
|
51
|
+
- **Monitor performance impact** to validate optimization effectiveness
|
|
52
|
+
|
|
53
|
+
### Field Selection Approach
|
|
54
|
+
Include all fields that will be accessed during the operation lifecycle to prevent expensive record reloads. Consider both direct field access and indirect access through related functions.
|
|
55
|
+
|
|
56
|
+
### Batch Operation Optimization
|
|
57
|
+
SetLoadFields provides compound benefits in loops and bulk operations where the memory and I/O savings multiply across record count.
|
|
58
|
+
|
|
59
|
+
## Anti-Patterns
|
|
60
|
+
|
|
61
|
+
### Incomplete Field Loading
|
|
62
|
+
Loading a subset of fields only to access additional fields later in the process, triggering expensive full record reloads that eliminate performance gains.
|
|
63
|
+
|
|
64
|
+
### Overuse in Small Tables
|
|
65
|
+
Applying SetLoadFields to tables with few fields where the optimization overhead exceeds the potential benefits.
|
|
66
|
+
|
|
67
|
+
### Ignoring Access Patterns
|
|
68
|
+
Implementing SetLoadFields without analyzing actual field usage patterns, leading to frequent reloads and degraded performance.
|
|
69
|
+
|
|
70
|
+
*Performance measurement samples: see samples/setloadfields-performance.md*
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "AL SetLoadFields Performance Optimization"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["performance", "setloadfields", "optimization", "memory", "data-access"]
|
|
7
|
+
samples: "samples/setloadfields-optimization.md"
|
|
8
|
+
type: "performance-pattern"
|
|
9
|
+
category: "optimization"
|
|
10
|
+
pattern_type: "good"
|
|
11
|
+
severity: "medium"
|
|
12
|
+
impact_level: "high"
|
|
13
|
+
improvement_suggestion: "Use SetLoadFields for selective field loading to optimize memory and performance"
|
|
14
|
+
implementation_steps: ["analyze-field-usage", "implement-setloadfields", "measure-performance-impact"]
|
|
15
|
+
validation_criteria: ["memory-reduction", "performance-improvement", "maintained-functionality"]
|
|
16
|
+
technical_areas: ["al-code", "performance"]
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# AL SetLoadFields Performance Optimization
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
SetLoadFields enables selective field loading in AL, dramatically reducing memory consumption and improving performance by loading only required fields from database records. This optimization becomes critical when processing large datasets or working with tables containing many fields.
|
|
24
|
+
|
|
25
|
+
**Performance Impact**: Can reduce memory usage by 70-90% and improve query performance by 50-80% when properly implemented.
|
|
26
|
+
|
|
27
|
+
**Key Decision**: Use SetLoadFields before any record operations that don't require all table fields.
|
|
28
|
+
|
|
29
|
+
## Strategic Framework
|
|
30
|
+
|
|
31
|
+
### When SetLoadFields Delivers Maximum Value
|
|
32
|
+
- **Large table processing** with 20+ fields where only subset needed
|
|
33
|
+
- **Bulk operations** processing thousands of records
|
|
34
|
+
- **Report generation** requiring specific field combinations
|
|
35
|
+
- **Integration scenarios** transferring selective data sets
|
|
36
|
+
- **Memory-constrained environments** where optimization is critical
|
|
37
|
+
|
|
38
|
+
### Optimal Implementation Patterns
|
|
39
|
+
- **Early Declaration**: Set fields immediately after record variable declaration
|
|
40
|
+
- **Minimal Field Sets**: Load only fields actually used in subsequent operations
|
|
41
|
+
- **Consistent Application**: Apply across entire data access workflow
|
|
42
|
+
- **Documentation Strategy**: Document field selection rationale for maintainability
|
|
43
|
+
|
|
44
|
+
## Architecture Focus
|
|
45
|
+
|
|
46
|
+
### Memory Optimization Architecture
|
|
47
|
+
SetLoadFields creates partial record instances containing only specified fields, significantly reducing memory footprint during record processing. The AL runtime optimizes database queries to retrieve only requested fields.
|
|
48
|
+
|
|
49
|
+
### Data Access Pattern Integration
|
|
50
|
+
- **Query Planning**: Database optimizer uses field specifications for efficient query execution
|
|
51
|
+
- **Network Efficiency**: Reduced data transmission between database and application server
|
|
52
|
+
- **Memory Allocation**: Smaller record instances improve garbage collection performance
|
|
53
|
+
- **Caching Benefits**: More records fit in memory caches due to reduced size
|
|
54
|
+
|
|
55
|
+
### Performance Monitoring Integration
|
|
56
|
+
Track SetLoadFields effectiveness through telemetry monitoring field loading patterns, memory usage reduction, and query performance improvements.
|
|
57
|
+
|
|
58
|
+
## Best Practices
|
|
59
|
+
|
|
60
|
+
### Field Selection Strategy
|
|
61
|
+
- **Usage Analysis**: Profile actual field usage patterns before optimization
|
|
62
|
+
- **Minimal Sets**: Include only fields accessed in subsequent code execution
|
|
63
|
+
- **Primary Key Inclusion**: Always include primary key fields for record identification
|
|
64
|
+
- **Calculated Field Considerations**: Include base fields required for FlowField calculations
|
|
65
|
+
|
|
66
|
+
### Implementation Patterns
|
|
67
|
+
- **Early Application**: Call SetLoadFields immediately after record declaration
|
|
68
|
+
- **Consistent Scope**: Apply same field set throughout logical operation scope
|
|
69
|
+
- **Update Coordination**: Ensure field sets include all fields modified during updates
|
|
70
|
+
- **Error Handling**: Plan for scenarios where additional fields become necessary
|
|
71
|
+
|
|
72
|
+
### Performance Validation
|
|
73
|
+
- **Before/After Measurement**: Compare memory and performance metrics with/without optimization
|
|
74
|
+
- **Load Testing**: Validate optimization effectiveness under realistic data volumes
|
|
75
|
+
- **Memory Profiling**: Monitor actual memory usage reduction in production scenarios
|
|
76
|
+
- **Query Analysis**: Verify database query optimization through execution plan analysis
|
|
77
|
+
|
|
78
|
+
## Anti-Patterns
|
|
79
|
+
|
|
80
|
+
### Avoid These Approaches
|
|
81
|
+
- **Over-Optimization**: Applying SetLoadFields for small record sets where overhead exceeds benefits
|
|
82
|
+
- **Incomplete Field Sets**: Missing critical fields causing runtime errors or additional queries
|
|
83
|
+
- **Dynamic Field Requirements**: Using SetLoadFields where field needs vary significantly during execution
|
|
84
|
+
- **Maintenance Complexity**: Creating overly complex field selection logic that's difficult to maintain
|
|
85
|
+
- **Late Application**: Calling SetLoadFields after initial record operations
|
|
86
|
+
- **Inconsistent Usage**: Mixing optimized and non-optimized patterns within same workflow
|
|
87
|
+
- **Primary Key Omission**: Excluding primary key fields breaking record operations
|
|
88
|
+
|
|
89
|
+
*Implementation examples: see samples/setloadfields-optimization.md*
|
|
90
|
+
*Related patterns: al-performance-optimization.md, memory-management-patterns.md*
|
package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "SetLoadFields Placement Before Case Statements"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "advanced"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["setloadfields", "case-statements", "conditional-logic", "advanced"]
|
|
7
|
+
prerequisites: ["setloadfields-placement-before-filters", "case-statement-patterns"]
|
|
8
|
+
samples: "samples/setloadfields-before-case.md"
|
|
9
|
+
---
|
|
10
|
+
# SetLoadFields Placement Before Case Statements
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
SetLoadFields placement before CASE statements enables field loading optimization in conditional processing scenarios. When record processing involves multiple execution paths with different field requirements, proper SetLoadFields placement ensures optimal performance across all code paths.
|
|
15
|
+
|
|
16
|
+
This advanced optimization technique is critical for complex business logic where field usage varies significantly based on record state, business rules, or processing context.
|
|
17
|
+
|
|
18
|
+
## Conditional Processing Challenge
|
|
19
|
+
|
|
20
|
+
CASE statements and complex conditional logic create scenarios where different execution paths require different sets of fields. Without careful optimization, developers often load all potentially needed fields upfront, resulting in over-loading and reduced performance.
|
|
21
|
+
|
|
22
|
+
The challenge is optimizing field loading when you don't know which execution path will be taken until runtime evaluation of record values or business conditions.
|
|
23
|
+
|
|
24
|
+
## Strategic Placement Benefits
|
|
25
|
+
|
|
26
|
+
Placing SetLoadFields before CASE statements allows you to:
|
|
27
|
+
- Load common fields needed across multiple execution paths
|
|
28
|
+
- Avoid over-loading fields needed only in specific conditions
|
|
29
|
+
- Maintain performance optimization while supporting complex business logic
|
|
30
|
+
- Create clear separation between data access optimization and business logic
|
|
31
|
+
|
|
32
|
+
This placement strategy works because SetLoadFields affects subsequent data access operations regardless of the conditional logic that determines which operations are executed.
|
|
33
|
+
|
|
34
|
+
## Multi-Path Optimization
|
|
35
|
+
|
|
36
|
+
In scenarios with multiple execution paths, analyze field usage across all possible paths to identify:
|
|
37
|
+
- Common fields needed in all execution paths
|
|
38
|
+
- Path-specific fields needed only in certain conditions
|
|
39
|
+
- Fields that can be conditionally loaded within specific execution paths
|
|
40
|
+
|
|
41
|
+
Load common fields with the initial SetLoadFields call, then use additional SetLoadFields calls within specific CASE branches for path-specific field loading.
|
|
42
|
+
|
|
43
|
+
## Performance Impact Analysis
|
|
44
|
+
|
|
45
|
+
The performance impact varies based on:
|
|
46
|
+
- Number of execution paths in the conditional logic
|
|
47
|
+
- Field overlap between different execution paths
|
|
48
|
+
- Frequency of each execution path in typical usage
|
|
49
|
+
- Size and complexity of fields in each category
|
|
50
|
+
|
|
51
|
+
Measure performance across different execution paths to validate that the optimization provides benefits in real usage scenarios rather than just theoretical improvements.
|
|
52
|
+
|
|
53
|
+
## Implementation Strategy
|
|
54
|
+
|
|
55
|
+
Start with field usage analysis across all CASE statement branches to categorize field requirements. Identify the minimal set of fields needed for the CASE condition evaluation itself, plus any fields commonly used across multiple execution paths.
|
|
56
|
+
|
|
57
|
+
Place SetLoadFields before the CASE statement with common fields, then add conditional SetLoadFields calls within specific branches for path-specific fields.
|
|
58
|
+
|
|
59
|
+
## Advanced Pattern Recognition
|
|
60
|
+
|
|
61
|
+
This optimization pattern applies to various conditional processing scenarios:
|
|
62
|
+
- Status-based processing where different record statuses require different field sets
|
|
63
|
+
- Type-based processing where record types determine field usage patterns
|
|
64
|
+
- Rule-based processing where business rules conditionally access different fields
|
|
65
|
+
- Workflow-based processing where process steps require specific field combinations
|
|
66
|
+
|
|
67
|
+
## Conditional Field Loading
|
|
68
|
+
|
|
69
|
+
Within CASE statement branches, use additional SetLoadFields calls to load path-specific fields. This creates a two-tier optimization: common fields loaded upfront, specific fields loaded on demand.
|
|
70
|
+
|
|
71
|
+
This approach requires careful management to avoid loading fields multiple times or creating unnecessary database round trips for individual field access.
|
|
72
|
+
|
|
73
|
+
## Error Handling Considerations
|
|
74
|
+
|
|
75
|
+
When using conditional SetLoadFields within CASE statements, ensure proper error handling for scenarios where field loading fails or records become invalid between the initial load and conditional processing.
|
|
76
|
+
|
|
77
|
+
Consider the implications of partial field loading on error recovery and debugging scenarios where developers need access to complete record information.
|
|
78
|
+
|
|
79
|
+
## Performance Monitoring
|
|
80
|
+
|
|
81
|
+
Monitor the effectiveness of this optimization across different execution paths. Track metrics such as:
|
|
82
|
+
- Field loading efficiency for each CASE branch
|
|
83
|
+
- Memory usage patterns across different execution scenarios
|
|
84
|
+
- Database query performance for conditional field loading
|
|
85
|
+
- Overall processing time improvements
|
|
86
|
+
|
|
87
|
+
Use this monitoring data to refine the field loading strategy and adjust the balance between common and conditional field loading.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "SetLoadFields Placement Before Filters"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "beginner"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["setloadfields", "placement", "filters", "order"]
|
|
7
|
+
prerequisites: ["setloadfields-basics", "record-filtering"]
|
|
8
|
+
samples: "samples/setloadfields-before-filters.md"
|
|
9
|
+
---
|
|
10
|
+
# SetLoadFields Placement Before Filters
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
SetLoadFields must be placed before filter operations (SETRANGE, SETFILTER) to be effective. This placement ensures that field loading optimization is applied during the database query execution rather than after records have already been loaded with all fields.
|
|
15
|
+
|
|
16
|
+
Proper placement is critical for realizing the performance benefits of SetLoadFields optimization. Incorrect placement results in no optimization benefit and can actually reduce performance due to unnecessary function calls.
|
|
17
|
+
|
|
18
|
+
## Execution Order Impact
|
|
19
|
+
|
|
20
|
+
When SetLoadFields is placed before filters, BC incorporates the field loading specification into the database query planning. The database query is optimized to retrieve only the specified fields for records matching the filter criteria.
|
|
21
|
+
|
|
22
|
+
When SetLoadFields is placed after filters, BC has already executed the database query with full field loading. The SetLoadFields call becomes ineffective because the records are already loaded in memory with all fields populated.
|
|
23
|
+
|
|
24
|
+
## BC Query Processing
|
|
25
|
+
|
|
26
|
+
BC processes record access operations in a specific sequence:
|
|
27
|
+
1. SetLoadFields specification (if present)
|
|
28
|
+
2. Filter criteria application (SETRANGE, SETFILTER)
|
|
29
|
+
3. Database query execution with optimized field loading
|
|
30
|
+
4. Record iteration (FIND, FINDSET, etc.)
|
|
31
|
+
|
|
32
|
+
This sequence ensures that field loading optimization is incorporated into the actual database query rather than applied as a post-processing step.
|
|
33
|
+
|
|
34
|
+
## Performance Implications
|
|
35
|
+
|
|
36
|
+
Correct placement delivers significant performance benefits:
|
|
37
|
+
- Reduced database I/O for record retrieval
|
|
38
|
+
- Lower memory consumption during record processing
|
|
39
|
+
- Improved query execution speed
|
|
40
|
+
- Better network efficiency between BC service and database
|
|
41
|
+
|
|
42
|
+
Incorrect placement provides no performance benefit and adds unnecessary processing overhead from the ignored SetLoadFields call.
|
|
43
|
+
|
|
44
|
+
## Common Placement Errors
|
|
45
|
+
|
|
46
|
+
The most common error is placing SetLoadFields after SETRANGE or SETFILTER operations. This happens when developers add SetLoadFields optimization to existing code without restructuring the data access logic.
|
|
47
|
+
|
|
48
|
+
Another common error is placing SetLoadFields immediately before record iteration (FIND, FINDSET) but after filter setup. While this appears logical, it's too late in the execution sequence to provide optimization benefits.
|
|
49
|
+
|
|
50
|
+
## Verification Techniques
|
|
51
|
+
|
|
52
|
+
Verify correct placement by reviewing the sequence of your data access operations. SetLoadFields should be the first operation after record variable declaration and before any filter operations.
|
|
53
|
+
|
|
54
|
+
Use BC performance profiling tools to confirm that field loading optimization is actually taking effect. Properly placed SetLoadFields should show measurable improvements in query execution time and memory usage.
|
|
55
|
+
|
|
56
|
+
## Code Organization Patterns
|
|
57
|
+
|
|
58
|
+
Organize your data access code with a consistent pattern:
|
|
59
|
+
1. Record variable declaration
|
|
60
|
+
2. SetLoadFields specification
|
|
61
|
+
3. Filter setup (SETRANGE, SETFILTER)
|
|
62
|
+
4. Record iteration and processing
|
|
63
|
+
|
|
64
|
+
This pattern ensures correct placement and makes the optimization visible to other developers working with the code.
|
|
65
|
+
|
|
66
|
+
## Integration with Other Optimizations
|
|
67
|
+
|
|
68
|
+
Proper SetLoadFields placement is foundational for other field loading optimizations. Primary key optimization, filter field exclusion, and conditional field loading all depend on correct placement before filter operations.
|
|
69
|
+
|
|
70
|
+
Consider establishing coding standards that require SetLoadFields as the first data access operation after record variable declaration to ensure consistent correct placement across your codebase.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "SetLoadFields Primary Key Optimization"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["setloadfields", "primary-key", "memory-optimization"]
|
|
7
|
+
prerequisites: ["record-variables", "primary-key-concepts"]
|
|
8
|
+
samples: "samples/setloadfields-primary-key.md"
|
|
9
|
+
---
|
|
10
|
+
# SetLoadFields Primary Key Optimization
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
SetLoadFields with primary key fields provides the most fundamental memory optimization in BC development. By loading only the primary key fields, you minimize memory usage while maintaining record identity for subsequent operations.
|
|
15
|
+
|
|
16
|
+
This optimization is particularly effective when you need to pass records between functions, store record references, or perform record existence checks without requiring full record data.
|
|
17
|
+
|
|
18
|
+
## Core Concept
|
|
19
|
+
|
|
20
|
+
Primary key optimization leverages BC's ability to uniquely identify records using only key fields. When you specify primary key fields in SetLoadFields, BC loads minimal data while preserving full record functionality for key-based operations.
|
|
21
|
+
|
|
22
|
+
The optimization works because BC can reconstruct record identity and perform key-based lookups without loading non-key field data into memory. This creates significant performance benefits in scenarios involving large record sets or memory-constrained operations.
|
|
23
|
+
|
|
24
|
+
## When to Apply
|
|
25
|
+
|
|
26
|
+
Use primary key optimization when:
|
|
27
|
+
- Passing records between functions where only identity matters
|
|
28
|
+
- Building record reference collections
|
|
29
|
+
- Performing existence checks or validation
|
|
30
|
+
- Processing large datasets where full field loading causes memory pressure
|
|
31
|
+
- Creating temporary record variables for subsequent filtering
|
|
32
|
+
|
|
33
|
+
Avoid when you need non-key field values immediately after the SetLoadFields call, as this forces additional database round trips.
|
|
34
|
+
|
|
35
|
+
## Performance Impact
|
|
36
|
+
|
|
37
|
+
Primary key optimization delivers:
|
|
38
|
+
- Reduced memory consumption (typically 60-80% reduction)
|
|
39
|
+
- Faster record loading from database
|
|
40
|
+
- Lower network traffic between BC service and database
|
|
41
|
+
- Improved garbage collection performance
|
|
42
|
+
- Better scalability with large record volumes
|
|
43
|
+
|
|
44
|
+
The optimization is most pronounced with tables containing many fields or large field values (text, blob, media fields).
|
|
45
|
+
|
|
46
|
+
## Implementation Patterns
|
|
47
|
+
|
|
48
|
+
The basic pattern involves identifying the table's primary key fields and specifying only those fields in the SetLoadFields call. Most BC tables use surrogate keys (single integer field) or composite keys (multiple fields).
|
|
49
|
+
|
|
50
|
+
For tables with surrogate primary keys, specify the single key field. For tables with composite primary keys, include all fields that comprise the primary key.
|
|
51
|
+
|
|
52
|
+
## Common Use Cases
|
|
53
|
+
|
|
54
|
+
**Record Reference Storage**: When maintaining collections of record references where you need identity but not data values.
|
|
55
|
+
|
|
56
|
+
**Cross-Function Record Passing**: Passing records to functions that will apply their own field loading based on their specific needs.
|
|
57
|
+
|
|
58
|
+
**Existence Validation**: Checking if records exist without needing their field values.
|
|
59
|
+
|
|
60
|
+
**Bulk Processing Setup**: Loading minimal record data before applying specific field loading for different processing paths.
|
|
61
|
+
|
|
62
|
+
## Best Practices
|
|
63
|
+
|
|
64
|
+
Always identify the correct primary key fields for your target table. Use the table definition or AL development environment to verify key field composition.
|
|
65
|
+
|
|
66
|
+
Apply primary key optimization early in your data access chain, before other operations that might implicitly load additional fields.
|
|
67
|
+
|
|
68
|
+
Document your SetLoadFields usage to help other developers understand the optimization strategy and avoid accidentally loading additional fields.
|
|
69
|
+
|
|
70
|
+
## Integration with Other Optimizations
|
|
71
|
+
|
|
72
|
+
Primary key optimization combines well with filter placement optimization - apply SetLoadFields with primary keys before setting filters to minimize the data loaded during filter evaluation.
|
|
73
|
+
|
|
74
|
+
This optimization also supports subsequent field-specific loading where you can add additional fields based on conditional logic or processing requirements.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "SIFT Technology Fundamentals"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["sift", "performance", "caching", "optimization", "streaming"]
|
|
7
|
+
prerequisites: ["caching-basics", "database-performance"]
|
|
8
|
+
samples: "samples/sift-technology-fundamentals.md"
|
|
9
|
+
related_topics: ["sift-implementation-patterns", "performance-optimization-workflow"]
|
|
10
|
+
estimated_time: "45 minutes"
|
|
11
|
+
---
|
|
12
|
+
# SIFT Technology Fundamentals
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
SIFT (Streaming In-memory Fast Tables) is Business Central's advanced caching technology that dramatically improves performance for frequently accessed data. SIFT enables real-time aggregation of large datasets without impacting database performance, making it essential for high-performance BC applications.
|
|
17
|
+
|
|
18
|
+
**Core Value**: SIFT transforms expensive database aggregations into lightning-fast in-memory operations, reducing query times from seconds to milliseconds for summary data.
|
|
19
|
+
|
|
20
|
+
SIFT maintains pre-calculated totals and counts in memory, automatically updating as underlying data changes. This eliminates the need for expensive GROUP BY operations on large tables during user interactions.
|
|
21
|
+
|
|
22
|
+
## Strategic Framework
|
|
23
|
+
|
|
24
|
+
### Use SIFT When
|
|
25
|
+
- **High-frequency aggregations** on tables with >10,000 records
|
|
26
|
+
- **Real-time dashboards** requiring instant summary calculations
|
|
27
|
+
- **Financial reporting** with complex sum/count operations
|
|
28
|
+
- **Analytics scenarios** with frequent drill-down requirements
|
|
29
|
+
|
|
30
|
+
### SIFT Architecture Components
|
|
31
|
+
- **SIFT Keys**: Define aggregation dimensions and hierarchy
|
|
32
|
+
- **SIFT Buckets**: In-memory storage for pre-calculated values
|
|
33
|
+
- **Update Triggers**: Automatic maintenance of aggregated data
|
|
34
|
+
- **Query Optimizer**: Intelligent routing of requests to SIFT vs database
|
|
35
|
+
|
|
36
|
+
### Performance Impact Patterns
|
|
37
|
+
SIFT provides 10-100x performance improvement for aggregation queries but requires memory overhead and maintenance processing. Optimal for read-heavy scenarios with moderate write frequency.
|
|
38
|
+
|
|
39
|
+
## Implementation Strategy
|
|
40
|
+
|
|
41
|
+
### SIFT Key Design
|
|
42
|
+
Define SIFT keys based on actual reporting and query patterns, not theoretical needs. Each SIFT key creates memory overhead and maintenance cost.
|
|
43
|
+
|
|
44
|
+
**Hierarchy Principle**: Structure SIFT keys to support drill-down navigation from high-level summaries to detailed breakdowns.
|
|
45
|
+
|
|
46
|
+
### Data Volume Considerations
|
|
47
|
+
SIFT becomes cost-effective when table size exceeds 10,000 records and aggregation frequency is high. Below this threshold, database queries may be more efficient.
|
|
48
|
+
|
|
49
|
+
### Memory Management
|
|
50
|
+
SIFT buckets consume server memory proportional to data cardinality. Monitor memory usage and tune SIFT configurations based on actual system performance.
|
|
51
|
+
|
|
52
|
+
## Best Practices
|
|
53
|
+
|
|
54
|
+
### SIFT Key Optimization
|
|
55
|
+
- **Limit SIFT keys** to essential aggregation patterns
|
|
56
|
+
- **Order dimensions** by frequency of use (most common first)
|
|
57
|
+
- **Test with realistic data volumes** before production deployment
|
|
58
|
+
- **Monitor memory consumption** and query performance metrics
|
|
59
|
+
|
|
60
|
+
### Integration Patterns
|
|
61
|
+
Combine SIFT with appropriate caching strategies for complete performance optimization. Use SIFT for aggregations, standard caching for detailed record access.
|
|
62
|
+
|
|
63
|
+
### Maintenance Strategy
|
|
64
|
+
SIFT requires regular maintenance windows for optimization. Plan SIFT rebuild operations during low-usage periods to maintain optimal performance.
|
|
65
|
+
|
|
66
|
+
## Anti-Patterns
|
|
67
|
+
|
|
68
|
+
### Avoid These Approaches
|
|
69
|
+
- Creating SIFT keys for every possible aggregation combination
|
|
70
|
+
- Using SIFT on small tables where database queries are already fast
|
|
71
|
+
- Ignoring memory consumption when designing SIFT hierarchies
|
|
72
|
+
- Deploying SIFT without proper testing on production-scale data
|
|
73
|
+
|
|
74
|
+
### Common Pitfalls
|
|
75
|
+
- **Over-SIFTing**: Creating too many SIFT keys leads to memory exhaustion
|
|
76
|
+
- **Under-testing**: SIFT behavior differs significantly between small and large datasets
|
|
77
|
+
- **Maintenance neglect**: Failing to schedule regular SIFT optimization operations
|
|
78
|
+
|
|
79
|
+
*Complete SIFT implementation guide: see SIFT implementation patterns in performance documentation*
|
|
80
|
+
*Memory optimization strategies: see SIFT memory management techniques*
|
|
81
|
+
*Sample implementations: see samples/sift-technology-fundamentals.md*
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "SingleInstance Subscriber Performance Impact"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["events", "singleinstance", "memory", "performance"]
|
|
7
|
+
prerequisites: ["event-subscriber-basics", "memory-management"]
|
|
8
|
+
samples: "samples/singleinstance-subscribers.md"
|
|
9
|
+
---
|
|
10
|
+
# SingleInstance Subscriber Performance Impact
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
SingleInstance subscriber codeunits create one instance per session that persists throughout the session lifecycle. This architectural pattern significantly impacts memory usage and performance characteristics compared to non-SingleInstance subscribers.
|
|
15
|
+
|
|
16
|
+
The SingleInstance pattern affects three critical performance areas: memory allocation patterns, initialization overhead, and cross-event state management. Understanding these impacts is essential for designing high-performance event-driven BC solutions.
|
|
17
|
+
|
|
18
|
+
## Memory Allocation Patterns
|
|
19
|
+
|
|
20
|
+
SingleInstance subscribers consume memory differently than standard subscribers. The codeunit instance remains in memory for the entire session, including all global variables and their allocated memory. This persistence can lead to memory accumulation if not properly managed.
|
|
21
|
+
|
|
22
|
+
Memory usage grows incrementally with each event processed, particularly when global variables store event data or temporary objects. Large global arrays, complex data structures, or cached references compound memory consumption over long-running sessions.
|
|
23
|
+
|
|
24
|
+
The session-scoped lifetime means memory is only released when the user session ends, not after individual event processing completes. This pattern requires careful consideration of global variable usage and explicit cleanup strategies.
|
|
25
|
+
|
|
26
|
+
## Initialization Performance Impact
|
|
27
|
+
|
|
28
|
+
SingleInstance subscribers incur initialization costs only once per session, during the first event trigger. This front-loaded initialization can improve performance for frequently triggered events but creates unpredictable response times for the initial event.
|
|
29
|
+
|
|
30
|
+
Heavy initialization logic in SingleInstance subscribers delays the first event response while benefiting subsequent events. The initialization timing becomes critical for user-facing operations where response time consistency matters.
|
|
31
|
+
|
|
32
|
+
Complex initialization sequences, external service connections, or large data loading operations amplify the first-event delay. Performance testing must account for both cold-start and warm-running scenarios.
|
|
33
|
+
|
|
34
|
+
## Cross-Event State Management
|
|
35
|
+
|
|
36
|
+
SingleInstance subscribers can maintain state between event invocations, enabling sophisticated event processing patterns. However, state accumulation introduces performance considerations and potential side effects.
|
|
37
|
+
|
|
38
|
+
Global variables persisting event data across invocations can create unexpected dependencies between unrelated business operations. State accumulation requires explicit cleanup strategies to prevent memory leaks and logical inconsistencies.
|
|
39
|
+
|
|
40
|
+
Cross-event state enables powerful optimization patterns like caching frequently accessed data or maintaining connection pools. These optimizations must be balanced against memory usage and state consistency requirements.
|
|
41
|
+
|
|
42
|
+
## Performance Optimization Strategies
|
|
43
|
+
|
|
44
|
+
Minimize global variable usage in SingleInstance subscribers to control memory consumption. Use local variables for event-specific data and reserve global variables for truly session-scoped information.
|
|
45
|
+
|
|
46
|
+
Implement explicit cleanup methods for global variables when appropriate. Consider memory usage patterns and implement cleanup at logical business process boundaries rather than after each event.
|
|
47
|
+
|
|
48
|
+
Design initialization sequences to be as lightweight as possible while still providing necessary functionality. Defer heavy initialization until actually needed rather than performing all setup during first event processing.
|
|
49
|
+
|
|
50
|
+
## Common Performance Issues
|
|
51
|
+
|
|
52
|
+
Memory accumulation from uncleaned global variables leads to session memory growth and potential performance degradation over long sessions. This issue is particularly problematic in high-frequency event scenarios.
|
|
53
|
+
|
|
54
|
+
Excessive initialization overhead creates inconsistent response times, with the first event significantly slower than subsequent events. This pattern can impact user experience in interactive scenarios.
|
|
55
|
+
|
|
56
|
+
State management complexity increases debugging difficulty and can introduce performance bottlenecks when cross-event dependencies create processing delays or conflicts.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Table Event Performance in Batch Operations"
|
|
3
|
+
domain: "dean-debug"
|
|
4
|
+
difficulty: "intermediate"
|
|
5
|
+
bc_versions: "14+"
|
|
6
|
+
tags: ["table-events", "batch-operations", "performance", "optimization"]
|
|
7
|
+
prerequisites: ["table-events-basics", "batch-processing"]
|
|
8
|
+
samples: "samples/table-event-batching.md"
|
|
9
|
+
---
|
|
10
|
+
# Table Event Performance in Batch Operations
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Table events (OnInsert, OnModify, OnDelete) trigger for every record operation, creating significant performance implications during batch processing scenarios. Understanding event firing patterns and optimization strategies is crucial for maintaining system performance during high-volume operations.
|
|
15
|
+
|
|
16
|
+
Batch operations that process thousands of records can generate corresponding thousands of event invocations, each potentially executing complex subscriber logic. This multiplication effect can transform efficient batch operations into performance bottlenecks.
|
|
17
|
+
|
|
18
|
+
Event performance impact varies dramatically based on subscriber complexity, event frequency, and batch size. Proper optimization requires understanding both the business requirements for event processing and the performance characteristics of subscriber implementations.
|
|
19
|
+
|
|
20
|
+
## Event Firing Patterns
|
|
21
|
+
|
|
22
|
+
Table events fire synchronously for each record operation, creating a direct correlation between batch size and total event processing time. A batch inserting 1000 records triggers 1000 OnInsert events, each executing all registered subscribers.
|
|
23
|
+
|
|
24
|
+
Event firing cannot be disabled for individual operations, meaning all batch operations inherit the full event processing overhead. This design ensures data consistency and business rule enforcement but requires careful performance consideration.
|
|
25
|
+
|
|
26
|
+
Nested batch operations compound event firing, where batch operations triggering additional record operations create cascading event execution. Understanding operation nesting prevents unexpected performance degradation.
|
|
27
|
+
|
|
28
|
+
## Performance Impact Analysis
|
|
29
|
+
|
|
30
|
+
Subscriber execution time directly multiplies with batch operation size, making even lightweight subscribers significant performance factors in large batches. A 10ms subscriber becomes a 10-second overhead for 1000-record batches.
|
|
31
|
+
|
|
32
|
+
Complex subscribers performing database queries, external service calls, or heavy calculations create substantial batch processing delays. The cumulative effect of multiple subscribers amplifies performance impact exponentially.
|
|
33
|
+
|
|
34
|
+
Memory allocation within subscribers accumulates across batch operations, potentially causing memory pressure during large batch processing. Subscriber memory patterns must consider batch operation contexts.
|
|
35
|
+
|
|
36
|
+
## Optimization Strategies
|
|
37
|
+
|
|
38
|
+
Implement conditional logic within subscribers to minimize processing for batch operation contexts. Use system flags or operation context to detect batch scenarios and apply streamlined processing logic.
|
|
39
|
+
|
|
40
|
+
Defer expensive operations within subscribers when batch processing is detected. Accumulate changes for bulk processing after batch completion rather than processing each record individually.
|
|
41
|
+
|
|
42
|
+
Consider subscriber architecture patterns that aggregate operations across multiple event invocations, reducing per-event processing overhead through batching within the subscriber logic itself.
|
|
43
|
+
|
|
44
|
+
## Batch Detection Techniques
|
|
45
|
+
|
|
46
|
+
System context information can indicate batch operation scenarios, allowing subscribers to adapt their processing logic accordingly. Session information and operation patterns provide batch detection signals.
|
|
47
|
+
|
|
48
|
+
Operation timing patterns help identify batch scenarios where multiple rapid-fire events suggest bulk processing rather than individual user operations. Time-based detection enables adaptive subscriber behavior.
|
|
49
|
+
|
|
50
|
+
Custom batch identification mechanisms allow application code to signal batch operations to subscribers, providing explicit control over batch-optimized processing paths.
|
|
51
|
+
|
|
52
|
+
## Memory Management
|
|
53
|
+
|
|
54
|
+
Batch operations with table events can create significant memory allocation patterns as subscribers process large numbers of events consecutively. Memory allocation strategies must account for cumulative subscriber memory usage.
|
|
55
|
+
|
|
56
|
+
Global variables in subscribers accumulate memory across batch operations unless explicitly managed. Batch-aware cleanup strategies prevent memory accumulation during extended batch processing.
|
|
57
|
+
|
|
58
|
+
Temporary objects created within subscribers should be explicitly disposed when possible to prevent memory pressure during large batch operations.
|
|
59
|
+
|
|
60
|
+
## Transaction Considerations
|
|
61
|
+
|
|
62
|
+
Table events execute within the same transaction as the triggering operation, meaning subscriber failures can rollback entire batch operations. Error handling strategies must balance data integrity with batch operation success.
|
|
63
|
+
|
|
64
|
+
Long-running subscribers can extend transaction duration for batch operations, potentially causing locking issues or transaction timeout failures. Subscriber performance directly affects batch operation transaction management.
|
|
65
|
+
|
|
66
|
+
Nested transaction scenarios in subscribers require careful consideration during batch operations to prevent deadlocks or transaction conflicts.
|