Zum Hauptinhalt springen

SmartFormulas

SmartFields liefern dir die Werte in deinem Flow. Eine SmartFormula macht daraus eine berechnete Zahl, die du inline in ein Textfeld einfügst, indem du sie in [[ … ]] einschließt. Die Runtime wertet den Ausdruck aus, formatiert das Ergebnis und ersetzt den gesamten [[ … ]]-Block durch die formatierte Zahl. (Willst du stattdessen eine Ja/Nein-Frage stellen, siehe SmartFilters.)

Die Form ist:

[[Ausdruck]]
[[Ausdruck;Format]]

Die ;Format-Klausel ist optional und wählt einen konkreten Business-Central-Formatstring. Lässt du sie weg (oder schreibst nur ein bares ;), bekommst du die Standardausgabe – AutoFlow nutzt intern <Standard Format,9>, also eine sprachneutrale Darstellung (Dezimalpunkt, keine Tausendertrennzeichen).

Operatoren​

OperatorBedeutungBeispiel
+Addition[[2 + 3;]] → 5
-Subtraktion[[10 - 4;]] → 6
*Multiplikation[[{{order.total}} * 0.19;]]
/Division[[{{order.total}} / {{order.lines}};]]
%Modulo (Rest)[[7 % 3;]] → 1
^Potenz[[2 ^ 8;]] → 256
( )Gruppierung[[(1 + 2) * 3;]] → 9

Funktionen​

FunktionBedeutungBeispiel
max(a, b)größerer der beiden Werte[[max({{order.total}}, 100);]]
min(a, b)kleinerer der beiden Werte[[min({{quote}}, {{cap}});]]
abs(a)Absolutwert[[abs({{difference}});]]
round(Wert, Dezimalstellen)auf N Dezimalstellen runden (kaufmännisch)[[round({{order.total}} * 1.19, 2);]]
floor(Wert, Dezimalstellen)auf N Dezimalstellen abrunden[[floor({{order.total}}, 0);]]
ceil(Wert, Dezimalstellen)auf N Dezimalstellen aufrunden[[ceil({{order.total}}, 0);]]

round, floor und ceil nehmen ein Dezimalstellen-Argument: 2 rundet auf zwei Nachkommastellen (12,347 → 12,35), 0 rundet auf ganze Zahlen, negative Werte runden auf Zehner / Hunderter (-2 → nächster Hunderter).

Eine Liste aggregieren​

Wenn ein SmartField eine Liste enthält – die Zeilen eines Belegs, mehrere Datensätze aus einem Find-Schritt – kannst du die ganze Liste mit einer Aggregatfunktion zu einer Zahl zusammenfassen:

FunktionTut
sum(…)Summe der Werte
avg(…)Durchschnitt der Werte
min(…)kleinster Wert
max(…)größter Wert
count(…)Anzahl der Einträge in der Liste

Es gibt zwei Formen, je nachdem, was die Liste enthält:

Eine Liste von Werten. Ist das SmartField bereits eine Liste von Zahlen, übergibst du sie allein:

[[sum({{invoice.lineAmounts}});]]

Eine Liste von Datensätzen. Ist das SmartField eine Liste von Datensätzen (eine Referenz), gib zuerst die Liste an und dann den je Zeile zu summierenden Wert:

[[sum({{invoice.lines}}, {{invoice.lines.amount}});]]

Hier ist {{invoice.lines}} die zu durchlaufende Liste und {{invoice.lines.amount}} der Betrag jeder Zeile. count braucht nur die Liste selbst – [[count({{invoice.lines}});]].

Der Editor führt dich durch beide Fälle: Wählst du eine Liste, und ist es eine Datensatzliste, öffnet er einen zweiten Auswahldialog, der auf diese Liste beschränkt ist – so kannst du nur einen Wert wählen, der auf ihren Zeilen liegt.

min und max haben eine Doppelrolle – mit einem einzelnen Listen-Argument aggregieren sie die Liste, mit zwei einfachen Zahlen (min(2, 3)) bleiben sie die Kleinster/Größter-von-zwei-Funktionen aus der Tabelle oben. AutoFlow entscheidet danach, ob das erste Argument eine Liste ist.

Der Formatstring​

Der Teil hinter dem ; ist ein Standard-BC-Formatstring – derselbe, den du in AL an Format(Wert, 0, '<Format>') übergeben würdest. Ein paar nützliche Formen:

FormatErgebnis für 1234.5
(weggelassen oder leer)1234.5
<Precision,2:2>1234.50
<Standard Format,0>1,234.5 (Englisch) / 1.234,5 (Deutsch)
<Precision,2:2><Standard Format,0>1,234.50 (Englisch) / 1.234,50 (Deutsch)

In den meisten Fällen reicht es, das Format komplett wegzulassen ([[…]]) – du bekommst eine sprachneutrale Dezimaldarstellung (Dezimalpunkt, keine Tausendertrennzeichen). Greife nur dann zu einem Formatstring, wenn du gezielt Präzision oder dein lokales Zahlenformat brauchst.

Darstellung im lokalen (regionalen) Format​

Damit eine Zahl so erscheint, wie deine BC-Sitzung Beträge anzeigt – mit den Tausender- und Dezimaltrennzeichen deiner Region – ergänze <Standard Format,0>. Beispiel in einer deutschen Sitzung:

Betrag: [[{{order.total}};<Precision,2:2><Standard Format,0>]] EUR

Aus dem Wert 38401.05 wird so 38.401,05. Der Teil <Standard Format,0> schaltet auf deine lokalen Trennzeichen und die Tausendergruppierung um; stelle <Precision,2:2> davor, um die Anzahl der Dezimalstellen festzulegen. Ein Präzisions-Token allein (<Precision,2:2>) bleibt sprachneutral.

Beispiele​

Bruttobetrag: [[{{order.total}} * 1.19;]] EUR.

Inline-Berechnung.

Netto: [[{{order.total}};<Precision,2:2>]] EUR
Steuer: [[round({{order.total}} * 0.19, 2);<Precision,2:2>]] EUR

Zwei Formeln in einem Textblock, beide auf zwei Dezimalstellen formatiert.

Pufferzeit (Tage): [[max({{daysLeft}} - 2, 0);]]

Nie unter null.

Tipps​

  • Zahlen nicht in Anführungszeichen. Formeln sehen nur Zahlen – {{order.total}} löst zur Zahl auf, nicht zu Text. Liefert ein SmartField Text, der wie eine Zahl aussieht, klappt es; liefert es nicht-numerischen Text, bricht die Formel.
  • Eine Formel = eine Zahl. Hängt eine Berechnung von einer Ja/Nein-Entscheidung ab, wähle den richtigen Wert vorher per Decision- oder Parser-Schritt aus und verwende danach das SmartField in der Formel.
  • Klammern frei verwenden. Multiplikation und Division binden stärker als Addition und Subtraktion, aber Klammern sind die einfache Art, die Absicht klarzustellen.

Wo SmartFormulas vorkommen​

SmartFormulas können inline in jedem Textfeld einer Schritt-Konfiguration stehen – Beschreibungen, URLs, Request-Bodies, Parser-Eingaben, Fehlermeldungen und so weiter. Überall, wo ein SmartField-Token ({{ … }}) erlaubt ist, ist auch ein SmartFormula-Block ([[ … ; ]]) erlaubt.