SmartFilters
SmartFields liefern dir die Werte in deinem Flow – die Debitorennummer, den HTTP-Statuscode, den Zeilenbetrag. Ein SmartFilter macht aus diesen Werten eine Ja/Nein-Antwort: Die Bedingung im Entscheidungs-Schritt und der Smart-Filter im Schritt „Datensätze finden" sind beide SmartFilters. Willst du stattdessen eine Zahl aus deinen Werten berechnen, siehe SmartFormulas.
Ein SmartFilter ist ein einzelner boolescher Ausdruck aus Vergleichen, verknüpft mit & (UND) und | (ODER), mit ! für Negation und ( ) zur Gruppierung. SmartField-Tokens ({{customer.no}}, {{httpRequest.statusCode}}, …) werden zuerst aufgelöst, danach laufen die Operatoren auf dem aufgelösten Text bzw. den Zahlen.
Der SmartFilter-Editor
Diese Syntax musst du selten von Hand schreiben. Ein Feld, das einen SmartFilter erwartet – die Bedingung im Entscheidungs-Schritt, die Bedingung der While-Schleife, der Smart-Filter im Schritt „Datensätze finden" – zeigt die Bedingung direkt in der Schrittkonfiguration als Zeile anklickbarer Blöcke, und du bearbeitest sie genau dort:
- Ein Vergleich besteht aus zwei Wertfeldern mit dem Operator dazwischen. Klicke auf den Operator, um einen anderen zu wählen.
- Jede Seite eines Vergleichs ist ein vollwertiger Werteditor. Tippe ein Literal, oder füge über die Schaltflächen im Feld ein SmartField, eine SmartFormula oder ein SmartDate ein. Ein Klick darauf öffnet den jeweiligen Editor erneut.
+fügt eine weitere Bedingung hinzu, verknüpft mit und oder oder. Drei gleich verknüpfte Bedingungen lesen sich als eine Zeile: A und B und C. Jede geklammerte Gruppe hat ihr eigenes+innerhalb der Klammern, du kannst also auch eine Gruppe erweitern und nicht nur das Zeilenende; über das Menü eines Konnektors fügst du mit Hier eine Bedingung einfügen mitten in der Zeile eine hinzu.- Mischst du und mit oder, werden immer Klammern gezeigt, denn AutoFlow wertet einen Filter strikt von links nach rechts aus, ohne Operator-Vorrang – A und B oder C wäre mehrdeutig und wird deshalb nie geschrieben. Fügst du eine Bedingung mit dem anderen Konnektor hinzu, wird sie mit der letzten geklammert: aus a = b und b = a wird mit oder dann a = b und (b = a oder c = b).
- Du bestimmst die Klammern. Klicke einen Konnektor an, um ihn zu wechseln (was das verknüpfte Paar klammert) oder um Diese beiden zu klammern; das ⋯-Menü an einer geklammerten Gruppe bietet Klammern entfernen. Damit erreichst du jede Form: Aus A und B und C wird durch Klammern des ersten Paares und Wechseln des äußeren Konnektors (A und B) oder C.
- Das ⋯-Menü gibt es an jedem Teil der Zeile: an einer einzelnen Bedingung, an einer geklammerten Gruppe (am Ende, innerhalb ihrer Klammern) und an der Zeile als Ganzes. Es packt den jeweiligen Teil in ein nicht, entfernt ihn und bei einer Gruppe zusätzlich deren Klammern. Über das Negieren einer Gruppe oder des gesamten Filters schreibst du nicht (A oder B).
Unter der Zeile zeigt eine Statusanzeige, ob der Filter vollständig ist – ein leeres Feld muss ausgefüllt werden, bevor du speichern kannst.
Die Schaltfläche am Ende der Zeile öffnet die vollständige SmartFilter-Editor-Seite. Das ist derselbe Editor mit mehr Platz, dazu oben rechts der Schalter Test: Gib je Token einen Beispielwert ein und sieh zu, wie die gesamte Bedingung Schritt für Schritt zu true oder false reduziert wird.
Unter dem Editor schaltet Als Text bearbeiten den ganzen Filter auf ein einfaches Textfeld um – schneller, wenn du einen langen Filter ohnehin im Kopf hast, und der Weg, einen fertigen einzufügen. Zurück zum Editor führt in die geführte Ansicht zurück; der Text muss sich dafür lesen lassen, und wenn nicht, bleibst du mit der Begründung stehen – nichts von dem, was du getippt hast, geht verloren. Speicherst du aus der Textansicht, wird genau der getippte Text gespeichert.
Ein von Hand geschriebener Filter, der nicht in diese Struktur passt – etwa einer, der drei Bedingungen ohne Klammern auf oberster Ebene verknüpft –, öffnet sich im Textmodus mit einem Hinweis. In der Schrittkonfiguration, wo es keinen Textmodus gibt, fällt er auf ein einfaches Textfeld zurück. In beiden Fällen wird nichts hinter deinem Rücken umgeschrieben.
Der Rest dieser Seite beschreibt die zugrunde liegende Syntax – praktisch, wenn du einen Filter lieber direkt tippst oder einen bestehenden lesen willst.
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: !(…). (Der Builder klammert immer korrekt – das betrifft dich also nur, wenn du einen Filter von Hand tippst.)
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.
Wo SmartFilters vorkommen
| Schritt | Feld |
|---|---|
| Entscheidung | Bedingung |
| Datensätze finden | Smart-Filter |
SmartFilters treiben außerdem die {#if …#}-Bedingung in SmartControls an.