Mit gleichgeordneten Unterprozessen synchronisieren
Dieses Thema liefert ein Beispiel für den Synchronisierungs-Robot-Knoten, wie er auf eine Änderung des Aktivitätsstatus des Unterprozesses eines Eltern-Prozesses wartet.
Referenzierte Workflows
SynchronizingOnSiblingSubProcess.xml
SiblingSubProcess.xml
Beschreibung
Der nachfolgende Ausdruck ist für einen Robot, der auf ein von einer zugewiesenen Aktivität ausgegebenes Ereignis AKTIVITÄTSSTATUS_GEÄNDERT wartet. Der Ausdruck überprüft, ob der Aktivitätsknoten, der das Ereignis ausgegeben hat, zu einem der Unterprozesse der Eltern-Workflow-Vorlage gehört, zu dem der Synchronisierungs-Robot-Knoten gehört. Falls ja, wird abhängig von dem Status des Aktivitätsknotens das entsprechende Routing-Ereignis ausgelöst.
Anweisungen
In diesem Fall wartet der Robot auf das Ereignis AKTIVITÄTSSTATUS_GEÄNDERT, und die entscheidende Windchill Klasse ist wt.workflow.work.WfAssignedActivity.
Dieses Beispiel geht davon aus, dass die Aktivität zu einem Prozess der ersten Ebene gehört, d.h., er befindet sich nicht in einem verschachtelten Unterprozess. Um eine Aktivität in einem verschachtelten Unterprozess zu finden, müsste der Robot die Struktur der Unterprozesse kennen.
Kopieren Sie den folgenden Code:
//Get the Activity that generated the event
wt.workflow.engine.WfActivity activity = (( wt.workflow.engine.WfActivity ) (((wt.events.KeyedEvent)event).getEventTarget()));
//Get the sub process that the Activity belongs to
wt.workflow.engine.WfProcess subProcess = activity.getParentProcess();
//Get the Parent of that sub process
wt.workflow.engine.WfProcess activityParentProcess = (( wt.workflow.engine.WfActivity ) subProcess.getRequester( )). getParentProcess( );
//Get the parent process of the Synch robot that has this expression
wt.workflow.engine.WfProcess myParentProcess = ( wt.workflow.engine.WfProcess ) self.getObject( );
//If the object IDs of the parent of the activity and the parent of the Synch Robot are the same,check for the state of the activity.
if ( wt.fc.PersistenceHelper.isEquivalent(activityParentProcess , myParentProcess )){
//If the Activity has been executed, set result to "completed" and if it has been terminated, setresult to "terminated". Else wait //for a state change.
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";
}
}