Workflow
Ein Workflow beschreibt den Lebenszyklus eines Datensatzes (Dokument). Ein Datensatz ist in WebGenesis® durch die Instanz eines Eintrags realisiert. Ein Datensatz durchläuft verschiedene Zustände. Der Zustand eines Datensatzes ändert sich durch das Ausführen von Aktionen. Aktionen werden von Benutzern ausgeführt. Welche Benutzer, welche Aktionen ausführen dürfen, wird durch Rollen geregelt.
Ein konkreter Workflow besteht also aus:
- dem Datentyp des Datensatzes
(entspricht in WebGenesis® einer Eintragskategorie) - einer Menge von Zuständen
- einer Menge von Rollen
- einer Menge von Aktionen
Da die Eintragskategorie Workflow auf einem Standardeintrag aufbaut, besitzt ein Workflow-Eintrag alle Attribute und Funktionen eines Standardeintrags, d.h. das Textattribut kann z.B. zur Dokumentation des Workflows genutzt werden.
Neuen Workflow erstellen
Nach Anwählen der Informationskategorie Workflow im Menü Neu, erscheint die Bearbeitungs-Maske für die Metadaten. Zusätzlich zu den Standard-Metadaten existiert noch ein Feld zur Einstellung des Datentyps für das Workflow-Dokument. Mittels des Ankreuzfeldes Debug kann der Workflow zur Ausgabe zusätzlicher Information veranlasst werden.
In einem WebGenesis®-System können beliebig viele Workflows definiert und erzeugt werden. Die Standarddarstellung eines Workflow-Eintrags zeigt eine Eingangskorb-Darstellung für den angemeldeten Benutzer an.
Zustand (Eintragskategorie)
Einem Datensatz ist immer ein Zustand zugeordnet. Der Zustand des Datensatzes bestimmt welche Aktionen momentan auf dem Datensatz ausgeführt werden können. In einem Workflow können beliebig viele Zustände definiert und erzeugt werden.
Zustände sind in der Workflow-Komponente als Einträge realisiert. Ein Zustand enthält keine weiteren Attribute zu den Standard-Metadaten eines Eintrags. Das Titel-Attribut eines Zustands legt dessen Bezeichnung fest und das Text-Attribut kann zur Beschreibung des Zustandes benutzt werden.
Der Zustand eines Datensatzes ändert sich durch das Ausführen von Aktionen.
Ein Workflow besitzt immer automatisch den virtuellen Zustand "nicht existent". Dieser muss z.B. als Ausgangszustand für eine "Neu"-Aktion und als Zielzustand einer "Löschen"-Aktion verwendet werden.
Entscheidung (Verzweigung)
Eine besondere Form eines Zustandes ist die Entscheidung. Einer Entscheidung sind fest zwei Aktionen zugeordnet, je nachdem, ob die hinterlegte Entscheidungsfunktion Wahr oder Falsch zurückliefert, wird die Wahr- bzw . Falsch-Aktion ausgeführt.
Eine Entscheidung besitzt folgende Zusatzattribute:
- eine Aktion, die im Wahr-Falle ausgeführt wird (nicht änderbar)
- eine Aktion, die im Falsch-Falle ausgeführt wird (nicht änderbar)
- eine Prüffunktion (Klassen- und Funktionsname)
Die Prüffunktion muss programmiert werden. Zu Testzwecken gibt es zwei Hilfsfunktionen:
- Application.Workflow.Service.alwaysTrue: Liefert immer Wahr
- Application.Workflow.Service.alwaysFalse: Liefert immer Falsch
Man kann durch abwechselnde Angabe der beiden Funktionen beide Pfade austesten.
Rolle (Eintragskategorie)
Damit ein Benutzer eine Aktion auf einem Datensatz ausführen kann, muss dieser Benutzer mindestens eine Rolle erfüllen. In einem Workflow können beliebig viele Rollen definiert und erzeugt werden.
Rollen sind in der Workflow-Komponente als Einträge realisiert. Das Titel-Attribut einer Rolle legt deren Bezeichnung fest und das Text-Attribut kann zur Beschreibung der Rolle benutzt werden.
Eine Rolle besitzt folgende Zusatzattribute:
- eine oder mehrere Basis-Rolle(n)
- Parameter für gewählte Basis-Rolle(n)
Verfügbare Basis-Rollen
Eine konkrete Rolle besteht aus einer oder mehreren Basis-Rollen, mit den für diese Basis-Rolle(n) benötigten Parametern. Ein Benutzer erfüllt eine Rolle, wenn er alle zugeordneten Basis-Rollen erfüllt.
In der Workflow-Komponente sind bereits eine Menge von Basis-Rollen implementiert, die im folgenden beschrieben werden. Außerdem steht eine Schnittstelle zur Verfügung, über die eigene Basis-Rollen implementiert werden können.
Benutzer (ID des Benutzers) |
Ist diese Basis-Rolle gewählt, muss die ID eines Benutzers angegeben werden. Ein Benutzer erfüllt die Rolle, wenn er genau dieser Benutzer ist. |
Mitglied in Gruppe (ID der Gruppe) |
Ist diese Basis-Rolle gewählt, muss die ID einer Gruppe angegeben werden. Ein Benutzer erfüllt die Rolle, wenn er Mitglied in dieser Gruppe (oder einer Untergruppe) ist. |
Mitglied in Gruppe (Name der Gruppe) |
Ist diese Basis-Rolle gewählt, muss der Name einer Gruppe angegeben werden. Ein Benutzer erfüllt die Rolle, wenn er Mitglied in einer Gruppe (oder einer Untergruppe) ist, die diesen Namen trägt. |
Ersteller des Eintrags (Datensatzes) |
Damit ein Benutzer diese Rolle erfüllt, muss er der Ersteller des Datensatzes (des Eintrags) sein, auf dem er die Aktion ausführen möchte. |
Gleiche Gruppe wie der Ersteller des Eintrags |
Damit ein Benutzer diese Rolle erfüllt, muss er mit dem Ersteller des Datensatzes (des Eintrags), auf dem er die Aktion ausführen möchte, in einer gemeinsamen Gruppe (oder in einer Untergruppe) sein. |
Lese-/Schreibrecht auf Eintrag (ID des Eintrags) |
Damit ein Benutzer eine dieser Basis-Rollen erfüllt, muss er das Zugriffsrecht Lesen bzw. Hinzufügen (je nach gewählter Basis-Rolle) auf einem Eintrag besitzen. Die ID des Eintrags wird in der Rolle hinterlegt. |
Benutzer ist Superuser |
Damit ein Benutzer diese Basis-Rolle erfüllt, muss er Superuser-Rechte besitzen. |
Vorbedingung | Hier kann eine beliebige Funktion angegeben werden, die true/false zurückliefert. Dies kann z.B. verwendet werden, um Aktionen nur dann anzuzeigen, wenn Attribute des Datensatzes bestimmte Werte besitzen. Die Syntax der Funktion entspricht der Entscheidungsfunktion. |
Aktion (Eintragskategorie)
Eine Aktion führt auf einem Datensatz (Eintrag) eine beliebige Anzahl von Funktionen aus. Damit eine Aktion von einem Benutzer ausgeführt werden kann, muss er zunächst eine oder mehrere Rollen erfüllen und der Datensatz muss sich in einem bestimmen Zustand befinden. Nach der Ausführung der Aktion wird dem Datensatz ein neuer Zustand zugewiesen (der aber auch dem Ausgangszustand entsprechen kann). In einem Workflow künnen beliebig viele Aktionen definiert und erzeugt werden.
Aktionen sind in der Workflow-Komponente als Einträge realisiert. Das Titel-Attribut einer Aktion legt deren Bezeichnung fest und das Text-Attribut kann zur Beschreibung der Aktion benutzt werden.
Eine Aktion besitzt folgende Zusatzattribute:
- Wo die Aktion angezeigt werden soll: In einem (oder allen) Formular(en), im Eingangskorb oder im Datensatz
- Rolle(n) die die Aktion ausführen dürfen
- Rückfrage/Hinweis: Wird ausgegeben bevor die Aktion ausgeführt wird. Wird die Rückfrage verneint, wird die Aktion nicht ausgeführt.
- Ausgangszustand: In diesem Zustand muss sich ein Datensatz befinden, damit die Aktion ausgeführt werden kann.
- Endzustand: Zustand indem sich der Datensatz nach der Ausführung der Aktion befindet (kann dem Ausgangszustand entsprechen)
- Eine Menge auszuführender Funktionen (mit den benötigten Parametern)
- Ziel-Anzeige (Darstellung): Was soll nach der Ausführung der Aktion angezeigt werden? (mit evtl. benötigten Parametern)
Verfügbare Standard Funktionen
In der Workflow-Komponente sind bereits eine Menge von Funktionen implementiert, die im folgenden beschrieben werden. Außerdem steht eine Schnittstelle zur Verfügung, über die eigene Funktionen implementiert werden können.
Speichern des Datensatzes (Eintrags) |
Diese Funktion führt die gleiche Funktionalität wie das
Abschicken eines Formulars im Formularframework
aus. D.h. die Speichern-Funktion muss aus einer
Formularbearbeitungsmaske aufgerufen werden und es muss eine
XSLT-Datei für die Abbildung auf die
WebGenesis®-Import-Struktur angegeben werden.
Optional kann ein XML-Schema angegeben werden (oder
alternativ eine XForms-Datei), gegen welches die Daten
geprüft werden. Zur Erstellung kann das Werkzeug
FormBuilder verwendet werden. Neu erzeugte Einträge sind Untereinträge des Workflow-Eintrags. Einträge, die nachbearbeitet werden, verbleiben jedoch in ihrem aktuellen Verzeichnis. |
Löschen des Datensatzes (Eintrags) |
Löscht den Datensatz. Als Zielzustand einer Aktion, in der diese Funktion verwendet wird, muss "Nicht existent" angegeben werden. |
Verschieben des Datensatzes (Eintrags) |
Verschiebt den Datensatz in ein anderes Verzeichnis. Als Parameter muss die ID des gewünschten Zielverzeichnisses angegeben werden. |
Ändern der Zugriffsrechte des Datensatzes (Eintrags) |
Wird ein neuer Datensatz gespeichert, wird er als Untereintrag des
WorkflowÂEintrags angelegt, d.h. er besitzt die gleichen
Zugriffsrechte wie der Workflow-Eintrag und
kann somit von Benutzern mit gewissen Zugriffsrechten modifiziert
werden. Dadurch kann das Rollenkonzept umgangen werden. Um dies zu
vermeiden sollte beim ersten Speichervorgang diese Funktion
ergänzt und auf "Sperren" gesetzt werden. Dadurch
werden alle Zugriffsrechte auf den Eintrag (alle Gruppen und
Benutzer, die explizite Zugriffsrechte besitzen) auf
"Kein Zugriff"
gesetzt. Um einen Datensatz aus einem Workflow zu "entlassen", kann diese Funktion mit "Freigeben" aufgerufen werden. Dadurch enthält der Eintrag die gleichen Zugriffsrechte wie der Ordner, in dem er sich gerade befindet. Dies macht z.B. Sinn im Zusammenhang mit der Verschieben-Funktion. |
E-Mail(s) versenden |
Ermöglicht das Versenden von E-Mails. Absender, Empfänger,
Kopie und Blindkopie können konfiguriert werden, sowie der
Betreff und der Inhalt. An jeden Empfänger wird jeweils eine
E-Mail verschickt. Die Informationen können auch aus einem Formular ausgelesen werden, so dass auch eine Bearbeitung des Inhalts möglich ist. Wird als Inhalt der E-Mail ein Template gewählt, darf in diesem EJava-Code enthalten sein. Es stehen folgende Variablen zur Verfügung:
Auf im Datensatz gespeicherte Formularwerte kann folgendermaßen zugegriffen werden: [IS docState=entry.getExtensionData("docState")]
[IS docState.get("einAttribut")]
bzw. [IS docState.getAll("einMehrwertigesAttribut")] |
Verfügbare Standard-Ziel-Anzeigen (Darstellungen)
In der Workflow-Komponente sind bereits eine Menge von Ziel-Anzeigen implementiert, die im folgenden beschrieben werden. Außerdem steht eine Schnittstelle zur Verfügung, über die eigene Ziel-Anzeigen im plementiert werden können.
Zu jeder Aktion kann bestimmt werden, in welchen Ziel-Anzeigen die Aktion angezeigt wird (aber nur wenn auch der Zustand des Datensatzes zur Aktion passt). Damit kann z.B. festgelegt werden, ob eine Aktion nur in der Anzeige eines Datensatzes oder auch bereits in der Auflistung im Eingangskorb verfügbar ist. Außerdem kann man damit bestimmen, dass z.B. die Speichern-Aktion nur im Bearbeitungsformular sichtbar ist, aber nicht in der Darstellung des Datensatzes (was recht sinnlos wäre).
Bearbeitungs- formular |
Zu einem Workflow-Eintrag können beliebig viele
Bearbeitungsformulare in den Layout-Bereich hochgeladen werden. Ein
Bearbeitungsformular besteht dabei aus einem
HTML-Formular und einer XSLT-Datei
für die Abbildung auf die
WebGenesis®-Import-Struktur (letztere wird bei der
"Speichern"-Funktion angegeben). Dies entspricht den
Dateien im WebGenesis®-Formularframework. Zur
Erstellung der Formulare kann das
WebGenesis®-Werkzeug FormBuilder eingesetzt
werden. Wird als Ziel-Anzeige "Bearbeitungsformular" gewählt, muss das gewünschte hochgeladene Formular ausgewählt werden. Da im Gegensatz zum Formularframework beliebig viele HTML-Formulare hochgeladen werden können, kann man mehrere Varianten eines Formulars erstellen und diese je nach Zustand des Datensatzes verwenden. Z.B. könnten in einem späteren Zustand eines Workflows gewisse Felder nur als Text angezeigt werden oder auch ganz entfallen. |
Eingangskorb | Zeigt die Eingangskorb-Darstellung des Workflow-Eintrags an. Im
Eingangskorb werden diejenigen Datensätze (Einträge)
angezeigt, für die eine oder mehrere Aktionen existieren,
deren Rollen der angemeldete Benutzer erfüllt. Die
Datensätze sind gruppiert nach ihrem aktuellen Zustand. Zu jedem Datensatz wird der Titel, der Zustand, und das Änderungsdatum angezeigt. In die Darstellung des Eintrags werden zusätzlich alle Aktionen eingeblendet, deren Rollenbedingung der Benutzer erfüllt und für die festgelegt wurde, dass sie im Eingangskorb angezeigt werden sollen. Weiterhin werden im Eingangskorb alle Aktionen angezeigt, die als Ausgangszustand den virtuellen Zustand "Nicht existent" besitzen (also z.B. eine "Neu"ÂFunktion) und für die festgelegt wurde, dass sie im Eingangskorb angezeigt werden sollen. |
Datensatz (Eintrag) |
Zeigt den Datensatz, zu dem die Aktion ausgeführt wurde an. Es werden alle Aktionen eingeblendet, deren Rollenbedingung der Benutzer erfüllt und für die festgelegt wurde, dass sie im Datensatz angezeigt werden sollen. |
Workflow Engine (Entry.ID.ExecAction)
Der Befehl ExecAction führt eine Aktion auf einem Workflow-Datensatz aus. Hierbei wird folgender Algorithmus angewandt:
- Zunächst wird geprüft, ob die Aktion existiert und zum angegeben Workflow gehört.
- Danach wird geprüft, ob der angemeldete Benutzer mindestens eine der zugeordneten Rollen erfüllt.
- Der Zustand des Datensatzes muss dem Ausgangszustand der Aktion entsprechen.
- Die zugeordneten Funktionen werden ausgeführt.
- Falls keine Fehler bei der Ausführung der Aktionen aufgetreten sind, wird der Zustand des Datensatzes auf den Zielzustand der Aktion gesetzt (falls der Datensatz nicht gelöscht wurde).
- Ist der neue Zustand des Datensatzes eine Entscheidung, wird die Entscheidungsfunktion ausgeführt und danach die Funktionen der Wahr- bzw. Falsch-Aktion. Weiter bei 5.
- Die gewählte Ziel-Anzeige wird dargestellt (bzw. bei einer Entscheidung die Ziel-Anzeige der Wahr- oder Falsch-Aktion).
Der Befehl wird jeweils zum Workflow-Eintrag aufgerufen. Als Parameter muss die ID der Aktion (ID des Aktionseintrags) und die ID des Datensatzes (ID des Datensatzeintrags) übergeben werden. Hierzu ein Beispiel:
Dieser Befehl würde im Workflow mit der ID 1000 die Aktion mit der ID 2000 auf den Datensatz mit der ID 4711 ausführen. Der data-Parameter kann entfallen, wenn als Ausgangszustand der Aktion "Nicht existent" angegeben ist.
Die verfügbaren Befehle (Aktionen) eines Workflows werden automatisch in die entsprechenden Ziel-Anzeigen eingebaut
Workflow-Editor
Die Erstellung und Bearbeitung von Workflows benötigt man eine Client-Anwendung, da die Visualisierung des Ablaufs von Zuständen und Aktionen auf HTML-Basis sehr problematisch wäre.
Da die Erstellung und Bearbeitung von Workflows nur von Administratoren vorgenommen werden sollte, wurde der Workflow-Editor in das Administrator-Werkzeug integriert. Der Workflow-Editor wird aufgerufen über den Menüpunkt Werkzeuge → Workflow bearbeiten.
In der linken Hälfte des Editors sind alle Zustände (Entscheidungen), Rollen und Aktionen des Workflows aufgelistet. Durch Anwahl eines Workflow-Elements erscheinen die Attribute des Elementes in der rechten Hälfte des Editors zur Bearbeitung. Das aktuell gewählte Element wird in der Visualisierung rot hervorgehoben. Zustände und Aktionen können auch durch Klicken in der Visualisierung ausgewählt werden.
Die Visualisierung des Workflows wird immer automatisch angepasst. Sie kann jedoch durch das Ändern der Reihenfolge der Zustände und Aktionen (Pfeil hoch bzw. runter) beeinflusst werden.
Alle Änderungen werden bei "Speichern" direkt auf den WebGenesis®-Server übertragen und sind sofort wirksam.
Erweiterungsschnittstellen
Die Workflow-Komponente stellt verschiedene Schnittstellen zur Verfügung, um die Funktionalität zu erweitern. Es können neue Basis-Rollen, neue Funktionen, neue Ziel-Darstellungen und Entscheidungsfunktionen implementiert werden.
Details zu den Java-Klassen, Funktionen, Parametern sowie den Funktionsaufrufen der Schnittstelle sind im WebGenesis®-Handbuch Application Services beschrieben
Weiterführende Informationen zu Workflows erhalten Sie von Ihrem System-Administrator.
Hilfestellung für Implemetierer vermitteln wir im Rahmen einer WebGenesis®-Entwickler-Schulung