Kommunikation zwischen Workflows

Serviceware Processes bietet die Möglichkeit, Daten zwischen Workflows (bzw. deren laufenden Instanzen) auszutauschen.

Nachfolgend zwei einfache Beispiel-Workflows (Vorgang1 und Vorgang2).

Umgesetzt werden soll Folgendes:

Für alle Workflow-Instanzen von Vorgang2, die mit der Assoziation Cases2Incident mit dem Workflow Vorgang1 assoziiert sind, sollen nach der Lösung der Betreff und der Lösungstext von Vorgang1 in den Lösungstext von Vorgang2 übernommen werden.

Hierzu gibt es die beiden Workflowdefinitionen Vorgang1 und Vorgang2. Zudem brauchen wir ein Projekt, in dem für einen ActionScope (CommunicationRECEIVE in obiger Abbildung) zwei String-Variablen vorhanden sind, und ein API-Projekt (CommunicationSEND, s.o.), welches per Invoker den ActionScope ansprechen kann.

Vorgang1 enthält einen API-Aufruf SendSubAndSol:

Dieser Workflow simuliert die Lösung eines Problems, in der Stage Activity wird eine Lösung eingetragen und der Vorgang geschlossen. Danach wird durch die Methode SendSubAndSol Betreff und Lösungstext verschickt.

Anmerkung: Der Parameter ir wird bestimmt durch die zugrunde liegende API (siehe weiter unten), und wird hier bei Benutzung an die Primary ObjectIdentity gebunden.
Im API-Project selbst (CommunicationSEND) existiert eine Referenz zu dem zweiten Projekt, dem OperationScope-Projekts des Vorgang2 (CommunicationRECEIVE):

Hier der API-Code des SEND-Projekts:

Zur besseren Lesbarkeit der API-Code des SEND-Projekts hier noch als Text:
// Simple API Method
public static void SendSubAndSol(ICodeContext ctx, HLObjectIdentity ir)
{
// irint Incident, aus dem das Subject und Solution gesendet werden // soll, mit lesendem Zugriff
IncidentRequest irint = HLCaseSupport.GetCaseRead(ctx, ir) as IncidentRequest;
 if (irint != null )
 {
// ForEach-Schleife für jeden Incident irassoc, der dem 
// urspruenglichen Incident 
// ueber die Assoc Cases2Incident zugeordnet ist 
foreach (IncidentRequest irassoc in irint.Associations.Cases2Incident.RoleB.IncidentRequestList)
 {
//Invoker-Aufruf,Subject und Solution uebergeben
CommRECEIVEInvoker.InvokeAction(ctx,irassoc. GetObjectControllerId(),irassoc.GetObjectIdentity(),
"WarteAufSEND",irint.CaseGeneral.Subject, irint.CaseSolution.SolutionText);
 }
 }
 
 }
Anmerkung: Das ActionScope Project muss als Assembly hinzugeladen sein. Für jeden Incident, der über die Cases2Incident-Assoziation an den Ursprungsvorgang assoziiert wird, wird per Invoker die Verbindung zum ActionScope WarteAufSEND hergestellt – daher MUSS der Invoker-Aufruf innerhalb einer Foe-Each-Schleife erfolgen!. WarteAufSEND ist der Name des ActionScopes, der in Vorgang2 verwendet wird.
Das OperationScope-Projekt CommunicationRECEIVE enthält je einen String für den Betreff als auch für den Lösungstext:

Vorgang2 enthält den ActionScope mit Namen WarteAufSEND:

Innerhalb des ActionScopes wird durch eine Change-Activity (Ändere Vorgang) der Inhalt der Strings aneinandergehängt und in den Lösungstext geschrieben.