Parallel
Übersicht
Abschnitt betitelt „Übersicht“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.
Struktur
Abschnitt betitelt „Struktur“{ "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 |
Ablauf und Fehler
Abschnitt betitelt „Ablauf und Fehler“- Innerhalb eines Zweigs gilt dasselbe wie in
Doeines 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) oderRetry. - Ein fehlgeschlagener Zweig lässt
Parallelfehlschlagen, sobald die anderen Zweige fertig (WaitForAll) oder abgebrochen (StopOthers) sind. Danach entscheidet die Fehlerrichtlinie vonParallelbzw. des Workflows, wie es weitergeht, und OnError läuft wie bei jeder anderen Aktion. StopOthersstartet 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
Parallelsind während des Laufs eventuell noch nicht da. Verwenden Sie sie erst in Aktionen nach demParallel; 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.
Ergebnis
Abschnitt betitelt „Ergebnis“"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…}}.
Beispiel
Abschnitt betitelt „Beispiel“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." } } ] } ] }}