bcquality/microsoft/knowledge/performance/use-setautocalcfields-for-per-row-flowfields.md
Jesper Schulz-Wedde 87ba36e650
Add BC performance knowledge from OptimAL learnings (#198)
* Add BC performance knowledge from OptimAL learnings

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Address review feedback on performance guidance

Clarify predicate-supporting keys versus covering queries, demonstrate proven cache reuse, and evaluate the updated partial-load and bulk-update rules.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-09-29 17:21:28 +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.