@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,316 @@
|
|
|
1
|
+
# SetLoadFields Placement Before Case Statements - AL Code Samples
|
|
2
|
+
|
|
3
|
+
## Basic Case Statement Placement
|
|
4
|
+
```al
|
|
5
|
+
codeunit 50400 "Case Statement Placement"
|
|
6
|
+
{
|
|
7
|
+
procedure CorrectCaseStatementPattern()
|
|
8
|
+
var
|
|
9
|
+
SalesHeader: Record "Sales Header";
|
|
10
|
+
begin
|
|
11
|
+
// CORRECT: SetLoadFields before case statement evaluation
|
|
12
|
+
SalesHeader.SetLoadFields("Document Type", "No.", "Sell-to Customer Name", "Amount Including VAT");
|
|
13
|
+
SalesHeader.SetRange(Status, SalesHeader.Status::Open);
|
|
14
|
+
|
|
15
|
+
if SalesHeader.FindSet() then
|
|
16
|
+
repeat
|
|
17
|
+
// Case statement after SetLoadFields - all needed fields already loaded
|
|
18
|
+
case SalesHeader."Document Type" of
|
|
19
|
+
SalesHeader."Document Type"::Quote:
|
|
20
|
+
ProcessQuote(SalesHeader."No.", SalesHeader."Sell-to Customer Name");
|
|
21
|
+
SalesHeader."Document Type"::Order:
|
|
22
|
+
ProcessOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name", SalesHeader."Amount Including VAT");
|
|
23
|
+
SalesHeader."Document Type"::Invoice:
|
|
24
|
+
ProcessInvoice(SalesHeader."No.", SalesHeader."Amount Including VAT");
|
|
25
|
+
SalesHeader."Document Type"::"Credit Memo":
|
|
26
|
+
ProcessCreditMemo(SalesHeader."No.", SalesHeader."Amount Including VAT");
|
|
27
|
+
end;
|
|
28
|
+
until SalesHeader.Next() = 0;
|
|
29
|
+
end;
|
|
30
|
+
|
|
31
|
+
procedure IncorrectCaseStatementPattern()
|
|
32
|
+
var
|
|
33
|
+
SalesHeader: Record "Sales Header";
|
|
34
|
+
begin
|
|
35
|
+
// INCORRECT: SetLoadFields inside case statement branches
|
|
36
|
+
SalesHeader.SetRange(Status, SalesHeader.Status::Open);
|
|
37
|
+
|
|
38
|
+
if SalesHeader.FindSet() then
|
|
39
|
+
repeat
|
|
40
|
+
case SalesHeader."Document Type" of
|
|
41
|
+
SalesHeader."Document Type"::Quote:
|
|
42
|
+
begin
|
|
43
|
+
// SetLoadFields called too late - Document Type field already accessed for case evaluation
|
|
44
|
+
SalesHeader.SetLoadFields("No.", "Sell-to Customer Name");
|
|
45
|
+
ProcessQuote(SalesHeader."No.", SalesHeader."Sell-to Customer Name");
|
|
46
|
+
end;
|
|
47
|
+
SalesHeader."Document Type"::Order:
|
|
48
|
+
begin
|
|
49
|
+
SalesHeader.SetLoadFields("No.", "Sell-to Customer Name", "Amount Including VAT");
|
|
50
|
+
ProcessOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name", SalesHeader."Amount Including VAT");
|
|
51
|
+
end;
|
|
52
|
+
end;
|
|
53
|
+
until SalesHeader.Next() = 0;
|
|
54
|
+
end;
|
|
55
|
+
|
|
56
|
+
local procedure ProcessQuote(DocumentNo: Code[20]; CustomerName: Text[100])
|
|
57
|
+
begin
|
|
58
|
+
// Process quote
|
|
59
|
+
end;
|
|
60
|
+
|
|
61
|
+
local procedure ProcessOrder(DocumentNo: Code[20]; CustomerName: Text[100]; Amount: Decimal)
|
|
62
|
+
begin
|
|
63
|
+
// Process order
|
|
64
|
+
end;
|
|
65
|
+
|
|
66
|
+
local procedure ProcessInvoice(DocumentNo: Code[20]; Amount: Decimal)
|
|
67
|
+
begin
|
|
68
|
+
// Process invoice
|
|
69
|
+
end;
|
|
70
|
+
|
|
71
|
+
local procedure ProcessCreditMemo(DocumentNo: Code[20]; Amount: Decimal)
|
|
72
|
+
begin
|
|
73
|
+
// Process credit memo
|
|
74
|
+
end;
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Advanced Case Statement Patterns
|
|
79
|
+
```al
|
|
80
|
+
codeunit 50401 "Advanced Case Placement"
|
|
81
|
+
{
|
|
82
|
+
procedure ComplexCaseStatementOptimization()
|
|
83
|
+
var
|
|
84
|
+
SalesLine: Record "Sales Line";
|
|
85
|
+
begin
|
|
86
|
+
// Load all fields that might be needed by any case branch
|
|
87
|
+
SalesLine.SetLoadFields("Document Type", "Document No.", "Line No.", "Type", "No.",
|
|
88
|
+
"Quantity", "Unit Price", "Line Amount");
|
|
89
|
+
SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
|
|
90
|
+
|
|
91
|
+
if SalesLine.FindSet() then
|
|
92
|
+
repeat
|
|
93
|
+
// Primary case statement for line type
|
|
94
|
+
case SalesLine.Type of
|
|
95
|
+
SalesLine.Type::Item:
|
|
96
|
+
ProcessItemLine(SalesLine);
|
|
97
|
+
SalesLine.Type::Resource:
|
|
98
|
+
ProcessResourceLine(SalesLine);
|
|
99
|
+
SalesLine.Type::"G/L Account":
|
|
100
|
+
ProcessGLAccountLine(SalesLine);
|
|
101
|
+
SalesLine.Type::"Charge (Item)":
|
|
102
|
+
ProcessItemChargeLine(SalesLine);
|
|
103
|
+
else
|
|
104
|
+
HandleUnknownLineType(SalesLine);
|
|
105
|
+
end;
|
|
106
|
+
until SalesLine.Next() = 0;
|
|
107
|
+
end;
|
|
108
|
+
|
|
109
|
+
procedure NestedCaseStatementExample()
|
|
110
|
+
var
|
|
111
|
+
Item: Record Item;
|
|
112
|
+
begin
|
|
113
|
+
// SetLoadFields covers all fields needed by nested case statements
|
|
114
|
+
Item.SetLoadFields("No.", "Type", "Item Category Code", "Unit Price", "Inventory", "Blocked");
|
|
115
|
+
Item.SetRange("No.", '1000', '9999');
|
|
116
|
+
|
|
117
|
+
if Item.FindSet() then
|
|
118
|
+
repeat
|
|
119
|
+
// Outer case statement
|
|
120
|
+
case Item.Type of
|
|
121
|
+
Item.Type::Inventory,
|
|
122
|
+
Item.Type::"Non-Inventory":
|
|
123
|
+
begin
|
|
124
|
+
// Inner case statement - fields already loaded
|
|
125
|
+
case Item."Item Category Code" of
|
|
126
|
+
'CHAIR':
|
|
127
|
+
ProcessChairItem(Item."No.", Item."Unit Price");
|
|
128
|
+
'TABLE':
|
|
129
|
+
ProcessTableItem(Item."No.", Item.Inventory);
|
|
130
|
+
'DESK':
|
|
131
|
+
ProcessDeskItem(Item."No.", Item."Unit Price", Item.Inventory);
|
|
132
|
+
else
|
|
133
|
+
ProcessGeneralItem(Item."No.");
|
|
134
|
+
end;
|
|
135
|
+
end;
|
|
136
|
+
Item.Type::Service:
|
|
137
|
+
ProcessServiceItem(Item."No.", Item."Unit Price");
|
|
138
|
+
end;
|
|
139
|
+
until Item.Next() = 0;
|
|
140
|
+
end;
|
|
141
|
+
|
|
142
|
+
procedure ConditionalCaseStatements()
|
|
143
|
+
var
|
|
144
|
+
Customer: Record Customer;
|
|
145
|
+
ProcessHighPriority: Boolean;
|
|
146
|
+
begin
|
|
147
|
+
// SetLoadFields accounts for all possible case statement branches
|
|
148
|
+
Customer.SetLoadFields("No.", "Name", "Customer Posting Group", "Credit Limit (LCY)",
|
|
149
|
+
"Balance (LCY)", "Phone No.");
|
|
150
|
+
|
|
151
|
+
ProcessHighPriority := Time > 120000T; // After noon, process high priority
|
|
152
|
+
|
|
153
|
+
if Customer.FindSet() then
|
|
154
|
+
repeat
|
|
155
|
+
if ProcessHighPriority then begin
|
|
156
|
+
// High priority case statement
|
|
157
|
+
case Customer."Customer Posting Group" of
|
|
158
|
+
'VIP':
|
|
159
|
+
if Customer."Credit Limit (LCY)" > 100000 then
|
|
160
|
+
ProcessVIPCustomer(Customer."No.", Customer.Name, Customer."Credit Limit (LCY)");
|
|
161
|
+
'CORPORATE':
|
|
162
|
+
ProcessCorporateCustomer(Customer."No.", Customer."Balance (LCY)");
|
|
163
|
+
end;
|
|
164
|
+
end else begin
|
|
165
|
+
// Standard priority case statement
|
|
166
|
+
case Customer."Customer Posting Group" of
|
|
167
|
+
'DOMESTIC':
|
|
168
|
+
ProcessDomesticCustomer(Customer."No.", Customer.Name);
|
|
169
|
+
'FOREIGN':
|
|
170
|
+
ProcessForeignCustomer(Customer."No.", Customer."Phone No.");
|
|
171
|
+
end;
|
|
172
|
+
end;
|
|
173
|
+
until Customer.Next() = 0;
|
|
174
|
+
end;
|
|
175
|
+
|
|
176
|
+
// Helper procedures for line processing
|
|
177
|
+
local procedure ProcessItemLine(var SalesLine: Record "Sales Line")
|
|
178
|
+
begin
|
|
179
|
+
// Item line processing using pre-loaded fields
|
|
180
|
+
Message('Processing Item Line: %1, Qty: %2', SalesLine."No.", SalesLine.Quantity);
|
|
181
|
+
end;
|
|
182
|
+
|
|
183
|
+
local procedure ProcessResourceLine(var SalesLine: Record "Sales Line")
|
|
184
|
+
begin
|
|
185
|
+
// Resource line processing
|
|
186
|
+
Message('Processing Resource Line: %1, Amount: %2', SalesLine."No.", SalesLine."Line Amount");
|
|
187
|
+
end;
|
|
188
|
+
|
|
189
|
+
local procedure ProcessGLAccountLine(var SalesLine: Record "Sales Line")
|
|
190
|
+
begin
|
|
191
|
+
// G/L Account line processing
|
|
192
|
+
Message('Processing G/L Account Line: %1', SalesLine."No.");
|
|
193
|
+
end;
|
|
194
|
+
|
|
195
|
+
local procedure ProcessItemChargeLine(var SalesLine: Record "Sales Line")
|
|
196
|
+
begin
|
|
197
|
+
// Item charge processing
|
|
198
|
+
Message('Processing Item Charge Line: %1', SalesLine."No.");
|
|
199
|
+
end;
|
|
200
|
+
|
|
201
|
+
local procedure HandleUnknownLineType(var SalesLine: Record "Sales Line")
|
|
202
|
+
begin
|
|
203
|
+
Error('Unknown line type for document %1, line %2', SalesLine."Document No.", SalesLine."Line No.");
|
|
204
|
+
end;
|
|
205
|
+
|
|
206
|
+
local procedure ProcessChairItem(ItemNo: Code[20]; UnitPrice: Decimal)
|
|
207
|
+
begin
|
|
208
|
+
Message('Chair Item: %1, Price: %2', ItemNo, UnitPrice);
|
|
209
|
+
end;
|
|
210
|
+
|
|
211
|
+
local procedure ProcessTableItem(ItemNo: Code[20]; Inventory: Decimal)
|
|
212
|
+
begin
|
|
213
|
+
Message('Table Item: %1, Inventory: %2', ItemNo, Inventory);
|
|
214
|
+
end;
|
|
215
|
+
|
|
216
|
+
local procedure ProcessDeskItem(ItemNo: Code[20]; UnitPrice: Decimal; Inventory: Decimal)
|
|
217
|
+
begin
|
|
218
|
+
Message('Desk Item: %1, Price: %2, Inventory: %3', ItemNo, UnitPrice, Inventory);
|
|
219
|
+
end;
|
|
220
|
+
|
|
221
|
+
local procedure ProcessGeneralItem(ItemNo: Code[20])
|
|
222
|
+
begin
|
|
223
|
+
Message('General Item: %1', ItemNo);
|
|
224
|
+
end;
|
|
225
|
+
|
|
226
|
+
local procedure ProcessServiceItem(ItemNo: Code[20]; UnitPrice: Decimal)
|
|
227
|
+
begin
|
|
228
|
+
Message('Service Item: %1, Price: %2', ItemNo, UnitPrice);
|
|
229
|
+
end;
|
|
230
|
+
|
|
231
|
+
local procedure ProcessVIPCustomer(CustomerNo: Code[20]; Name: Text[100]; CreditLimit: Decimal)
|
|
232
|
+
begin
|
|
233
|
+
Message('VIP Customer: %1 - %2, Credit Limit: %3', CustomerNo, Name, CreditLimit);
|
|
234
|
+
end;
|
|
235
|
+
|
|
236
|
+
local procedure ProcessCorporateCustomer(CustomerNo: Code[20]; Balance: Decimal)
|
|
237
|
+
begin
|
|
238
|
+
Message('Corporate Customer: %1, Balance: %2', CustomerNo, Balance);
|
|
239
|
+
end;
|
|
240
|
+
|
|
241
|
+
local procedure ProcessDomesticCustomer(CustomerNo: Code[20]; Name: Text[100])
|
|
242
|
+
begin
|
|
243
|
+
Message('Domestic Customer: %1 - %2', CustomerNo, Name);
|
|
244
|
+
end;
|
|
245
|
+
|
|
246
|
+
local procedure ProcessForeignCustomer(CustomerNo: Code[20]; PhoneNo: Text[30])
|
|
247
|
+
begin
|
|
248
|
+
Message('Foreign Customer: %1, Phone: %2', CustomerNo, PhoneNo);
|
|
249
|
+
end;
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Performance Impact Analysis
|
|
254
|
+
```al
|
|
255
|
+
codeunit 50402 "Case Statement Performance"
|
|
256
|
+
{
|
|
257
|
+
procedure DemonstratePerformanceImpact()
|
|
258
|
+
var
|
|
259
|
+
Item: Record Item;
|
|
260
|
+
StartTime: DateTime;
|
|
261
|
+
EndTime: DateTime;
|
|
262
|
+
begin
|
|
263
|
+
// Scenario 1: SetLoadFields after case statement evaluation (inefficient)
|
|
264
|
+
StartTime := CurrentDateTime();
|
|
265
|
+
Item.SetRange("Item Category Code", 'CHAIR');
|
|
266
|
+
|
|
267
|
+
if Item.FindSet() then
|
|
268
|
+
repeat
|
|
269
|
+
// Item Category Code accessed before SetLoadFields - loads all fields
|
|
270
|
+
case Item."Item Category Code" of
|
|
271
|
+
'CHAIR':
|
|
272
|
+
begin
|
|
273
|
+
Item.SetLoadFields("No.", "Unit Price"); // Too late
|
|
274
|
+
ProcessChairItem(Item."No.", Item."Unit Price");
|
|
275
|
+
end;
|
|
276
|
+
'TABLE':
|
|
277
|
+
begin
|
|
278
|
+
Item.SetLoadFields("No.", "Inventory"); // Too late
|
|
279
|
+
ProcessTableItem(Item."No.", Item.Inventory);
|
|
280
|
+
end;
|
|
281
|
+
end;
|
|
282
|
+
until Item.Next() = 0;
|
|
283
|
+
EndTime := CurrentDateTime();
|
|
284
|
+
Message('Inefficient approach: %1 ms', EndTime - StartTime);
|
|
285
|
+
|
|
286
|
+
// Scenario 2: SetLoadFields before case statement evaluation (efficient)
|
|
287
|
+
StartTime := CurrentDateTime();
|
|
288
|
+
Item.Reset();
|
|
289
|
+
Item.SetLoadFields("Item Category Code", "No.", "Unit Price", "Inventory"); // Before case evaluation
|
|
290
|
+
Item.SetRange("Item Category Code", 'CHAIR');
|
|
291
|
+
|
|
292
|
+
if Item.FindSet() then
|
|
293
|
+
repeat
|
|
294
|
+
// Item Category Code already loaded efficiently
|
|
295
|
+
case Item."Item Category Code" of
|
|
296
|
+
'CHAIR':
|
|
297
|
+
ProcessChairItem(Item."No.", Item."Unit Price");
|
|
298
|
+
'TABLE':
|
|
299
|
+
ProcessTableItem(Item."No.", Item.Inventory);
|
|
300
|
+
end;
|
|
301
|
+
until Item.Next() = 0;
|
|
302
|
+
EndTime := CurrentDateTime();
|
|
303
|
+
Message('Efficient approach: %1 ms', EndTime - StartTime);
|
|
304
|
+
end;
|
|
305
|
+
|
|
306
|
+
local procedure ProcessChairItem(ItemNo: Code[20]; UnitPrice: Decimal)
|
|
307
|
+
begin
|
|
308
|
+
// Process chair item
|
|
309
|
+
end;
|
|
310
|
+
|
|
311
|
+
local procedure ProcessTableItem(ItemNo: Code[20]; Inventory: Decimal)
|
|
312
|
+
begin
|
|
313
|
+
// Process table item
|
|
314
|
+
end;
|
|
315
|
+
}
|
|
316
|
+
```
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# SetLoadFields Placement Before Filters - AL Code Samples
|
|
2
|
+
|
|
3
|
+
## Basic Before Filter Placement
|
|
4
|
+
```al
|
|
5
|
+
codeunit 50300 "Before Filter Placement"
|
|
6
|
+
{
|
|
7
|
+
procedure CorrectPlacementExample()
|
|
8
|
+
var
|
|
9
|
+
SalesHeader: Record "Sales Header";
|
|
10
|
+
begin
|
|
11
|
+
// CORRECT: SetLoadFields called before any filters
|
|
12
|
+
SalesHeader.SetLoadFields("No.", "Sell-to Customer Name", "Amount Including VAT");
|
|
13
|
+
|
|
14
|
+
// Filters applied after SetLoadFields
|
|
15
|
+
SalesHeader.SetRange("Sell-to Customer No.", '10000', '50000');
|
|
16
|
+
SalesHeader.SetRange("Document Date", WorkDate() - 30, WorkDate());
|
|
17
|
+
SalesHeader.SetRange(Status, SalesHeader.Status::Open);
|
|
18
|
+
|
|
19
|
+
if SalesHeader.FindSet() then
|
|
20
|
+
repeat
|
|
21
|
+
ProcessOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name", SalesHeader."Amount Including VAT");
|
|
22
|
+
until SalesHeader.Next() = 0;
|
|
23
|
+
end;
|
|
24
|
+
|
|
25
|
+
procedure IncorrectPlacementExample()
|
|
26
|
+
var
|
|
27
|
+
SalesHeader: Record "Sales Header";
|
|
28
|
+
begin
|
|
29
|
+
// INCORRECT: Filters applied before SetLoadFields
|
|
30
|
+
SalesHeader.SetRange("Sell-to Customer No.", '10000', '50000');
|
|
31
|
+
SalesHeader.SetRange("Document Date", WorkDate() - 30, WorkDate());
|
|
32
|
+
|
|
33
|
+
// SetLoadFields called after filters - may not be fully effective
|
|
34
|
+
SalesHeader.SetLoadFields("No.", "Sell-to Customer Name", "Amount Including VAT");
|
|
35
|
+
SalesHeader.SetRange(Status, SalesHeader.Status::Open);
|
|
36
|
+
|
|
37
|
+
if SalesHeader.FindSet() then
|
|
38
|
+
repeat
|
|
39
|
+
ProcessOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name", SalesHeader."Amount Including VAT");
|
|
40
|
+
until SalesHeader.Next() = 0;
|
|
41
|
+
end;
|
|
42
|
+
|
|
43
|
+
procedure MultipleFilterSetExample()
|
|
44
|
+
var
|
|
45
|
+
Item: Record Item;
|
|
46
|
+
begin
|
|
47
|
+
// SetLoadFields must be first, before any filtering operations
|
|
48
|
+
Item.SetLoadFields("No.", "Description", "Unit Price", "Inventory");
|
|
49
|
+
|
|
50
|
+
// Multiple filter operations - all after SetLoadFields
|
|
51
|
+
Item.SetRange("No.", '1000', '9999');
|
|
52
|
+
Item.SetFilter("Last Date Modified", '>=%1', CalcDate('-6M', WorkDate()));
|
|
53
|
+
Item.SetFilter("Item Category Code", 'CHAIR|TABLE|DESK');
|
|
54
|
+
Item.SetFilter("Unit Price", '>=%1', 50);
|
|
55
|
+
|
|
56
|
+
if Item.FindSet() then
|
|
57
|
+
repeat
|
|
58
|
+
ProcessInventoryItem(Item."No.", Item.Description, Item."Unit Price", Item.Inventory);
|
|
59
|
+
until Item.Next() = 0;
|
|
60
|
+
end;
|
|
61
|
+
|
|
62
|
+
local procedure ProcessOrder(OrderNo: Code[20]; CustomerName: Text[100]; Amount: Decimal)
|
|
63
|
+
begin
|
|
64
|
+
// Process order data
|
|
65
|
+
end;
|
|
66
|
+
|
|
67
|
+
local procedure ProcessInventoryItem(ItemNo: Code[20]; Description: Text[100]; UnitPrice: Decimal; Inventory: Decimal)
|
|
68
|
+
begin
|
|
69
|
+
// Process inventory item
|
|
70
|
+
end;
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Advanced Placement Patterns
|
|
75
|
+
```al
|
|
76
|
+
codeunit 50301 "Advanced Filter Placement"
|
|
77
|
+
{
|
|
78
|
+
procedure ConditionalFilteringExample(CustomerNo: Code[20]; IncludeShipped: Boolean)
|
|
79
|
+
var
|
|
80
|
+
SalesHeader: Record "Sales Header";
|
|
81
|
+
begin
|
|
82
|
+
// SetLoadFields always first, regardless of conditional logic
|
|
83
|
+
SalesHeader.SetLoadFields("No.", "Sell-to Customer Name", "Amount Including VAT", "Shipment Date");
|
|
84
|
+
|
|
85
|
+
// Base filters
|
|
86
|
+
SalesHeader.SetRange("Sell-to Customer No.", CustomerNo);
|
|
87
|
+
SalesHeader.SetRange("Document Date", WorkDate() - 90, WorkDate());
|
|
88
|
+
|
|
89
|
+
// Conditional filters - still after SetLoadFields
|
|
90
|
+
if not IncludeShipped then
|
|
91
|
+
SalesHeader.SetRange("Completely Shipped", false);
|
|
92
|
+
|
|
93
|
+
if SalesHeader.FindSet() then
|
|
94
|
+
repeat
|
|
95
|
+
ProcessCustomerOrder(SalesHeader."No.", SalesHeader."Sell-to Customer Name",
|
|
96
|
+
SalesHeader."Amount Including VAT", SalesHeader."Shipment Date");
|
|
97
|
+
until SalesHeader.Next() = 0;
|
|
98
|
+
end;
|
|
99
|
+
|
|
100
|
+
procedure ResetAndRefilterExample()
|
|
101
|
+
var
|
|
102
|
+
Customer: Record Customer;
|
|
103
|
+
begin
|
|
104
|
+
// Initial setup with SetLoadFields first
|
|
105
|
+
Customer.SetLoadFields("No.", "Name", "Credit Limit (LCY)");
|
|
106
|
+
Customer.SetRange("No.", '10000', '30000');
|
|
107
|
+
|
|
108
|
+
ProcessCustomerSet(Customer, 'First batch');
|
|
109
|
+
|
|
110
|
+
// When resetting filters, SetLoadFields should be called again if changing field selection
|
|
111
|
+
Customer.Reset();
|
|
112
|
+
Customer.SetLoadFields("No.", "Name", "Phone No."); // Different fields
|
|
113
|
+
Customer.SetRange("No.", '40000', '60000');
|
|
114
|
+
|
|
115
|
+
ProcessCustomerSet(Customer, 'Second batch');
|
|
116
|
+
end;
|
|
117
|
+
|
|
118
|
+
procedure DynamicFilteringExample()
|
|
119
|
+
var
|
|
120
|
+
Item: Record Item;
|
|
121
|
+
FilterCategoryCode: Code[20];
|
|
122
|
+
FilterBlocked: Boolean;
|
|
123
|
+
i: Integer;
|
|
124
|
+
begin
|
|
125
|
+
// SetLoadFields established before any dynamic filtering
|
|
126
|
+
Item.SetLoadFields("No.", "Description", "Item Category Code", "Unit Price");
|
|
127
|
+
|
|
128
|
+
// Dynamic filtering loop - filters change but SetLoadFields remains effective
|
|
129
|
+
for i := 1 to 3 do begin
|
|
130
|
+
case i of
|
|
131
|
+
1: FilterCategoryCode := 'CHAIR';
|
|
132
|
+
2: FilterCategoryCode := 'TABLE';
|
|
133
|
+
3: FilterCategoryCode := 'DESK';
|
|
134
|
+
end;
|
|
135
|
+
FilterBlocked := i mod 2 = 0; // Alternate blocked status
|
|
136
|
+
|
|
137
|
+
Item.Reset();
|
|
138
|
+
Item.SetRange("Item Category Code", FilterCategoryCode);
|
|
139
|
+
Item.SetRange(Blocked, FilterBlocked);
|
|
140
|
+
|
|
141
|
+
ProcessItemSet(Item, StrSubstNo('Category %1', FilterCategoryCode));
|
|
142
|
+
end;
|
|
143
|
+
end;
|
|
144
|
+
|
|
145
|
+
local procedure ProcessCustomerOrder(OrderNo: Code[20]; CustomerName: Text[100]; Amount: Decimal; ShipmentDate: Date)
|
|
146
|
+
begin
|
|
147
|
+
// Process customer order
|
|
148
|
+
end;
|
|
149
|
+
|
|
150
|
+
local procedure ProcessCustomerSet(var Customer: Record Customer; BatchName: Text)
|
|
151
|
+
begin
|
|
152
|
+
if Customer.FindSet() then
|
|
153
|
+
repeat
|
|
154
|
+
// Process customer based on loaded fields
|
|
155
|
+
Message('Processing %1: Customer %2', BatchName, Customer."No.");
|
|
156
|
+
until Customer.Next() = 0;
|
|
157
|
+
end;
|
|
158
|
+
|
|
159
|
+
local procedure ProcessItemSet(var Item: Record Item; BatchName: Text)
|
|
160
|
+
begin
|
|
161
|
+
if Item.FindSet() then
|
|
162
|
+
repeat
|
|
163
|
+
// Process item based on loaded fields
|
|
164
|
+
Message('Processing %1: Item %2 - %3', BatchName, Item."No.", Item.Description);
|
|
165
|
+
until Item.Next() = 0;
|
|
166
|
+
end;
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Common Placement Mistakes
|
|
171
|
+
```al
|
|
172
|
+
codeunit 50302 "Filter Placement Mistakes"
|
|
173
|
+
{
|
|
174
|
+
procedure MistakeExample_FiltersFirst()
|
|
175
|
+
var
|
|
176
|
+
Customer: Record Customer;
|
|
177
|
+
begin
|
|
178
|
+
// MISTAKE: Applying filters before SetLoadFields
|
|
179
|
+
Customer.SetRange("No.", '10000');
|
|
180
|
+
Customer.SetRange("Customer Posting Group", 'DOMESTIC');
|
|
181
|
+
|
|
182
|
+
// SetLoadFields less effective when called after filters
|
|
183
|
+
Customer.SetLoadFields("No.", "Name", "Credit Limit (LCY)");
|
|
184
|
+
|
|
185
|
+
// This works but is suboptimal
|
|
186
|
+
if Customer.FindSet() then
|
|
187
|
+
repeat
|
|
188
|
+
ProcessCustomer(Customer."No.", Customer.Name, Customer."Credit Limit (LCY)");
|
|
189
|
+
until Customer.Next() = 0;
|
|
190
|
+
end;
|
|
191
|
+
|
|
192
|
+
procedure BestPracticePattern()
|
|
193
|
+
var
|
|
194
|
+
Customer: Record Customer;
|
|
195
|
+
begin
|
|
196
|
+
// BEST PRACTICE: Clear separation of concerns
|
|
197
|
+
// 1. Field loading configuration
|
|
198
|
+
Customer.SetLoadFields("No.", "Name", "Credit Limit (LCY)", "Phone No.");
|
|
199
|
+
|
|
200
|
+
// 2. Data filtering
|
|
201
|
+
Customer.SetRange("No.", '10000', '50000');
|
|
202
|
+
Customer.SetFilter("Last Date Modified", '>=%1', CalcDate('-3M', WorkDate()));
|
|
203
|
+
Customer.SetRange("Customer Posting Group", 'DOMESTIC');
|
|
204
|
+
|
|
205
|
+
// 3. Data processing
|
|
206
|
+
if Customer.FindSet() then
|
|
207
|
+
repeat
|
|
208
|
+
ProcessCustomerWithPhone(Customer."No.", Customer.Name,
|
|
209
|
+
Customer."Credit Limit (LCY)", Customer."Phone No.");
|
|
210
|
+
until Customer.Next() = 0;
|
|
211
|
+
end;
|
|
212
|
+
|
|
213
|
+
local procedure ProcessCustomer(CustomerNo: Code[20]; Name: Text[100]; CreditLimit: Decimal)
|
|
214
|
+
begin
|
|
215
|
+
// Process basic customer data
|
|
216
|
+
end;
|
|
217
|
+
|
|
218
|
+
local procedure ProcessCustomerWithPhone(CustomerNo: Code[20]; Name: Text[100]; CreditLimit: Decimal; PhoneNo: Text[30])
|
|
219
|
+
begin
|
|
220
|
+
// Process customer with phone information
|
|
221
|
+
end;
|
|
222
|
+
}
|
|
223
|
+
```
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# SetLoadFields Filter Field Exclusion - AL Code Samples
|
|
2
|
+
|
|
3
|
+
## Basic Filter Field Exclusion
|
|
4
|
+
```al
|
|
5
|
+
codeunit 50200 "Filter Field Exclusion Examples"
|
|
6
|
+
{
|
|
7
|
+
procedure ExcludeFilterFieldsBasic()
|
|
8
|
+
var
|
|
9
|
+
Customer: Record Customer;
|
|
10
|
+
begin
|
|
11
|
+
// Exclude filter fields from loading - they're used for filtering only
|
|
12
|
+
Customer.SetLoadFields("Name", "Credit Limit (LCY)", "Phone No.");
|
|
13
|
+
|
|
14
|
+
// Filter fields (No., Customer Posting Group) not loaded - filtering uses cached values
|
|
15
|
+
Customer.SetRange("No.", '10000', '20000');
|
|
16
|
+
Customer.SetRange("Customer Posting Group", 'DOMESTIC');
|
|
17
|
+
Customer.SetRange("Blocked", Customer.Blocked::" ");
|
|
18
|
+
|
|
19
|
+
if Customer.FindSet() then
|
|
20
|
+
repeat
|
|
21
|
+
// Only non-filter fields loaded, improving performance
|
|
22
|
+
ProcessCustomerData(Customer.Name, Customer."Credit Limit (LCY)", Customer."Phone No.");
|
|
23
|
+
until Customer.Next() = 0;
|
|
24
|
+
end;
|
|
25
|
+
|
|
26
|
+
procedure ComplexFilterExclusion()
|
|
27
|
+
var
|
|
28
|
+
Item: Record Item;
|
|
29
|
+
begin
|
|
30
|
+
// Complex filtering scenario - exclude all filter fields from loading
|
|
31
|
+
Item.SetLoadFields("Description", "Unit Price", "Inventory");
|
|
32
|
+
|
|
33
|
+
// Multiple filter fields - all excluded from SetLoadFields
|
|
34
|
+
Item.SetRange("No.", '1000', '9999');
|
|
35
|
+
Item.SetFilter("Item Category Code", 'CHAIR|TABLE|DESK');
|
|
36
|
+
Item.SetRange("Blocked", false);
|
|
37
|
+
Item.SetFilter("Unit Price", '>%1', 100);
|
|
38
|
+
Item.SetRange("Type", Item.Type::Inventory);
|
|
39
|
+
|
|
40
|
+
if Item.FindSet() then
|
|
41
|
+
repeat
|
|
42
|
+
// Filter fields available for validation but not loaded from database
|
|
43
|
+
if ShouldProcessItem(Item."No.", Item."Item Category Code") then
|
|
44
|
+
ProcessItemData(Item.Description, Item."Unit Price", Item.Inventory);
|
|
45
|
+
until Item.Next() = 0;
|
|
46
|
+
end;
|
|
47
|
+
|
|
48
|
+
procedure ConditionalFilterExclusion(IncludeFilterFields: Boolean)
|
|
49
|
+
var
|
|
50
|
+
SalesLine: Record "Sales Line";
|
|
51
|
+
begin
|
|
52
|
+
if IncludeFilterFields then
|
|
53
|
+
// When filter fields needed for processing, include them
|
|
54
|
+
SalesLine.SetLoadFields("Document No.", "Line No.", "Type", "No.", "Quantity", "Unit Price")
|
|
55
|
+
else
|
|
56
|
+
// When filter fields not needed for processing, exclude them
|
|
57
|
+
SalesLine.SetLoadFields("Quantity", "Unit Price");
|
|
58
|
+
|
|
59
|
+
SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
|
|
60
|
+
SalesLine.SetRange("Document No.", 'SO001');
|
|
61
|
+
SalesLine.SetRange("Type", SalesLine.Type::Item);
|
|
62
|
+
|
|
63
|
+
if SalesLine.FindSet() then
|
|
64
|
+
repeat
|
|
65
|
+
if IncludeFilterFields then
|
|
66
|
+
ProcessWithFilterData(SalesLine."Document No.", SalesLine."No.", SalesLine.Quantity)
|
|
67
|
+
else
|
|
68
|
+
ProcessWithoutFilterData(SalesLine.Quantity, SalesLine."Unit Price");
|
|
69
|
+
until SalesLine.Next() = 0;
|
|
70
|
+
end;
|
|
71
|
+
|
|
72
|
+
local procedure ProcessCustomerData(Name: Text[100]; CreditLimit: Decimal; PhoneNo: Text[30])
|
|
73
|
+
begin
|
|
74
|
+
// Process loaded customer data
|
|
75
|
+
end;
|
|
76
|
+
|
|
77
|
+
local procedure ShouldProcessItem(ItemNo: Code[20]; CategoryCode: Code[20]): Boolean
|
|
78
|
+
begin
|
|
79
|
+
exit((ItemNo <> '') and (CategoryCode <> ''));
|
|
80
|
+
end;
|
|
81
|
+
|
|
82
|
+
local procedure ProcessItemData(Description: Text[100]; UnitPrice: Decimal; Inventory: Decimal)
|
|
83
|
+
begin
|
|
84
|
+
// Process non-filter item data
|
|
85
|
+
end;
|
|
86
|
+
|
|
87
|
+
local procedure ProcessWithFilterData(DocumentNo: Code[20]; ItemNo: Code[20]; Quantity: Decimal)
|
|
88
|
+
begin
|
|
89
|
+
// Process including filter field data
|
|
90
|
+
end;
|
|
91
|
+
|
|
92
|
+
local procedure ProcessWithoutFilterData(Quantity: Decimal; UnitPrice: Decimal)
|
|
93
|
+
begin
|
|
94
|
+
// Process excluding filter field data
|
|
95
|
+
end;
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Performance Impact Examples
|
|
100
|
+
```al
|
|
101
|
+
codeunit 50201 "Filter Exclusion Performance"
|
|
102
|
+
{
|
|
103
|
+
procedure DemonstratePerformanceImpact()
|
|
104
|
+
var
|
|
105
|
+
Customer: Record Customer;
|
|
106
|
+
StartTime: DateTime;
|
|
107
|
+
EndTime: DateTime;
|
|
108
|
+
begin
|
|
109
|
+
// Scenario 1: Including filter fields unnecessarily
|
|
110
|
+
StartTime := CurrentDateTime();
|
|
111
|
+
Customer.SetLoadFields(); // Loads all fields including filters
|
|
112
|
+
Customer.SetRange("No.", '10000', '50000');
|
|
113
|
+
Customer.SetRange("Customer Posting Group", 'DOMESTIC');
|
|
114
|
+
|
|
115
|
+
if Customer.FindSet() then
|
|
116
|
+
repeat
|
|
117
|
+
// Only using non-filter fields but all were loaded
|
|
118
|
+
ProcessCustomerSales(Customer.Name, Customer."Credit Limit (LCY)");
|
|
119
|
+
until Customer.Next() = 0;
|
|
120
|
+
EndTime := CurrentDateTime();
|
|
121
|
+
LogPerformance('With filter fields loaded', EndTime - StartTime);
|
|
122
|
+
|
|
123
|
+
// Scenario 2: Excluding filter fields appropriately
|
|
124
|
+
StartTime := CurrentDateTime();
|
|
125
|
+
Customer.Reset();
|
|
126
|
+
Customer.SetLoadFields("Name", "Credit Limit (LCY)"); // Exclude filter fields
|
|
127
|
+
Customer.SetRange("No.", '10000', '50000');
|
|
128
|
+
Customer.SetRange("Customer Posting Group", 'DOMESTIC');
|
|
129
|
+
|
|
130
|
+
if Customer.FindSet() then
|
|
131
|
+
repeat
|
|
132
|
+
// Only non-filter fields loaded, better performance
|
|
133
|
+
ProcessCustomerSales(Customer.Name, Customer."Credit Limit (LCY)");
|
|
134
|
+
until Customer.Next() = 0;
|
|
135
|
+
EndTime := CurrentDateTime();
|
|
136
|
+
LogPerformance('With filter fields excluded', EndTime - StartTime);
|
|
137
|
+
end;
|
|
138
|
+
|
|
139
|
+
local procedure ProcessCustomerSales(Name: Text[100]; CreditLimit: Decimal)
|
|
140
|
+
begin
|
|
141
|
+
// Process customer sales data
|
|
142
|
+
end;
|
|
143
|
+
|
|
144
|
+
local procedure LogPerformance(Scenario: Text; Duration: Duration)
|
|
145
|
+
begin
|
|
146
|
+
Message('%1: %2 ms', Scenario, Duration);
|
|
147
|
+
end;
|
|
148
|
+
}
|
|
149
|
+
```
|