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
| Operator | Bedeutung | Beispiel |
|---|---|---|
+ | 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
| Funktion | Bedeutung | Beispiel |
|---|---|---|
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:
| Funktion | Tut |
|---|---|
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:
| Format | Ergebnis 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.