Artikelformat

Abbildung eines Workflows als endlicher Automat

Viele Abläufe einer Webapplikation lassen sich durch einen Workflow darstellen. Ein Bestellprozess bspw. oder das Anlegen einer Seite in einem CMS. Heute betrachten wir, wie man soetwas auf einer etwas abstrakteren Ebene formuliert.

Wer mit den Zeta Components arbeitet, wird die dortige Workflow Komponente kennen. Diese baut grundsätzlich auf einer vereinfachten Darstellung eines Petrinetz auf. Meine Beschreibung wird etwas anders sein. Angenommen man nutzt einen endlichen Automaten. Dieser hat definierte Zustände und Übergänge. Genau so lässt sich auch ein Workflow bauen. Dazu ist der aktuelle Zustand der Anwendung eben der Zustand im Automaten und der Übergang zu einem anderen Zustand wird von einem Benutzer angestoßen.

Weiter hat man einen Startzustand und einen Endzustand. Das sind genau die Zustände, durch die man in die Verarbeitung Eintritt, bzw einen Prozess abschließt. Bspw will der Benutzer etwas bestellen, so wird der Startzustand betreten und ist die Bestellung an das System übermittelt und alle Informationen wie Zahlungsinformationen und Versand- und Rechnungsadresse gesammelt tritt der Benutzer über den Endzustand aus dem Workflow aus.

Ein wichtiger Punkt sind die Notifications. Dabei handelt es sich um Aktionen, die bei Übergang von einem Zustand zu einem anderen ausgeführt werden. Beispielsweise „Email an den Kunden, wenn Bestellprozess abgeschlossen wurde“.

Zuletzt fehlen nur noch Bedingungen. So kann man bedingte Übergänge definieren, die nur dann vom Benutzer aktiviert werden können, wenn eine bestimmte Bedingung erfüllt ist. Zum Beispiel könnte man die Option „Als Geschenk versenden“ nur anbieten, wenn eine Lieferadresse explizit angegeben wurde. Diese bedingten Übergänge könte man auf 2 Arten definieren. Einerseits Bedingungen, die das System vorgibt und die vom Benutzer nicht beeinflußt werden können und andererseits Bedingungen, die der Benutzer manipulieren kann, damit dieser Übergang „freigeschaltet“ wird.

Die Idee lässt sich sicher noch ausbauen und um Möglichkeiten erweitern die bei reiflicher Überlegung erst gefunden werden. Die Alternative zu den recht beliebten Petrinetzen sollte aber schon einmal klar sein 😉

In eigener Sache:
2010 neigt sich dem Ende zu und ich habe den Rest des Jahres Urlaub. Daher ist dies der letzte technische Beitrag; 2011 geht es wie gewohnt weiter. Also wünsche ich meinen Lesern ein frohes Fest und einen guten Rutsch ins Jahr 2011.