@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,155 @@
|
|
|
1
|
+
# SetLoadFields Primary Key Optimization - AL Code Samples
|
|
2
|
+
|
|
3
|
+
## Basic Primary Key Optimization
|
|
4
|
+
```al
|
|
5
|
+
codeunit 50100 "SetLoadFields PK Examples"
|
|
6
|
+
{
|
|
7
|
+
procedure OptimizedPrimaryKeyLookup(DocumentType: Enum "Sales Document Type"; DocumentNo: Code[20])
|
|
8
|
+
var
|
|
9
|
+
SalesHeader: Record "Sales Header";
|
|
10
|
+
begin
|
|
11
|
+
// Load only primary key fields for existence checks
|
|
12
|
+
SalesHeader.SetLoadFields("Document Type", "No.");
|
|
13
|
+
SalesHeader.SetRange("Document Type", DocumentType);
|
|
14
|
+
SalesHeader.SetRange("No.", DocumentNo);
|
|
15
|
+
|
|
16
|
+
if SalesHeader.FindSet() then
|
|
17
|
+
repeat
|
|
18
|
+
// Primary key fields already loaded, minimal memory usage
|
|
19
|
+
ProcessDocumentHeader(SalesHeader."Document Type", SalesHeader."No.");
|
|
20
|
+
until SalesHeader.Next() = 0;
|
|
21
|
+
end;
|
|
22
|
+
|
|
23
|
+
procedure ConditionalPrimaryKeyLoading(CustomerNo: Code[20]; LoadFullData: Boolean)
|
|
24
|
+
var
|
|
25
|
+
Customer: Record Customer;
|
|
26
|
+
begin
|
|
27
|
+
if LoadFullData then
|
|
28
|
+
// Load all fields when full processing needed
|
|
29
|
+
Customer.SetLoadFields()
|
|
30
|
+
else
|
|
31
|
+
// Minimal primary key loading for counting/existence
|
|
32
|
+
Customer.SetLoadFields("No.");
|
|
33
|
+
|
|
34
|
+
Customer.SetRange("No.", CustomerNo);
|
|
35
|
+
|
|
36
|
+
if Customer.FindFirst() then
|
|
37
|
+
if LoadFullData then
|
|
38
|
+
ProcessFullCustomer(Customer)
|
|
39
|
+
else
|
|
40
|
+
LogCustomerExists(Customer."No.");
|
|
41
|
+
end;
|
|
42
|
+
|
|
43
|
+
procedure BulkPrimaryKeyProcessing()
|
|
44
|
+
var
|
|
45
|
+
Item: Record Item;
|
|
46
|
+
ItemNumbers: List of [Code[20]];
|
|
47
|
+
ItemNo: Code[20];
|
|
48
|
+
begin
|
|
49
|
+
// First pass: collect primary keys only
|
|
50
|
+
Item.SetLoadFields("No.");
|
|
51
|
+
if Item.FindSet() then
|
|
52
|
+
repeat
|
|
53
|
+
ItemNumbers.Add(Item."No.");
|
|
54
|
+
until Item.Next() = 0;
|
|
55
|
+
|
|
56
|
+
// Second pass: process specific records with full data
|
|
57
|
+
foreach ItemNo in ItemNumbers do begin
|
|
58
|
+
Item.SetLoadFields(); // Load all fields for processing
|
|
59
|
+
if Item.Get(ItemNo) then
|
|
60
|
+
ProcessFullItem(Item);
|
|
61
|
+
end;
|
|
62
|
+
end;
|
|
63
|
+
|
|
64
|
+
local procedure ProcessDocumentHeader(DocumentType: Enum "Sales Document Type"; DocumentNo: Code[20])
|
|
65
|
+
begin
|
|
66
|
+
// Processing logic using only primary key data
|
|
67
|
+
end;
|
|
68
|
+
|
|
69
|
+
local procedure ProcessFullCustomer(var Customer: Record Customer)
|
|
70
|
+
begin
|
|
71
|
+
// Full customer processing
|
|
72
|
+
end;
|
|
73
|
+
|
|
74
|
+
local procedure LogCustomerExists(CustomerNo: Code[20])
|
|
75
|
+
begin
|
|
76
|
+
// Minimal logging using primary key data
|
|
77
|
+
end;
|
|
78
|
+
|
|
79
|
+
local procedure ProcessFullItem(var Item: Record Item)
|
|
80
|
+
begin
|
|
81
|
+
// Full item processing
|
|
82
|
+
end;
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Performance Comparison Examples
|
|
87
|
+
```al
|
|
88
|
+
codeunit 50101 "PK Performance Comparison"
|
|
89
|
+
{
|
|
90
|
+
procedure UnoptimizedPrimaryKeyAccess()
|
|
91
|
+
var
|
|
92
|
+
Customer: Record Customer;
|
|
93
|
+
begin
|
|
94
|
+
// BAD: Loading all fields when only checking existence
|
|
95
|
+
Customer.SetRange("Customer Posting Group", 'DOMESTIC');
|
|
96
|
+
|
|
97
|
+
if Customer.FindSet() then
|
|
98
|
+
repeat
|
|
99
|
+
// Only using primary key fields but all fields were loaded
|
|
100
|
+
if IsValidCustomer(Customer."No.") then
|
|
101
|
+
ProcessValidCustomer(Customer."No.");
|
|
102
|
+
until Customer.Next() = 0;
|
|
103
|
+
end;
|
|
104
|
+
|
|
105
|
+
procedure OptimizedPrimaryKeyAccess()
|
|
106
|
+
var
|
|
107
|
+
Customer: Record Customer;
|
|
108
|
+
begin
|
|
109
|
+
// GOOD: Loading only required primary key fields
|
|
110
|
+
Customer.SetLoadFields("No.");
|
|
111
|
+
Customer.SetRange("Customer Posting Group", 'DOMESTIC');
|
|
112
|
+
|
|
113
|
+
if Customer.FindSet() then
|
|
114
|
+
repeat
|
|
115
|
+
// Minimal memory usage, faster iteration
|
|
116
|
+
if IsValidCustomer(Customer."No.") then
|
|
117
|
+
ProcessValidCustomer(Customer."No.");
|
|
118
|
+
until Customer.Next() = 0;
|
|
119
|
+
end;
|
|
120
|
+
|
|
121
|
+
procedure SmartPrimaryKeyWithLazyLoading()
|
|
122
|
+
var
|
|
123
|
+
Customer: Record Customer;
|
|
124
|
+
FullDataCustomer: Record Customer;
|
|
125
|
+
begin
|
|
126
|
+
// BEST: Minimal loading with selective full data loading
|
|
127
|
+
Customer.SetLoadFields("No.");
|
|
128
|
+
Customer.SetRange("Customer Posting Group", 'DOMESTIC');
|
|
129
|
+
|
|
130
|
+
if Customer.FindSet() then
|
|
131
|
+
repeat
|
|
132
|
+
if IsValidCustomer(Customer."No.") then begin
|
|
133
|
+
// Load full data only when needed
|
|
134
|
+
if FullDataCustomer.Get(Customer."No.") then
|
|
135
|
+
ProcessFullCustomer(FullDataCustomer);
|
|
136
|
+
end;
|
|
137
|
+
until Customer.Next() = 0;
|
|
138
|
+
end;
|
|
139
|
+
|
|
140
|
+
local procedure IsValidCustomer(CustomerNo: Code[20]): Boolean
|
|
141
|
+
begin
|
|
142
|
+
exit(CustomerNo <> '');
|
|
143
|
+
end;
|
|
144
|
+
|
|
145
|
+
local procedure ProcessValidCustomer(CustomerNo: Code[20])
|
|
146
|
+
begin
|
|
147
|
+
// Processing using only primary key data
|
|
148
|
+
end;
|
|
149
|
+
|
|
150
|
+
local procedure ProcessFullCustomer(var Customer: Record Customer)
|
|
151
|
+
begin
|
|
152
|
+
// Full customer processing
|
|
153
|
+
end;
|
|
154
|
+
}
|
|
155
|
+
```
|
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
# SIFT Technology Fundamentals - AL Code Samples
|
|
2
|
+
|
|
3
|
+
## Basic SIFT Table Configuration
|
|
4
|
+
|
|
5
|
+
### Standard Implementation
|
|
6
|
+
```al
|
|
7
|
+
table 50100 "Sales Analytics Data"
|
|
8
|
+
{
|
|
9
|
+
Caption = 'Sales Analytics Data';
|
|
10
|
+
DataClassification = CustomerContent;
|
|
11
|
+
|
|
12
|
+
fields
|
|
13
|
+
{
|
|
14
|
+
field(1; "Customer No."; Code[20])
|
|
15
|
+
{
|
|
16
|
+
Caption = 'Customer No.';
|
|
17
|
+
TableRelation = Customer;
|
|
18
|
+
}
|
|
19
|
+
field(2; "Item No."; Code[20])
|
|
20
|
+
{
|
|
21
|
+
Caption = 'Item No.';
|
|
22
|
+
TableRelation = Item;
|
|
23
|
+
}
|
|
24
|
+
field(3; "Posting Date"; Date)
|
|
25
|
+
{
|
|
26
|
+
Caption = 'Posting Date';
|
|
27
|
+
}
|
|
28
|
+
field(10; "Sales Amount"; Decimal)
|
|
29
|
+
{
|
|
30
|
+
Caption = 'Sales Amount';
|
|
31
|
+
DecimalPlaces = 2 : 2;
|
|
32
|
+
}
|
|
33
|
+
field(11; "Quantity"; Decimal)
|
|
34
|
+
{
|
|
35
|
+
Caption = 'Quantity';
|
|
36
|
+
DecimalPlaces = 0 : 5;
|
|
37
|
+
}
|
|
38
|
+
field(12; "Profit Amount"; Decimal)
|
|
39
|
+
{
|
|
40
|
+
Caption = 'Profit Amount';
|
|
41
|
+
DecimalPlaces = 2 : 2;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
keys
|
|
46
|
+
{
|
|
47
|
+
key(PK; "Customer No.", "Item No.", "Posting Date")
|
|
48
|
+
{
|
|
49
|
+
Clustered = true;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Basic SIFT key for customer totals
|
|
53
|
+
key(CustomerSIFT; "Customer No.")
|
|
54
|
+
{
|
|
55
|
+
SumIndexFields = "Sales Amount", Quantity, "Profit Amount";
|
|
56
|
+
MaintainSIFTIndex = true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Item-based aggregations
|
|
60
|
+
key(ItemSIFT; "Item No.")
|
|
61
|
+
{
|
|
62
|
+
SumIndexFields = "Sales Amount", Quantity;
|
|
63
|
+
MaintainSIFTIndex = true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## SumIndexFields Property Usage Patterns
|
|
70
|
+
|
|
71
|
+
### Multiple Aggregation Strategies
|
|
72
|
+
```al
|
|
73
|
+
table 50101 "Order Performance Metrics"
|
|
74
|
+
{
|
|
75
|
+
Caption = 'Order Performance Metrics';
|
|
76
|
+
DataClassification = CustomerContent;
|
|
77
|
+
|
|
78
|
+
fields
|
|
79
|
+
{
|
|
80
|
+
field(1; "Salesperson Code"; Code[20]) { }
|
|
81
|
+
field(2; "Customer No."; Code[20]) { }
|
|
82
|
+
field(3; "Order Date"; Date) { }
|
|
83
|
+
field(10; "Order Amount"; Decimal) { }
|
|
84
|
+
field(11; "Discount Amount"; Decimal) { }
|
|
85
|
+
field(12; "Commission Amount"; Decimal) { }
|
|
86
|
+
field(13; "Processing Time"; Integer) { }
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
keys
|
|
90
|
+
{
|
|
91
|
+
key(PK; "Salesperson Code", "Customer No.", "Order Date") { Clustered = true; }
|
|
92
|
+
|
|
93
|
+
// Comprehensive salesperson performance SIFT
|
|
94
|
+
key(SalespersonPerformance; "Salesperson Code")
|
|
95
|
+
{
|
|
96
|
+
SumIndexFields = "Order Amount", "Discount Amount", "Commission Amount";
|
|
97
|
+
MaintainSIFTIndex = true;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Customer relationship metrics SIFT
|
|
101
|
+
key(CustomerMetrics; "Customer No.")
|
|
102
|
+
{
|
|
103
|
+
SumIndexFields = "Order Amount", "Discount Amount";
|
|
104
|
+
MaintainSIFTIndex = true;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Time-based analysis SIFT
|
|
108
|
+
key(DateAnalysis; "Order Date")
|
|
109
|
+
{
|
|
110
|
+
SumIndexFields = "Order Amount", "Processing Time";
|
|
111
|
+
MaintainSIFTIndex = false; // On-demand for reporting
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Usage in AL code
|
|
117
|
+
codeunit 50100 "SIFT Usage Examples"
|
|
118
|
+
{
|
|
119
|
+
procedure GetSalespersonTotals(SalespersonCode: Code[20]; var TotalAmount: Decimal; var TotalCommission: Decimal)
|
|
120
|
+
var
|
|
121
|
+
OrderMetrics: Record "Order Performance Metrics";
|
|
122
|
+
begin
|
|
123
|
+
OrderMetrics.Reset();
|
|
124
|
+
OrderMetrics.SetRange("Salesperson Code", SalespersonCode);
|
|
125
|
+
|
|
126
|
+
// Leverages SIFT for instant calculation
|
|
127
|
+
OrderMetrics.CalcSums("Order Amount", "Commission Amount");
|
|
128
|
+
TotalAmount := OrderMetrics."Order Amount";
|
|
129
|
+
TotalCommission := OrderMetrics."Commission Amount";
|
|
130
|
+
end;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## FlowField Integration with SIFT
|
|
135
|
+
|
|
136
|
+
### Customer Card with SIFT-Optimized FlowFields
|
|
137
|
+
```al
|
|
138
|
+
tableextension 50100 "Customer SIFT Extension" extends Customer
|
|
139
|
+
{
|
|
140
|
+
fields
|
|
141
|
+
{
|
|
142
|
+
// FlowField automatically leverages SIFT when available
|
|
143
|
+
field(50100; "Total Sales Amount"; Decimal)
|
|
144
|
+
{
|
|
145
|
+
Caption = 'Total Sales Amount';
|
|
146
|
+
FieldClass = FlowField;
|
|
147
|
+
CalcFormula = sum("Sales Analytics Data"."Sales Amount" where("Customer No." = field("No.")));
|
|
148
|
+
Editable = false;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
field(50101; "Total Quantity Sold"; Decimal)
|
|
152
|
+
{
|
|
153
|
+
Caption = 'Total Quantity Sold';
|
|
154
|
+
FieldClass = FlowField;
|
|
155
|
+
CalcFormula = sum("Sales Analytics Data".Quantity where("Customer No." = field("No.")));
|
|
156
|
+
Editable = false;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
field(50102; "Average Order Value"; Decimal)
|
|
160
|
+
{
|
|
161
|
+
Caption = 'Average Order Value';
|
|
162
|
+
FieldClass = FlowField;
|
|
163
|
+
CalcFormula = average("Sales Analytics Data"."Sales Amount" where("Customer No." = field("No.")));
|
|
164
|
+
Editable = false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Page implementation with automatic FlowField calculation
|
|
170
|
+
pageextension 50100 "Customer Card SIFT" extends "Customer Card"
|
|
171
|
+
{
|
|
172
|
+
layout
|
|
173
|
+
{
|
|
174
|
+
addafter("Name")
|
|
175
|
+
{
|
|
176
|
+
group("Sales Analytics")
|
|
177
|
+
{
|
|
178
|
+
Caption = 'Sales Analytics (SIFT-Optimized)';
|
|
179
|
+
|
|
180
|
+
field("Total Sales Amount"; Rec."Total Sales Amount")
|
|
181
|
+
{
|
|
182
|
+
ApplicationArea = All;
|
|
183
|
+
// Automatically calculated using SIFT when page opens
|
|
184
|
+
}
|
|
185
|
+
field("Total Quantity Sold"; Rec."Total Quantity Sold")
|
|
186
|
+
{
|
|
187
|
+
ApplicationArea = All;
|
|
188
|
+
}
|
|
189
|
+
field("Average Order Value"; Rec."Average Order Value")
|
|
190
|
+
{
|
|
191
|
+
ApplicationArea = All;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
trigger OnAfterGetRecord()
|
|
198
|
+
begin
|
|
199
|
+
// Force calculation of FlowFields (leverages SIFT)
|
|
200
|
+
Rec.CalcFields("Total Sales Amount", "Total Quantity Sold", "Average Order Value");
|
|
201
|
+
end;
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Performance Comparison: SIFT vs Non-SIFT
|
|
206
|
+
|
|
207
|
+
### Performance Testing Framework
|
|
208
|
+
```al
|
|
209
|
+
codeunit 50101 "SIFT Performance Comparison"
|
|
210
|
+
{
|
|
211
|
+
procedure ComparePerformance(CustomerNo: Code[20])
|
|
212
|
+
var
|
|
213
|
+
SalesData: Record "Sales Analytics Data";
|
|
214
|
+
StartTime: DateTime;
|
|
215
|
+
EndTime: DateTime;
|
|
216
|
+
SIFTDuration: Duration;
|
|
217
|
+
ManualDuration: Duration;
|
|
218
|
+
TotalAmount: Decimal;
|
|
219
|
+
begin
|
|
220
|
+
// Test 1: SIFT-optimized calculation
|
|
221
|
+
StartTime := CurrentDateTime;
|
|
222
|
+
TotalAmount := CalculateUsingSIFT(CustomerNo);
|
|
223
|
+
EndTime := CurrentDateTime;
|
|
224
|
+
SIFTDuration := EndTime - StartTime;
|
|
225
|
+
|
|
226
|
+
// Test 2: Manual calculation without SIFT
|
|
227
|
+
StartTime := CurrentDateTime;
|
|
228
|
+
TotalAmount := CalculateManually(CustomerNo);
|
|
229
|
+
EndTime := CurrentDateTime;
|
|
230
|
+
ManualDuration := EndTime - StartTime;
|
|
231
|
+
|
|
232
|
+
// Performance comparison results
|
|
233
|
+
Message('SIFT Calculation: %1ms\Manual Calculation: %2ms\Performance Improvement: %3x faster',
|
|
234
|
+
SIFTDuration, ManualDuration, ManualDuration / SIFTDuration);
|
|
235
|
+
end;
|
|
236
|
+
|
|
237
|
+
local procedure CalculateUsingSIFT(CustomerNo: Code[20]): Decimal
|
|
238
|
+
var
|
|
239
|
+
SalesData: Record "Sales Analytics Data";
|
|
240
|
+
begin
|
|
241
|
+
// Leverages SIFT index for instant aggregation
|
|
242
|
+
SalesData.Reset();
|
|
243
|
+
SalesData.SetRange("Customer No.", CustomerNo);
|
|
244
|
+
SalesData.CalcSums("Sales Amount");
|
|
245
|
+
exit(SalesData."Sales Amount");
|
|
246
|
+
end;
|
|
247
|
+
|
|
248
|
+
local procedure CalculateManually(CustomerNo: Code[20]): Decimal
|
|
249
|
+
var
|
|
250
|
+
SalesData: Record "Sales Analytics Data";
|
|
251
|
+
TotalAmount: Decimal;
|
|
252
|
+
begin
|
|
253
|
+
// Forces row-by-row calculation without SIFT
|
|
254
|
+
SalesData.Reset();
|
|
255
|
+
SalesData.SetRange("Customer No.", CustomerNo);
|
|
256
|
+
if SalesData.FindSet() then
|
|
257
|
+
repeat
|
|
258
|
+
TotalAmount += SalesData."Sales Amount";
|
|
259
|
+
until SalesData.Next() = 0;
|
|
260
|
+
exit(TotalAmount);
|
|
261
|
+
end;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Benchmark results table for tracking
|
|
265
|
+
table 50102 "SIFT Performance Benchmark"
|
|
266
|
+
{
|
|
267
|
+
fields
|
|
268
|
+
{
|
|
269
|
+
field(1; "Test Date"; DateTime) { }
|
|
270
|
+
field(2; "Customer No."; Code[20]) { }
|
|
271
|
+
field(3; "Record Count"; Integer) { }
|
|
272
|
+
field(4; "SIFT Duration (ms)"; Integer) { }
|
|
273
|
+
field(5; "Manual Duration (ms)"; Integer) { }
|
|
274
|
+
field(6; "Performance Ratio"; Decimal) { }
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
keys
|
|
278
|
+
{
|
|
279
|
+
key(PK; "Test Date", "Customer No.") { }
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## Common SIFT Configuration Mistakes (Anti-Patterns)
|
|
285
|
+
|
|
286
|
+
### Anti-Pattern Examples with Corrections
|
|
287
|
+
|
|
288
|
+
#### ❌ Anti-Pattern 1: Excessive SIFT Keys
|
|
289
|
+
```al
|
|
290
|
+
// BAD: Too many SIFT keys with MaintainSIFTIndex = true
|
|
291
|
+
table 50103 "Over-SIFT Example (Bad)"
|
|
292
|
+
{
|
|
293
|
+
keys
|
|
294
|
+
{
|
|
295
|
+
key(PK; ID) { }
|
|
296
|
+
key(SIFT1; Field1) { SumIndexFields = Amount; MaintainSIFTIndex = true; }
|
|
297
|
+
key(SIFT2; Field2) { SumIndexFields = Amount; MaintainSIFTIndex = true; }
|
|
298
|
+
key(SIFT3; Field3) { SumIndexFields = Amount; MaintainSIFTIndex = true; }
|
|
299
|
+
key(SIFT4; Field4) { SumIndexFields = Amount; MaintainSIFTIndex = true; }
|
|
300
|
+
key(SIFT5; Field5) { SumIndexFields = Amount; MaintainSIFTIndex = true; }
|
|
301
|
+
// Problem: Every data modification updates 5 SIFT indexes
|
|
302
|
+
// Impact: Severe write performance degradation
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
#### ✅ Corrected Pattern 1: Selective SIFT Usage
|
|
308
|
+
```al
|
|
309
|
+
// GOOD: Strategic SIFT key selection
|
|
310
|
+
table 50104 "Optimized SIFT Example (Good)"
|
|
311
|
+
{
|
|
312
|
+
keys
|
|
313
|
+
{
|
|
314
|
+
key(PK; ID) { }
|
|
315
|
+
|
|
316
|
+
// Only critical aggregations maintain real-time SIFT
|
|
317
|
+
key(CriticalSIFT; "Customer No.")
|
|
318
|
+
{
|
|
319
|
+
SumIndexFields = Amount;
|
|
320
|
+
MaintainSIFTIndex = true; // Dashboard requirement
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// Secondary aggregations use on-demand calculation
|
|
324
|
+
key(ReportingSIFT; "Item No.")
|
|
325
|
+
{
|
|
326
|
+
SumIndexFields = Amount;
|
|
327
|
+
MaintainSIFTIndex = false; // Monthly reporting only
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
#### ❌ Anti-Pattern 2: SIFT Without SumIndexFields
|
|
334
|
+
```al
|
|
335
|
+
// BAD: SIFT configuration without aggregation fields
|
|
336
|
+
table 50105 "Empty SIFT Example (Bad)"
|
|
337
|
+
{
|
|
338
|
+
keys
|
|
339
|
+
{
|
|
340
|
+
key(PK; ID) { }
|
|
341
|
+
key(BadSIFT; "Customer No.")
|
|
342
|
+
{
|
|
343
|
+
MaintainSIFTIndex = true; // No SumIndexFields specified!
|
|
344
|
+
// Problem: Wastes storage and processing with no benefit
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
#### ✅ Corrected Pattern 2: Proper SIFT Configuration
|
|
351
|
+
```al
|
|
352
|
+
// GOOD: SIFT with appropriate aggregation fields
|
|
353
|
+
table 50106 "Proper SIFT Example (Good)"
|
|
354
|
+
{
|
|
355
|
+
keys
|
|
356
|
+
{
|
|
357
|
+
key(PK; ID) { }
|
|
358
|
+
key(GoodSIFT; "Customer No.")
|
|
359
|
+
{
|
|
360
|
+
SumIndexFields = "Sales Amount", Quantity, "Profit Amount";
|
|
361
|
+
MaintainSIFTIndex = true;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
#### ❌ Anti-Pattern 3: Wrong MaintainSIFTIndex Setting
|
|
368
|
+
```al
|
|
369
|
+
// BAD: Real-time SIFT for batch processing scenario
|
|
370
|
+
codeunit 50102 "Batch Import with Bad SIFT"
|
|
371
|
+
{
|
|
372
|
+
procedure ImportLargeDataset()
|
|
373
|
+
var
|
|
374
|
+
DataRecord: Record "Over-SIFT Example (Bad)";
|
|
375
|
+
i: Integer;
|
|
376
|
+
begin
|
|
377
|
+
// Importing 100,000 records
|
|
378
|
+
for i := 1 to 100000 do begin
|
|
379
|
+
DataRecord.Init();
|
|
380
|
+
DataRecord.ID := i;
|
|
381
|
+
DataRecord.Amount := Random(1000);
|
|
382
|
+
DataRecord.Insert(); // Each insert updates multiple SIFT indexes!
|
|
383
|
+
// Performance impact: 10x slower than necessary
|
|
384
|
+
end;
|
|
385
|
+
end;
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
#### ✅ Corrected Pattern 3: Appropriate SIFT for Usage Pattern
|
|
390
|
+
```al
|
|
391
|
+
// GOOD: On-demand SIFT for batch scenarios
|
|
392
|
+
table 50107 "Batch-Optimized SIFT (Good)"
|
|
393
|
+
{
|
|
394
|
+
keys
|
|
395
|
+
{
|
|
396
|
+
key(PK; ID) { }
|
|
397
|
+
key(BatchSIFT; "Data Type")
|
|
398
|
+
{
|
|
399
|
+
SumIndexFields = Amount;
|
|
400
|
+
MaintainSIFTIndex = false; // Calculated after batch import
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
codeunit 50103 "Batch Import with Good SIFT"
|
|
406
|
+
{
|
|
407
|
+
procedure ImportLargeDataset()
|
|
408
|
+
var
|
|
409
|
+
DataRecord: Record "Batch-Optimized SIFT (Good)";
|
|
410
|
+
i: Integer;
|
|
411
|
+
begin
|
|
412
|
+
// Fast import without real-time SIFT maintenance
|
|
413
|
+
for i := 1 to 100000 do begin
|
|
414
|
+
DataRecord.Init();
|
|
415
|
+
DataRecord.ID := i;
|
|
416
|
+
DataRecord.Amount := Random(1000);
|
|
417
|
+
DataRecord.Insert(); // No SIFT overhead during import
|
|
418
|
+
end;
|
|
419
|
+
|
|
420
|
+
// Calculate aggregations on-demand after import
|
|
421
|
+
DataRecord.CalcSums(Amount); // Uses SIFT for efficient calculation
|
|
422
|
+
Message('Total imported amount: %1', DataRecord.Amount);
|
|
423
|
+
end;
|
|
424
|
+
}
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
## Best Practice Decision Matrix
|
|
428
|
+
|
|
429
|
+
### SIFT Configuration Guidelines
|
|
430
|
+
```al
|
|
431
|
+
// Decision framework for SIFT configuration
|
|
432
|
+
codeunit 50104 "SIFT Decision Framework"
|
|
433
|
+
{
|
|
434
|
+
// Use this pattern to determine optimal SIFT settings
|
|
435
|
+
procedure RecommendSIFTSettings(ReadFrequency: Text; WriteFrequency: Text; DataVolume: Text): Text
|
|
436
|
+
begin
|
|
437
|
+
case true of
|
|
438
|
+
(ReadFrequency = 'High') and (WriteFrequency = 'Low'):
|
|
439
|
+
exit('MaintainSIFTIndex = true - Optimal for dashboards and real-time reporting');
|
|
440
|
+
|
|
441
|
+
(ReadFrequency = 'Low') and (WriteFrequency = 'High'):
|
|
442
|
+
exit('MaintainSIFTIndex = false - Optimal for transaction processing systems');
|
|
443
|
+
|
|
444
|
+
(ReadFrequency = 'Medium') and (WriteFrequency = 'Medium'):
|
|
445
|
+
exit('Test both settings and measure performance - Consider time-based switching');
|
|
446
|
+
|
|
447
|
+
DataVolume = 'Very Large':
|
|
448
|
+
exit('MaintainSIFTIndex = false - Avoid real-time maintenance on large datasets');
|
|
449
|
+
|
|
450
|
+
else
|
|
451
|
+
exit('Start with MaintainSIFTIndex = false and optimize based on actual usage patterns');
|
|
452
|
+
end;
|
|
453
|
+
end;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/*
|
|
457
|
+
SIFT Performance Guidelines:
|
|
458
|
+
|
|
459
|
+
1. Real-time SIFT (MaintainSIFTIndex = true):
|
|
460
|
+
- Best for: Dashboards, frequently accessed reports, user interface calculations
|
|
461
|
+
- Trade-off: Slower writes, faster reads
|
|
462
|
+
- Limit: Maximum 3-5 real-time SIFT keys per table
|
|
463
|
+
|
|
464
|
+
2. On-demand SIFT (MaintainSIFTIndex = false):
|
|
465
|
+
- Best for: Periodic reporting, batch processing, large data imports
|
|
466
|
+
- Trade-off: Faster writes, acceptable read performance
|
|
467
|
+
- Benefit: No maintenance overhead during data modifications
|
|
468
|
+
|
|
469
|
+
3. Monitoring and Optimization:
|
|
470
|
+
- Measure actual performance in production-like environments
|
|
471
|
+
- Monitor SIFT calculation times and data modification impact
|
|
472
|
+
- Consider data growth patterns when choosing SIFT strategy
|
|
473
|
+
- Review SIFT usage patterns quarterly and adjust as needed
|
|
474
|
+
*/
|
|
475
|
+
```
|