Zum Inhalt springen

Parallel

Die Operation Parallel führt mehrere Zweige gleichzeitig aus und wartet, bis alle fertig sind; erst dann geht der Workflow mit der nächsten Aktion weiter. Jeder Zweig ist eine eigene Liste von Aktionen, die nacheinander laufen, genau wie Actions, einschließlich weiterer If, Loop oder Parallel.

Typischer Fall: Eine Rechnung soll auf den SFTP-Server und danach im Eingangsordner gelöscht werden, und gleichzeitig geht eine Mail an die Buchhaltung. Hintereinander würde die Mail auf den Upload warten; mit Parallel dauert der Lauf nur so lange wie der langsamste Zweig.

Im visuellen Editor zeigt Parallel je Zweig eine Spalte mit dessen Namen. Zweige fügen Sie im Bereich rechts mit Zweig hinzufügen hinzu, benennen sie dort um oder entfernen sie; Aktionen fügen Sie mit dem + in der Spalte eines Zweigs ein.

{
"Type": "Parallel",
"Name": "Verteilen",
"Parameters": {
"Branches": [
{
"Name": "Archiv",
"Actions": [
{ "Type": "FTP", "Name": "Hochladen", "Parameters": { … } },
{ "Type": "SMB", "Name": "Aufraeumen", "Parameters": { … } }
]
},
{
"Name": "Info",
"Actions": [ { "Type": "SMTP", "Name": "Buchhaltung", "Parameters": { … } } ]
}
],
"OnBranchError": "WaitForAll",
"MaxConcurrent": 0
}
}
Parameter Standard Bedeutung
Branches – Die Zweige, jeder mit Name und Actions
Branches[].Name Branch1, Branch2, … Name des Zweigs, im Parallel eindeutig. Darüber ist sein Ergebnis erreichbar; verwenden Sie keine Leerzeichen, Punkte oder Klammern.
Branches[].Actions – Aktionen des Zweigs, nacheinander ausgeführt
OnBranchError WaitForAll Was passiert, wenn ein Zweig fehlschlägt: WaitForAll lässt die anderen Zweige zu Ende laufen, StopOthers bricht sie ab
MaxConcurrent 0 (alle) Höchstens so viele Zweige gleichzeitig; die übrigen warten, bis einer fertig ist
  • Innerhalb eines Zweigs gilt dasselbe wie in Do eines If: Schlägt eine Aktion fehl, laufen die restlichen Aktionen dieses Zweigs nicht. Hat die Aktion eine eigene Fehlerrichtlinie, gilt sie zuerst, z. B. SkipAction (der Zweig macht weiter) oder Retry.
  • Ein fehlgeschlagener Zweig lässt Parallel fehlschlagen, sobald die anderen Zweige fertig (WaitForAll) oder abgebrochen (StopOthers) sind. Danach entscheidet die Fehlerrichtlinie von Parallel bzw. des Workflows, wie es weitergeht, und OnError läuft wie bei jeder anderen Aktion.
  • StopOthers startet in den anderen Zweigen keine neue Aktion mehr; eine Aktion, die gerade läuft, wird abgebrochen, wenn sie das unterstützt, sonst noch beendet.
  • Eine StopWorkflow-Aktion in einem Zweig beendet den Lauf: Die anderen Zweige starten danach keine neue Aktion mehr.
  • Ergebnisse aus einem anderen Zweig desselben Parallel sind während des Laufs eventuell noch nicht da. Verwenden Sie sie erst in Aktionen nach dem Parallel; der Editor warnt sonst.
  • Eine Loop in einem Zweig hat ihr eigenes {{item}}, {{index}} und {{count}}, auch wenn in einem anderen Zweig gleichzeitig eine Schleife läuft.
"Response": {
"Branches": {
"Archiv": { "State": "Completed", "Error": null, "ElapsedMs": 2140.5, "Results": [ { … }, { … } ] },
"Info": { "State": "Failed", "Error": "Buchhaltung: …", "ElapsedMs": 310.2, "Results": [ { … } ] }
},
"CompletedCount": 1,
"FailedCount": 1,
"CancelledCount": 0
}

State eines Zweigs ist Completed, Failed oder Cancelled (von StopOthers abgebrochen). Results enthält das Ergebnis jeder Aktion des Zweigs. Nach dem Parallel erreichen Sie ein Zweigergebnis über {{Verteilen.Response.Branches.Archiv.State}} und die Ergebnisse der Aktionen wie gewohnt über ihren Namen, z. B. {{Hochladen.Response…}}.

Eine eingehende Rechnung gleichzeitig archivieren und melden; schlägt der Upload fehl, wird die Mail nicht abgewartet, sondern abgebrochen:

{
"Type": "Parallel",
"Name": "Verteilen",
"Parameters": {
"OnBranchError": "StopOthers",
"Branches": [
{
"Name": "Archiv",
"Actions": [
{
"Type": "FTP",
"Name": "Hochladen",
"Parameters": {
"Protocol": "SFTP",
"Server": "{{connector.Archiv.BaseUrl}}",
"User": "{{connector.Archiv.Username}}",
"Password": "{{connector.Archiv.Password}}",
"Operation": "Upload",
"Source": "{{FilePath}}",
"Destination": "/rechnungen/"
}
}
]
},
{
"Name": "Info",
"Actions": [
{
"Type": "SMTP",
"Name": "Buchhaltung",
"Parameters": {
"SmtpServer": "smtp.example.com",
"From": "runos@example.com",
"To": "buchhaltung@example.com",
"Subject": "Neue Rechnung {{FileName}}",
"Body": "Die Rechnung {{FileName}} ist eingegangen."
}
}
]
}
]
}
}