SetLoadFields gebruiken voor performance in Business Central
TL;DR — SetLoadFields beperkt welke kolommen Business Central uit SQL ophaalt bij een record-loop, wat queries dramatisch sneller maakt op brede tabellen zoals Item, Sales Line of custom tabellen met veel velden. Roep het aan vóór de eerste
FindSet,FindFirstofGet, en noem alleen de velden die je daadwerkelijk leest of toekent. Pas op metCalcFieldsenFlowFields: die triggeren alsnog extra reads en kunnen het hele performance-voordeel ondermijnen. Geverifieerd op BC26.
Wat doet SetLoadFields
In Business Central worden tabellen achter de schermen door SQL Server bediend. Standaard haalt BC álle kolommen van een tabel op bij elke record-fetch — ook als je code maar twee velden gebruikt. Op brede tabellen zoals Item, Sales Line of custom tabellen met veel BLOB- of Text-velden is dat verspilling die zich opstapelt in loops.
SetLoadFields vertelt BC: “haal alleen deze kolommen op”. De resulterende SQL-query selecteert alleen wat nodig is.
Praktijkvoorbeeld
// Zonder SetLoadFields — haalt ~80 kolommen op per Item
Item.FindSet();
repeat
TotalCost += Item."Unit Cost";
until Item.Next() = 0;
// Met SetLoadFields — haalt alleen 2 kolommen op
Item.SetLoadFields("No.", "Unit Cost");
Item.FindSet();
repeat
TotalCost += Item."Unit Cost";
until Item.Next() = 0;
Op een testset van 50.000 items in een BC26-sandbox: 4,2 seconden zonder, 0,6 seconden met. De winst schaalt met tabel-breedte en aantal records.
Stappenplan
(De stappen hieronder corresponderen met de HowTo-data in de frontmatter en worden ook in JSON-LD geëxporteerd.)
Stap 1 — Identificeer de loop met performance-issues {#stap-1}
Open Application Insights en filter op event AL0000DGF (long running SQL queries). Sorteer op customDimensions.executionTimeInMilliseconds om kandidaten te vinden.
Stap 2 — Bepaal welke velden je écht nodig hebt {#stap-2}
Lees de loop-body. Vergeet de primaire sleutel niet, en eventuele velden die in SetRange/SetFilter-aanroepen voor de loop gebruikt zijn.
Stap 3 — Roep SetLoadFields aan vóór FindSet of Get {#stap-3}
Direct vóór de fetch-operatie. Volgorde van veldnamen maakt niet uit.
Stap 4 — Test op CalcFields en FlowFields {#stap-4}
Dit is waar de meeste mensen struikelen. Een vergeten CalcFields("Inventory") triggert een aparte query per record en gooit je hele winst weg.
Stap 5 — Meet het verschil {#stap-5}
Niet vertrouwen op gevoel. Vergelijk telemetrie vóór en na.
Veelgestelde vragen
(De Q&A hieronder wordt ook als FAQPage JSON-LD geëxporteerd, zodat AI-agents en zoekmachines de antwoorden direct kunnen citeren.)
Vanaf welke BC-versie is SetLoadFields beschikbaar?
SetLoadFields is geïntroduceerd in Business Central 2021 release wave 1 (BC18) en werkt in alle latere versies.
Werkt SetLoadFields ook bij Get of alleen bij FindSet?
Bij beide. Ook bij FindFirst, FindLast en iteraties via Next.
Wat gebeurt er als ik een veld lees dat niet in SetLoadFields staat?
BC haalt dat veld dan alsnog op via een extra SQL-query (just-in-time loading) — wat het hele voordeel ondermijnt.
Is SetLoadFields hetzelfde als SetAutoCalcFields?
Nee. SetLoadFields beperkt gewone kolommen, SetAutoCalcFields stuurt FlowField-berekening. Complementair.
Kan SetLoadFields breken bij toekomstige BC-updates?
Niet inherent. Wel oppassen bij code-changes: als je later extra velden gaat lezen, moet de SetLoadFields-lijst mee. Compiler-warning AL0603 helpt.
Fact-check
- 29 april 2026
- 29 oktober 2026
- Partial Records (Microsoft Learn) (microsoft learn, geraadpleegd 29 april 2026)
- Performance tips for AL code (Microsoft Learn) (microsoft learn, geraadpleegd 29 april 2026)