bcquality/microsoft/knowledge/performance/load-common-fields-before-branching-on-case.md
Jesper Schulz-Wedde 3f0b6a41db Correct performance knowledge guidance
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 667c64a8-eb36-4440-bc41-6a97d8fb5542
2026-07-14 11:18:52 +02:00

1.4 KiB

bc-version domain keywords technologies countries application-area
all
performance
setloadfields
case
conditional
branch
field-loading
al
w1
all

Load common fields before branching on case

Contributions welcome — open a PR to refine or extend this article.

Description

When a known input determines which fields a subsequent record read will use, a single SetLoadFields containing every branch's fields loads unnecessary columns. Build the selection before Get, FindFirst, or FindSet: use SetLoadFields for fields common to every branch, then AddLoadFields for the selected branch. SetLoadFields replaces the current selection, while AddLoadFields preserves it.

Best Practice

Call SetLoadFields with the common fields. In each branch, call AddLoadFields with that branch's normal fields and then perform the record read. This applies only when the discriminator is known before the read; branching on a field from an already-loaded row is too late to tailor that row's initial SQL projection.

See sample: load-common-fields-before-branching-on-case.good.al.

Anti Pattern

A single top-level SetLoadFields enumerating every branch's fields, or a branch-local SetLoadFields that accidentally discards the common selection. Both make the declared load plan differ from the fields the selected path actually uses.

See sample: load-common-fields-before-branching-on-case.bad.al.