Einleitung

Die Nuxeo Workflow Engine unterstützt parallele Aufgaben. Tatsächlich wird standardmäßig ein Workflow, der parallele Aufgaben unterstützt, in der Hauptplattform bereitgestellt. Parallele Aufgaben eignen sich hervorragend zur Steigerung der Effizienz der Benutzer, indem Benutzer Aufgaben abschließen können, ohne auf andere Benutzer warten zu müssen. Nichtsdestotrotz besteht eine weit verbreitet Nachfrage, “Workflow-Aufgaben” unterbrechen zu können; diese während einer Aufgabe aufzuteilen und unterschiedliche Wege zu wählen. Die Verzweigung für aufeinanderfolgende Aufgaben ist einfach. Sie müssen nur die notwendigen Übergänge (und deren Bedingungen) definieren. Typischerweise scheint es, als würde eine parallele Workflow-Aufgabe nicht aufgelöst werden, bis alle Teilnehmer ihre Aufgaben abgeschlossen haben; die Workflow Engine scheint zu warten, bis alle Aufgaben abgeschlossen sind und verändert sich dann entsprechend der Ergebnisse. Tatsächlich passiert etwas mehr. Dieses Mal sehen wir uns an, wie eine parallele Workflow-Aufgabe unterbrochen werden kann.

Übersicht

Eine “parallele Aufgabe” ist nur ein anderer Knotentyp in Nuxeo Studio, der mit “Multiple Tasks” (Mehrere Aufgaben) beschriftet ist:

User Tasks

Die Konfiguration eines Knotens für mehrere Aufgaben unterscheidet sich nicht von anderen Knoten auf einer übergeordneten Ebene. Es gibt Variablen, Formulare, Übergange und Eskalationsregeln wie bei jedem anderen Knoten. Der Hauptunterschied liegt darin, dass die Workflow Engine eine unterschiedliche Aufgabe für jeden beauftragten Mitarbeiter erstellt, wenn sie auf einen dieser Knoten trifft. Standardmäßig wird ein Übergang erst gewählt, wenn alle Aufgaben abgeschlossen sind.

Anwendungsfall

Wenn ich für den Schritt “Überprüfung” oder “Genehmigung” eines Workflows verantwortlich bin, möchte ich das Dokument sofort an den Autor zurücksenden, sollte das Dokument etwas völlig inakzeptables enthalten. In diesem Fall gibt es keinen Grund, auf die Genehmigung des Dokuments durch andere beauftragte Mitarbeiter zu warten, da ich bereits weiß, dass es überarbeitet werden muss. Dieser Anwendungsfall kann auch so gesehen werden, dass einem “Superuser” die Möglichkeit gegeben wird, eine parallele Aufgabe nach eigenem Ermessen zu unterbrechen.

Workflow

Hier ein einfacher Workflow zur Veranschaulichung:

Workflow

In diesem Fall möchte ich, dass der Übergang zur Ablehnung erfolgt, sobald ein beliebiger Benutzer auf die Schaltfläche “Ablehnen” klickt.

Aufgabenunterbrechung

Es gibt einige wichtige Elemente, die dies möglich machen: - ein automatischer Übergang für “Ablehnen” - die parallele Aufgabe wird zu einem exklusiven Knoten - eine Eskalationsregel wird erstellt, wenn der Benutzer die Ablehnung ausführt - eine Automatisierungskette wird erstellt, die die Workflow Engine dazu zwingt, die Aufgabe zu evaluieren

Automatischer Übergang

Für automatische Übergänge muss nur die Bedingung auf “wahr” gesetzt sein:

Automatischer Übergang

Exklusiver Knoten

Suchen Sie nach dem Kontrollkästchen auf der Registerkarte “Transitions” für die Aufgabe, um eine Aufgabe in einen exklusiven Knoten umzuwandeln:

Exclusive Node

Führt die Workflow Engine einen exklusiven Knoten aus, wird der Übergang der Reihe nach evaluiert und stoppt, sobald einer der Übergänge als wahr evaluiert wird. Dies bedeutet, dass der “Ablehnen”-Übergang nur verwendet wird, wenn alles andere fehlschlägt.

Eskalationsregel

Die Eskalationsregel sollte ausgelöst werden, wenn der Benutzer auf die Schaltfläche “Ablehnen” klickt, damit die Bedingung einem “normalen” Übergang entspricht. Beispiel:
NodeVariables["button"]=="reject"

Die von dieser Eskalationsregel verwendete Automatisierungskette zwingt die Workflow Engine dazu, die Übergänge mithilfe des Befehls Workflow.ResumeNode erneut zu evaluieren:

- Context.FetchDocument - Workflow.ResumeNode: {}

Sobald die Kette ausgeführt wird, evaluiert die Workflow Engine die möglichen Übergänge der Aufgabe. Erwähnenswert ist, dass die Bedingung für den Übergang zum Genehmigen wie folgt lauten kann:
@{NodeVariables["tasks"].getNumberEndedWithStatus("to_FinalReview")==NodeVariables["numberOfProcessedTasks"]}

Sind ausstehende Aufgaben nicht vollständig, wird diese Bedingung mit “False” evaluiert und die Workflow Engine folgt dem automatischen Übergang für “Reject”, da es sich um einen exklusiven Knoten handelt. Tipp: Denken Sie daran, für dieses Verhalten einen gültigen Lebenszyklusübergang anzugeben, falls während dieses Prozesses Lebenszyklusstatus geändert werden.

Vorteil: Proportionale Aufgabenauflösung

Interessante Ergebnisse können erreicht werden, indem die Bedingung für einen Übergang in einer parallelen Aufgabe angepasst wird. Wie wäre es zum Beispiel damit, einem Übergang zu folgen, wenn mindestens die Hälfte der beauftragten Mitarbeiter die Aktion “NotLiable” ausgewählt hat? Hier ist der Ausdruck:

@{NodeVariables["tasks"].getNumberEndedWithStatus("NotLiable") / NodeVariables["numberOfProcessedTasks"]>0.5}
Anstatt die Aufgabe zu unterbrechen, unterstützt diese Aussage ein Wahlsystem; sie wird nur als “True” bewertet, wenn mehr als die Hälfte der beauftragten Mitarbeiter den Übergang “NotLiable” wählt. Noch besser: ohne exklusiven Knoten bedeutet dies, dass mehrere Übergänge von der gleichen Aufgabe gefolgt werden können.

Fazit

Die Workflow Engine von Nuxeo ist unglaublich flexibel. Es ist wirklich erstaunlich, eine scheinbar natürliche Anfrage von einem Kunden zu nehmen, z. B. “Ich möchte eine Aufgabe ablehnen und nicht die Zeit meiner Kollegen verschwenden”, und diese direkt in der Konfiguration abzubilden. Sie sind nie auf ein bestimmtes Verhalten festgelegt, nicht einmal zur Laufzeit. Mit so vielen Optionen zum Ändern des Pfads über einen Workflow ist die Engine wirklich in der Lage, moderne Geschäftsabläufe zu unterstützen und die digitale Transformation zu ermöglichen.