bcquality/microsoft/knowledge/performance/validate-on-partial-record-forces-jit.md
Jesper Schulz-Wedde 2b5550c346
Some checks failed
Validate knowledge index / validate-index (push) Has been cancelled
Validate AL review fixtures / validate-review-fixtures (push) Has been cancelled
Validate frontmatter and structure / validate (push) Has been cancelled
Improve partner onboarding and documentation navigation (#174)
Lead with a complete plugin quick start and add task-oriented usage, troubleshooting, customization, and contribution guides. Preserve the broader plugin framing, correct conflicting contract guidance, support Agents folder reviews, and align repository validation. Convert existing sample references to clickable links without changing knowledge rules.

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-09 17:31:03 +02:00

1.6 KiB

bc-version domain keywords technologies countries application-area
all
performance
validate
setloadfields
jit-load
table-relation
onvalidate
partial-record
al
w1
all

Validate on a partial record forces JIT loads

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

Description

Validate runs the field's OnValidate trigger and TableRelation lookups. Those code paths routinely touch other fields on the same record. On a partial row those extra fields are not loaded, so the platform JIT-loads them — often the rest of the row — plus any related-table reads the trigger performs. Distinct from skip-setloadfields-on-write-and-transferfields.md: the write may be Modify(false); Validate is what blows the partial load. Agents that combine SetLoadFields with Validate in a loop produce slower code than an unoptimized assignment.

Best Practice

In a partial-record loop, assign fields directly when trigger side effects are not required. If Validate is required, do not use SetLoadFields on that iterator, or AddLoadFields every field the validate path can touch before the read.

See sample: validate-on-partial-record-forces-jit.good.al.

Anti Pattern

SetLoadFields on a handful of columns, then Validate inside the loop. The load list looks optimal; runtime JIT and TableRelation I/O dominate. The signal is Validate( on a record that still has a SetLoadFields in the same procedure.

See sample: validate-on-partial-record-forces-jit.bad.al.