Veröffentlicht Thu, 11 Apr 2024 08:14:33 GMT von Tobias Stihl
Hallo zusammen,

ich stagniere etwas in einem Workflow, da ich mit folgendem Thema noch weiterkomme:

Ich habe drei Rollen, in dem mehrere Personen pro Rolle enthalten sind.
Zu beginn des Workflows wird eine Zuweisung an alle drei Rollen durchgeführt.
Anschließend kommt eine parallele Aufgabe, da der nächste Schritt erst weiter gehen soll, wenn alle Rollen einen Stempel gesetzt haben.
Dies funktioniert soweit auch, jedoch habe ich nun folgendes Problem:

Pro Rolle soll es ausreichen, wenn eine Person den Stempel zu Genehmigung setzt. Jedoch müssen im aktuellen Konstrukt alle Personen jeder Rolle einen Stempel setzen.

Gibt es hierzu eventuell weitere Ideen/Vorschläge?

Vielen Dank und Grüße
Veröffentlicht Thu, 11 Apr 2024 08:51:09 GMT von Simon H. Hellmann Toshiba Tec Germany Imaging Systems GmbH IT-Consultant Document Management Solutions
Hallo Tobias Stihl,

mit DW Bordmitteln in der 7.9 fällt mir hier nur eine Lösung ein, die allerdings voraussetzt, dass kein User Mitglied in mehr als einer von diesen drei Rollen ist und dass Sie ein on-premise System verwenden.

die parallele Aufgabe wird allen 3 Rollen zugewiesen über eine GV_Rollen.
In der Datenzuweisung, die nach Bestätigung der Aufgabe ausgeführt wird, werden mehrere SQL Statements genutzt, um herauszufinden, in welcher Rolle der User, der die Aufgabe bestätigt hat, angehörig ist.
Alle SQL Abfragen gehen auf die DWSYSTEM Datenbank (Standardmäßig als "Authentication" Verbindung angelegt).

Zuerst benötigen wir die uid aus der Tabelle DWUSERS:
SELECT uid FROM DWUSER WHERE name = '<User der die Aufgabe ausgeführt hat>';
Die UID wird in einer GV_UID (numerisch) zwischengespeichert.

damit können wir mit folgendem Statement die Rollen-IDs abrufen von allen Rollen in denen der User Mitglied ist.
SELECT rid from DWUSERTOROLE WHERE uid = GV_UID;

mit den Rollen-IDs können wir die Namen der Rollen abrufen:
SELECT name FROM DWROLE WHERE rid = GV_RID;

jetzt kennen wir den Namen der Rollen, in denen der User Mitglied ist. Damit können wir mit einem arithmetischen Ausdruck wie z.b. "Filter" die Rolle aus unserer ursprünglichen Liste der drei Rollen entfernen.
Die Abbruchbedingung der Aufgabe kann sich dann auf diese Liste beziehen, sobald diese leer ist, geht der WF weiter.
Alternativ kann auch eine normale Aufgabe verwendet werden, die Datenzuweisungen erfolgen nach der Aufgabe und mit einer Bedingung wird abgeprüft ob die Aufgabe erneut gestartet wird (mit weniger Rollen als Ziel) oder der WF weitergeht.

Die SQL Statements von oben lassen sich auch sehr gut in einer View mit Joins zusammenfassen, ungefähr so:
SELECT user.name, role.name, role.id, user.id
FROM DWUSER AS user
INNER JOIN DWUSERTOROLE ON DWUSER.uid = DWUSERTOROLE.rid AS userToRole
INNER JOIN DWROLE ON DWUSERTOROLE.rid = DWROLE.rid AS role
WHERE user.name = '<User der die Aufgabe ausgeführt hat>';

Ich hoffe, das hilft Ihnen etwas weiter.
Es kann gut sein, dass nicht alles oben 100% korrekte Syntax ist. Ich habe das nicht getestet sondern aus dem Kopf geschrieben, aber vor ein paar Jahren schon mal so ähnlich umgesetzt.

Gruß aus Neuss, 
Simon H. Hellmann
DocuWare System Consultant
Veröffentlicht Mon, 15 Apr 2024 12:59:44 GMT von Tobias Stihl
Hallo Simon H. Hellmann,

vielen Dank für die sehr informative Antwort.
Den Ansatz habe ich soweit verstanden
Leider bin ich nicht so tief in den DocuWare Workflows drin, um zu wissen, welchen Select in welche Aktion einfügen muss.
Gäbe es hierzu evtl. noch eine weitere Hilfestellung bzw. Informationsmaterial?

Vielen Dank und Grüße

 

Sie müssen angemeldet sein um Beiträge in den Foren zu erstellen.