Anfragen des Clientinterfaces

Wie schon in der Einleitung erklärt, gibt es 5 Arten von Aufrufen, die dem Client beim Clientinterface zur Verfügung stehen und dann entsprechend vom Auftragsabwickler bearbeitet werden.

Der Aufruf ''Gib mir mögliche Workflowtemplates`` wird vom Client benutzt, um eine Auswahl der möglichen Workflows zu erhalten, bevor ein neuer Workflow gestartet wird. Dieser Aufruf wird wie im Abschnitt interfaces erklärt nur an den Workflowmanager weitergeleitet und nicht vom Auftragsabwickler bearbeitet.

Sobald im Client die Auswahl eines Templates getroffen ist, wird ''Neuen Workflow starten`` aufgerufen und als Argument die TemplateId und ein Kommentar vom startenden Benutzer übergeben. Im Clientinterface wird zunächst die UserId ausgelesen, und zusammen mit TemplateId, über das Workflowmanagerinterface, dem Workflowmanager übergeben. Dieser startet einen neuen Workflow und als sendet als Bestätigung den Workflowidentifikator. Nachdem die Bestätigung vom Workflowmanager eingtroffen ist, übergibt das Clientinterface die UserId, den Kommentar und den Workflowidentifikator an den Auftragabwicker, der nun einen initialen Datensatz für den Workflow anlegt.

Um nächste Schritte in einem Workflow zu bearbeiten, sei es ein eigener oder die Weiterbearbeitung eines fremden Workflows, stellt der Applicationserver den Aufruf ''Gib mir wartende Aufträge`` zur Verfügung. Dieser Aufruf wird vom Clientinterface mit der Id des nachfragenden Users versehen und an den Auftragsabwickler weitergegeben. Der Auftragsabwickler ermittelt die Einkaufsgruppe des User und die Konten auf die dieser Zugriff besitzt. Mit diesen Informationen liest er alle Aufträge, die zu den ermittelten Konten gehören und nicht die Einkaufsberechtigung der Einkaufsgruppe des Users überschreiten aus der Datenbank. Dabei werden Aufträge, die schon ein anderer Mitarbeiter bearbeitet oder die schon abgearbeitet sind, aussortiert. Außerdem werden alle Aufträge, die direkt an den User gerichtet sind ausgelesen. Die entstehende Auftragsliste wird als Ergebnis des Aufrufs an den Client gesendet.

Wenn der Nutzer am Client sich dann einen der Aufträge zum bearbeiten aussucht, wird automatisch über das Clientinterface ein Lockbefehl für den entsprechenden Auftrag an den Auftragsabwickler gesendet. Der Auftragsabwickler setzt den Auftrag in der Datenbank gelockt, damit kein anderer Benutzer ihn bearbeiten kann. Dann füllt er diesen mit sämtlichen relevanten Daten die eventuell in vorherigen Workflowschritten schon erstellt wurden. Dieser gefüllte Auftrag wird dem Client zur Bearbeitung gesandt. Der Zeitpunkt des Lock setzens wird in der Datenbank gespeichert. Nach einem gewissen Timeout wird der Lockbesitzer aufgefordert das Lock zu verlängern. Wird es nicht verlängert kann der Auftrag wieder von anderen bearbeitet werden, da beim Besitzers des Locks anscheinend ein Fehler auftrat, wie z.b. Absturz des Rechners. Somit ist gewährleistet, daß kein Deadlock in einem Workflow entsteht weil das Lock eines Auftrages nicht entfernt wurde. Sollte ein Benutzer durch irgendeine Ablenkung verpaßt haben das Lock zu verlängern, kann ein anderer den Auftrag übernehmen und es wird ein neues Lock erstellt. In diesem Fall kann der ursprüngliche Benutzer den Auftrag nicht weiterbearbeiten und wird falls er es doch versucht benachrichtigt, daß der Auftrag bereits gelockt ist. Sollte ein Benutzer seinen Auftrag abbrechen wird das Lock wieder entfernt und der Auftrag kann wieder von jedem Nutzer bearbeitet werden.

Ist ein Benutzer mit der Bearbeitung eines Auftrags fertig, wird der Auftrag gefüllt mit den neuen Daten an das Clientinterface gesendet. Das Clientinterface beauftrag den Auftragsabwickler den gefüllten Auftrag zu speichern.Dieser sucht die neu hinzugefügten Informationen aus dem Auftrag und speichert diese in die Datenbank. Hierbei können auch noch andere Funktionen aufgerufen werden, wie z.b. das versenden einer E-mail. Danach setzt der Auftragsabwickler den Auftrag in der Datenbank auf ''done``. Jetzt wird der Workflowmanager benachrichtigt, daß der Auftrag abgearbeitet wurde.

Während des bearbeiten von Aufträgen, können Informationen allgemeiner Natur benötigt werden, wie z.b. Stammdaten oder Adressen von Lieferanten. Für solche Informationen stellt das Clientinterface Funktionen zur Verfügung, die die gewünschten Informationen über den Auftragshandeler aus der Datenbank auslesen und dann an den Client übermitteln.

Jan Kechel 2006-04-28