Zum Hauptinhalt springen

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 kann ein Literal, ein SmartField-Token oder ein Text in einfachen Anführungszeichen sein.

OperatorBedeutungBeispielWahr, wenn
=gleich{{httpRequest.statusCode}} = 200beide Seiten gleich sind
!=ungleich{{customer.blocked}} != ''die Werte verschieden sind
>größer als{{order.total}} > 1000links strikt größer ist
<kleiner als{{stock.qty}} < 5links strikt kleiner ist
>=größer oder gleich{{order.total}} >= 1000links größer oder gleich ist
<=kleiner oder gleich{{stock.qty}} <= 5links 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.

Der leere String. Schreibe zwei einfache Anführungszeichen – '' – für „leer". {{customer.blocked}} != '' ist die idiomatische Form von „Ist der Debitor gesperrt?".

Bedingungen kombinieren

OperatorBedeutungBeispiel
&UND{{order.total}} >= 1000 & {{customer.country}} = 'DE'
|ODER{{customer.priority}} = 'A' | {{order.urgent}} = true
!NICHT!({{customer.blocked}} = '')
( )Gruppierung({{a}} = 1 | {{a}} = 2) & {{b}} != ''

! steht immer vor einer Klammergruppe: !(…). Innerhalb eines einzelnen Ausdrucks gibt es keine Operator-Vorrangregeln über das hinaus, was die Klammern sagen – im Zweifel Klammern setzen.

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

  • Texte in Anführungszeichen. Literalen Text in einfache Anführungszeichen setzen ('DE', 'Released'). Zahlen und Booleans brauchen keine.
  • 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

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,34712,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:

FormatErgebnis für 1234.5
(weggelassen oder leer)1234.5
<Precision,2:2>1234,50
<Sign><Integer Thousand><Decimals,3>1.234,500

In den meisten Fällen reicht es, das Format komplett wegzulassen ([[…]]) – du bekommst eine sprachneutrale Dezimaldarstellung. Greife nur dann zu einem Formatstring, wenn du gezielt Präzision, Tausendertrennung oder ein bestimmtes Layout brauchst.

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

SchrittFeldTyp
EntscheidungBedingungSmartFilter
Datensätze findenSmart-FilterSmartFilter

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.