bcquality/microsoft/knowledge/performance/use-setautocalcfields-for-per-row-flowfields.md
Jesper Schulz-Wedde af94c135ad Add BC performance knowledge from OptimAL learnings
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-25 14:13:37 +02:00

1.8 KiB

bc-version domain keywords technologies countries application-area
all
performance
setautocalcfields
calcfields
calcsums
flowfield
loop
per-row
al
w1
all

Use SetAutoCalcFields when each iterated row needs a FlowField

Description

Record.SetAutoCalcFields has been available since runtime 1.0 and makes the specified FlowFields calculate as records are retrieved. Microsoft's AL database-method performance guidance uses it to remove an explicit CalcFields call from every iteration when each row's FlowField drives a branch. This is different from CalcSums, which returns a total for the filtered set rather than a value for each row.

Best Practice

Call SetAutoCalcFields before FindSet when every returned row needs the same FlowField for a comparison, branch, or per-record action. For one total of a stored source field, consider CalcSums instead (see stored-field totals versus FlowFields). If the required result is a total of selected FlowField values, derive the underlying source filters from CalcFormula; do not sum the FlowField directly with CalcSums.

See sample: use-setautocalcfields-for-per-row-flowfields.good.al.

Anti Pattern

Calling CalcFields inside the loop when every iteration reads the same FlowField. A compatible recent result can be cached, so do not equate each call with a SQL statement. Do not replace row-specific decisions with CalcSums; an aggregate cannot preserve which rows met the condition.

See sample: use-setautocalcfields-for-per-row-flowfields.bad.al.