SETAUTOCALCFIELDS

Die Funktion SETAUTOCALCFIELDS bestimmt ein oder mehrere FlowFields, die bei einem Aufruf einer Record-Variable automatisch berechnet werden sollen.

Parameter

Es gibt weder eine minimale, noch eine maximale Anzahl an Feldern. Dabei können alle FlowFields des hinterlegten Records eingebunden werden. Dies hätte allerdings einen erhöhten Arbeitsaufwand seitens Dynamics 365 Business Central zur Folge, was zu Verzögerungen des Programms führt. Wenn keine Felder als Parameter genannt werden, werden vorhergehende Aufrufe der Funktion geleert, es werden also nachfolgend keine Flowfields dieses Records mehr automatisch berechnet.

Es können nur Flowfields und BLOB-Felder angegeben werden. Wird allerdings ein normales Feld als Parameter angegeben, wird bei Ausführung des Codes eine Fehlermeldung ausgegeben, dass das Feld ein FlowField sein muss.

Rückgabewert

Der Rückgabewert ist optional abzufragen. Konnte die Funktion SETAUTOCALCFIELDS erfolgreich durchgeführt werden, liefert dieser TRUE, ansonsten FALSE zurück.

FlowFields auf Seiten und Berichten

Wenn ein FlowField auf Seiten oder in Berichten in der Eigenschaft „SourceExpr“ hinterlegt wurde, dann wird dieses FlowField automatisch berechnet und die Funktion SETAUTOCALCFIELDS ist nicht erforderlich.

Unterschiede zu CALCFIELDS

Im Gegensatz zu CALCFIELDS führt die Funktion SETAUTOCALCFIELDS selbst keine Berechnungen durch, sondern bestimmt Felder, die bei einem Aufruf automatisch berechnet werden sollen. Ein zusätzliches CALCFIELDS wird nun nicht mehr benötigt, wenn die Felder aufgerufen werden. Dadurch wird nur ein Befehl benötigt, auch wenn verschiedene FlowFields mit verschiedenen Funktionen aufgerufen werden, solange diese FlowFields in SETAUTOCALCFIELDS gesetzt wurden, statt pro Aufruf ein CALCFIELDS, um die gerade relevanten Felder zu berechnen.

Beispiel

Folgende globale Variable wird hinterlegt:
Name Datentyp Subtyp
Customer Record Customer
Folgender C/AL-Code wird hinterlegt:
WITH Customer DO BEGIN
  SETAUTOCALCFIELDS(
    Balance,
    "Balance (LCY)");
  
  GET('35451236');
  MESSAGE(
    '%1\Saldo: %2\Saldo MW %3',
    Name,
    Balance,
    "Balance (LCY)");
  
  GET('35963852');
  MESSAGE(
    '%1\Saldo: %2\Saldo MW %3',
    Name,
    Balance,
    "Balance (LCY)");
END;
Sobald der C/AL-Code ausgeführt wird, werden uns in Dynamics 365 Business Central die nachfolgenden Meldungen ausgegeben.
Gagn & Garman, Saldo: 88.160,64, Saldo MW 1.358,82
Vorher: 145 Nachher: 11
Wenn in obigem Beispiel zum Beispiel das Feld "Name" ebenfalls in SETAUTOCALCFIELDS gesetzt würde, obwohl dieses weder ein FlowField noch ein Blob-Feld ist, erscheint folgende Fehlermeldung bei Ausführung des Codes:
Wenn man nun statt des SETAUTOCALCFIELDS den CALCFIELDS-Befehl verwenden wollen würde, sähe der entsprechende Code so aus:
WITH Customer DO BEGIN
  GET('35451236');
  CALCFIELDS(
    Balance,
    "Balance (LCY)");
  MESSAGE(
    '%1\Saldo: %2\Saldo MW %3',
    Name,
    Balance,
    "Balance (LCY)");
  
  GET('35963852');
  CALCFIELDS(
    Balance,
    "Balance (LCY)");
  MESSAGE(
    '%1\Saldo: %2\Saldo MW %3',
    Name,
    Balance,
    "Balance (LCY)");
END;
Man sieht hier deutlich, dass die Verwendung von SETAUTOCALCFIELDS weniger Zeilen Code benötigt, als CALCFIELDS.