Zum Inhalt springen

IF

Die Operation If prüft eine Bedingung und führt dann die Aktionen in Do aus, oder, wenn die Bedingung nicht zutrifft, die in Else. Do und Else enthalten Aktionen mit demselben Aufbau wie Actions, auch weitere If oder Loop. Ihre Namen müssen im ganzen Workflow eindeutig sein; ihre Ergebnisse sind danach wie gewohnt über den Namen erreichbar.

Eine Bedingung vergleicht einen Wert links mit einem festen Wert rechts: {{Pfad}} Operator Wert.

Im Diagramm des Workflow-Editors hat If ein Formular mit dem Feld Bedingung (==, !=, >, <, >=, <=, verknüpft mit && und ||, Text in Anführungszeichen); Werte ziehen Sie aus der Testansicht hinein. StopWorkflow hat dort das Feld Grund.

Operator Bedeutung Für
==, != gleich, ungleich Zahlen, Texte, Wahrheitswerte
>, <, >=, <= größer, kleiner … nur Zahlen
&&, || und, oder mehrere Vergleiche
  • Links steht ein Platzhalter (oder ein Wert), rechts ein fester Wert. Platzhalter rechts werden nicht ersetzt.
  • Zahlen werden auch als Text erkannt, mit Punkt oder Komma: "1234,50" und "1234.50" ja, "1.234,50" nicht.
  • Texte rechts in Anführungszeichen: {{Land}} == "DE". Groß- und Kleinschreibung zählt.
  • Wahrheitswerte: == true nur bei echten Wahrheitswerten. Aus einer HTTP-Antwort kommen sie als Text; vergleichen Sie dann mit "true".
  • Kann der Platzhalter links nicht aufgelöst werden, ist der Vergleich falsch, auch bei !=.
  • && und || lassen sich mischen, aber nicht klammern: a && b || c bedeutet „(a und b) oder c“.
{
"Type": "If",
"Name": "GrosseRechnung",
"Parameters": {
"Condition": "{{InitialData.Invoice.BG22.BT112}} > 1000",
"Do": [ { "Type": "SMTP", "Name": "FreigabeAnfordern", "Parameters": { … } } ],
"Else": [ { "Type": "SMTP", "Name": "DirektSenden", "Parameters": { … } } ]
}
}
Parameter Bedeutung
Condition Die Bedingung
Do Aktionen, die laufen, wenn die Bedingung zutrifft
Else Aktionen, die sonst laufen (optional)
"Response": {
"ExecutedBranch": "If",
"SuccessCount": 1,
"ErrorCount": 0,
"Condition": "{{InitialData.Invoice.BG22.BT112}} > 1000"
}

ExecutedBranch ist If (Do lief), Else oder None (Bedingung falsch und kein Else). Welchen Wert RUNOS verglichen hat, steht im Protokoll unter ConditionEvaluated.

Schlägt eine Aktion in Do oder Else fehl, laufen die restlichen Aktionen des Zweigs nicht mehr, und das If schlägt mit deren Fehlermeldung fehl. Danach gilt die Fehlerrichtlinie des If; mit RetryThenNotify wird der ganze Zweig wiederholt.

Die Aktion StopWorkflow beendet den aktuellen Lauf sofort und stoppt danach den Workflow. Es starten keine neuen Läufe mehr, auch nicht nach einem Neustart von RUNOS, bis Sie ihn in der Liste wieder starten. Bei Ausführen im Editor endet nur der Lauf.

{ "Type": "StopWorkflow", "Name": "Anhalten", "Parameters": { "Reason": "Fehler bei {{Error.Action}}: {{Error.Message}}" } }
Parameter Bedeutung
Reason Begründung für das Protokoll, mit Platzhaltern. Ohne Angabe: „Stopped by action.“ Das Ergebnis enthält sie als Response.Reason.

StopWorkflow funktioniert überall: in einem If, in einer Loop oder am Ende von OnError, damit nach einer Fehlermeldung nicht jede weitere Datei am selben Problem scheitert.

Frage Bedingung
Hat ein Wert einen Inhalt? {{InitialData.Email}} != ""
Ist eine Liste nicht leer? {{Abfrage.Response.Body.items.count}} > 0
War eine Aktion erfolgreich? {{Senden.Response.Results.Status}} == "OK"
Betrag und Land {{Betrag}} > 1000 && {{Land}} == "DE"
Einer von zwei Werten {{Status}} == "Fehler" || {{Status}} == "Abgelehnt"

Rechnungen ohne Empfängeradresse nicht senden, sondern melden und den Workflow anhalten. Der Workflow enthält "InitialData": { "Email": "" }, ein Skriptblock in der Datei setzt die Adresse. Ohne diesen Vorgabewert wäre {{InitialData.Email}} nicht auflösbar und der Vergleich immer falsch.

{
"Type": "If",
"Name": "EmpfaengerFehlt",
"Parameters": {
"Condition": "{{InitialData.Email}} == \"\"",
"Do": [
{ "Type": "SMTP", "Name": "Melden", "Parameters": { "To": "buchhaltung@example.com", "Subject": "Rechnung {{FileName}} ohne Empfänger", "Body": "…" } },
{ "Type": "StopWorkflow", "Name": "Anhalten", "Parameters": { "Reason": "Empfänger fehlt in {{FileName}}" } }
],
"Else": [
{ "Type": "SMTP", "Name": "RechnungSenden", "Parameters": { "To": "{{InitialData.Email}}", "Attachments": "{{FilePath}}", "Body": "…" } }
]
}
}