Synchronisierung von unabhängigen Prozessen
Dieses Thema liefert ein Beispiel für einen Synchronisierungs-Robot-Knoten, der einen Prozess anhält, bis ein Aktivitätsknoten in einem anderen Workflow-Prozess einen bestimmten Status erreicht.
Referenzierte Workflows
SynchronizationOfIndependentProcesses.xml
SynchronizeIndependentProcess.xml
Beschreibung
Ein Synchronisierungs-Robot-Knoten kann einen Workflow-Prozess anhalten, bis eine Aktivität in einem anderen Workflow-Prozess einen bestimmten Status erreicht. Der nachfolgende Code kann ein Ausdruck für einen solchen Robot sein. Die Klasse, auf die gewartet wird, ist wt.workflow.work.WfAssignedActivity, und das Ereignis, auf das gewartet wird, ist AKTIVITÄTSSTATUS_GEÄNDERT. Er prüft, ob die Aktivität, die dieses Ereignis ausgelöst hat, und ihr Eltern-Prozess die gleichen sind, die angegeben wurden. Falls ja, führt er abhängig vom Status der Aktivität das Routing durch. Um die Eltern-Workflow-Vorlage der Aktivität zu identifizieren, muss er die Namen der Aktivität und der Eltern-Workflow-Vorlage kennen. Dies kann eine Variable in dem Prozess sein, zu dem der Robot gehört.
Anweisungen
activityName und otherProcessName repräsentieren Variablen in der Workflow-Vorlage, die Zeichenfolgenwerte für den Namen der Aktivität und den Prozess enthalten, auf die der Robot wartet.
* 
Es kann mehr als einen Prozess mit dem gleichen Namen geben. Um dieses Beispiel verwenden zu können, müssen Sie sicherstellen, dass entweder nur ein Prozess den Namen "processName" trägt oder dass alle Prozesse mit diesem Namen Varianten derselben Workflow-Vorlage sind.
Kopieren Sie den folgenden Code:
//get the activity that emitted the event
wt.workflow.engine.WfActivity activity = ( wt.workflow.engine.WfActivity ) ((wt.events.KeyedEvent) event).getEventTarget();
//Check if this activity is the same as the one we are interested in
if (activity.getName().equals(activityName)) {
//Get the parent process of the activity.
wt.workflow.engine.WfProcess activityParent = activity.getParentProcess();
//Check if the parent process of the activity is the same one we are interested in.
if (( activityParent.getName( )). equals(otherProcessName )) {
//Set result to "completed" if the activity has been executed and to "terminated" if it has been terminated. Else check again.
if ( wt.workflow.engine.WfState.CLOSED_COMPLETED_EXECUTED.equals(activity.getState( ))){
result = "completed";
}
else if ( wt.workflow.engine.WfState.CLOSED_TERMINATED.equals(activity.getState( ))){
result = "terminated";
}
}
}
War dies hilfreich?