Wir hatten ml das Problem, das innerhalb eines Prozesses bestimmte Zustände in einem anderen System ermittelt werden mussten um dann direkt innerhalb des Prozesses zu reagieren.
Zuerst dachte ich dabei an einen Scheduled Workflow, der in bestimmten Intervallen gestartet wird und dann wiederum entsprechende Routinen startet. Jedoch würde das wiederum bedeuten, dass unnötig viele WF-Instanzen gestartet würden, die am Ende eigentlich nichts tun. Da der gewünschte Intervall zudem noch recht kurz sein sollte (im Minutenbereich) haben wir uns dafür entschieden ein Lösung innerhalb des Prozesses zu finden.
Auch die Möglichkeit der Aktion „Loop“ wollte nicht so recht in unser Konstrukt passen. Sicher hätte man in Verbindung mit der Aktion „Wait“ ein ähnliches Konstrukt erreichen können. Zudem wäre es auf diese Weise eigentlich sehr einfach noch weitere Verzweigungsmöglichkeiten zu erstellen (außer „Cancel“ und „Next“).
Die Demo-Anwendung CW.Polling.Demo ist ein recht einfaches Konstrukt, welches innerhalb einer Schleife bestimmte Werte vergleicht und dann entsprechende Wege nimmt.
Die Demoanwendung basiert auf einem SmartboxObjekt, mit dessen Daten die Schleife gesteuert werden kann.
- Counter – legt fest an welcher Stelle der Counter gestartet werden soll
- MaxCounter – definiert ein Ende der Schleife. Wird dieser Count erreicht bricht die Schleife ohne Warten auf die restlichen Bedingungen ab
- WaitSeconds – legt fest in welchem Intervall die Bedingungen geprüft werden sollen (Angabe in Sekunden)
- Message – bietet die Möglichkeit eines Kommentars (z.B. warum welche Bedingung eingetreten ist)
- ProcessId – die Instanz-Id des aktuellen Prozesses
- YesNo – dies ist die „Abbruchbedingung“. Beim Start muss dieser Wert auf „false“ gesetzt werden, da sonst die Schleife nie durchlaufen wird. Sobald der Wert auf „true“ gesetzt wird (z.B. durch eine andere Applikation etc.) ist die Abbruchbedingung der Schleife erfüllt und der Workflow nimmt seinen weiteren Gang
Die Demoanwendung bietet drei Möglichkeiten bei der Prüfung der Schleifenbedingungen:
- Polling – der Wert „Counter“ ist kleiner als „MaxCounter“ UND der Wert „YesNo“ ist leer oder steht auf „false“
- Next – der Wert „YesNo“ hat den Wert „true“ angenommen
- Cancel – der Wert „Counter“ ist größer oder gleich „MaxCounter“
Der praktische Nutzen kann darin liegen, das die Schleife von außen gesteuert werden kann. Beispielsweise kann eine andere Anwendung dafür sorgen, dass die Abbruchbedingungen verändert werden. Welche Aktionen dann unter den Wegen „Next“ oder „Cancel“ erfolgen ist dann natürlich Deine Sache.
Mit der Demoanwendung kann der Demoworkflow gestartet und gesteuert werden. Hierzu muss lediglich das Formular ausgefüllt werden – d.h. ein neuer Datensatz wird angelegt.
Sofern „YesNo“ auf „false“ steht und der Wert „Counter“ kleiner als „MaxCounter“ ist, wird der Workflow entprechende „runden“ drehen.
Der Workflow kann mit dem Button „Starte Workflow“ gestartet werden. Sobald eine Instanz-ID zugeordnet wurde (nach dem Starten des WFs), kann von hier auch direkt die ViewFlow-Seite aufgerufen werden.
Über die ListView können alle Datensätze in Bearbeitung genommen werden. Auf diese Weise lassen sich die Bedingungen verändern. So würde das Abändern des Wertes „false“ bei „YesNo“ zu „true“ den Abbruch der Schleife bei der nächsten Prüfung der Abbruchbedingungen zur Folge haben.
Hinweis:
Mit dem Wert „0“ für „MaxCounter“ wird KEINE maximale Laufzeit definiert. D.h. die Schleife dauert so lange an, bis „YesNo“ auf „true“ gestellt wird. Demnach sollte man an dieser Stelle besonders Achtsam sein, da hier natürlich schnell eine Endlosschleife gebaut werden kann. Natürlich gilt auch zu beachten, dass bei einem entsprechend kurzem Intervall u.U. andere Systeme unnötig gestresst werden.
Demo-App herunterladen:
Bild von Christopher Kuszajewski auf Pixabay