SmartFilters & SmartFormulas
SmartFields liefern dir die Werte in deinem Flow – die Debitorennummer, den HTTP-Statuscode, den Zeilenbetrag. SmartFilters und SmartFormulas sind dafür da, mit diesen Werten zu arbeiten: eine Ja/Nein-Frage stellen oder eine Zahl berechnen.
- Ein SmartFilter ist ein boolescher Ausdruck. Er beantwortet eine Ja/Nein-Frage. Die Bedingung im Entscheidungs-Schritt und der Smart-Filter im Schritt „Datensätze finden" sind beide SmartFilters.
- Eine SmartFormula ist ein Mathe-Ausdruck. Sie liefert eine Zahl. Du fügst sie inline in ein Textfeld ein, indem du sie in
[[ … ]]einschließt – beim Ausführen ersetzt das Ergebnis den Platzhalter.
Beide nutzen SmartField-Tokens ({{customer.no}}, {{httpRequest.statusCode}}, …) genauso wie jedes andere Konfigurationsfeld. Der Token wird zuerst aufgelöst, danach läuft der Operator oder die Formel auf dem aufgelösten Text bzw. der aufgelösten Zahl.
SmartFilters
Ein SmartFilter ist ein einzelner boolescher Ausdruck aus Vergleichen, verknüpft mit & (UND) und | (ODER), mit ! für Negation und ( ) zur Gruppierung.
Vergleichsoperatoren
Verwende diese zwischen zwei Werten – jede Seite ist ein Literal-Wert oder ein SmartField-Token, geschrieben ohne umschließende Anführungszeichen. Die einzige Ausnahme ist '', was den leeren String bedeutet (siehe unten).
| Operator | Bedeutung | Beispiel | Wahr, wenn |
|---|---|---|---|
= | gleich | {{httpRequest.statusCode}} = 200 | beide Seiten gleich sind |
!= | ungleich | {{customer.blocked}} != '' | die Werte verschieden sind |
> | größer als | {{order.total}} > 1000 | links strikt größer ist |
< | kleiner als | {{stock.qty}} < 5 | links strikt kleiner ist |
>= | größer oder gleich | {{order.total}} >= 1000 | links größer oder gleich ist |
<= | kleiner oder gleich | {{stock.qty}} <= 5 | links kleiner oder gleich ist |
~ | enthält | {{description}} ~ urgent | rechts irgendwo in links vorkommt |
^= | beginnt mit | {{customer.no}} ^= C0 | links mit rechts anfängt |
$= | endet mit | {{file.name}} $= .pdf | links auf rechts endet |
Zahlen vs. Text. Vergleiche (=, !=, >, <, >=, <=) prüfen beide Seiten numerisch, wenn beide als Zahl interpretierbar sind, sonst per Textvergleich. So funktioniert {{order.total}} >= 1000 egal, ob das SmartField 1000 oder 1.000,50 zurückgibt. {{customer.name}} = Adatum funktioniert, weil beide Seiten Text sind.
Text nicht in Anführungszeichen setzen. Schreibe das Literal blank – DE, nicht 'DE'. AutoFlow vergleicht die Operanden exakt so, wie sie dastehen, deshalb würden die Anführungszeichen Teil des Werts: {{customer.priority}} = 'A' löst zu A = 'A' auf und ist damit falsch, weil A sich von 'A' unterscheidet. Schreibe stattdessen {{customer.priority}} = A.
Der leere String. Die einzige Stelle mit Anführungszeichen ist der leere String: zwei einfache Anführungszeichen – '' – bedeuten „leer". {{customer.blocked}} != '' ist die idiomatische Form von „Ist der Debitor gesperrt?".
Bedingungen kombinieren
| Operator | Bedeutung | Beispiel |
|---|---|---|
& | UND | ({{order.total}} >= 1000) & ({{customer.country}} = DE) |
| | ODER | ({{customer.priority}} = A) | ({{order.urgent}} = true) |
! | NICHT | !({{customer.blocked}} = '') |
( ) | Gruppierung | ({{a}} = 1 | {{a}} = 2) & ({{b}} != '') |
Setze jeden Vergleich, den du mit & oder | verknüpfst, in eigene Klammern – schreibe (A) & (B), niemals A & B. Der Auswerter hat keine eigenen Vorrangregeln: Er zerteilt einen Ausdruck am ersten gefundenen Vergleichsoperator, sodass ein unklammertes A & B falsch gelesen wird (das & landet innerhalb eines Operanden) und die Bedingung stillschweigend falsch auswertet – oft immer wahr oder immer falsch. Klammern reduzieren jeden Vergleich zuerst auf ein einzelnes wahr/falsch, und erst danach werden & / | angewandt. ! steht ebenso immer vor einer Klammergruppe: !(…).
Vollständige Beispiele
{{httpRequest.statusCode}} = 200
Hat der Request funktioniert?
({{customer.blocked}} != '') & ({{order.total}} > 0)
Der Debitor ist gesperrt und die Bestellung ist nicht leer.
({{file.name}} $= .pdf) | ({{file.name}} $= .PDF)
Dateiname endet auf .pdf (groß-/kleinschreibungssensitiv – beide Schreibweisen abdecken oder vorher normalisieren).
!({{salesHeader.status}} = Released)
Alles außer einem freigegebenen Verkaufsdokument.
Tipps
- Text nicht in Anführungszeichen setzen. Literale blank schreiben –
DE,Released,200. Umschließende Anführungszeichen werden Teil des Werts, dann schlägt der Vergleich fehl (Adatum≠'Adatum'). Die einzige Form mit Anführungszeichen, die der Auswerter versteht, ist''für den leeren String. - Jeden kombinierten Vergleich klammern.
&und|funktionieren nur mit geklammerten Vergleichen –(A) & (B). Siehe „Bedingungen kombinieren" oben. - Kurz halten. Wird der Ausdruck schwer lesbar, lagere die Logik in einen Parser-Schritt aus, der einen sauberen Boolean als SmartField bereitstellt – Decision/Find Records referenziert dann nur dieses Feld.
- Strings sind groß-/kleinschreibungssensitiv. Schreibung der Daten treffen oder beide Seiten vorher per Parser normalisieren.
SmartFormulas
Eine SmartFormula ist ein kleiner Mathe-Ausdruck, den du inline in jedes Textfeld einfügst, indem du ihn in [[ … ]] einschließt. Die Runtime wertet den Ausdruck aus, formatiert das Ergebnis und ersetzt den gesamten [[ … ]]-Block durch die formatierte Zahl.
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).
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 sie vorkommen
| Schritt | Feld | Typ |
|---|---|---|
| Entscheidung | Bedingung | SmartFilter |
| Datensätze finden | Smart-Filter | SmartFilter |
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.