| bc-version |
domain |
keywords |
technologies |
countries |
application-area |
|
|
performance |
| setautocalcfields |
| calcfields |
| calcsums |
| flowfield |
| loop |
| per-row |
|
|
|
|
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. Use CalcSums instead when the required result is one aggregate over the filtered set (see calcsums-instead-of-calcfields-in-loop.md).
See sample: use-setautocalcfields-for-per-row-flowfields.good.al.
Anti Pattern
Calling CalcFields inside the loop when every iteration reads the same FlowField. Each CalcFields request requires a separate SQL statement unless a compatible recent result is cached. 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.