Sincronizzazione a sottoprocessi di pari livello
Questo argomento contiene un esempio relativo al nodo di robot di sincronizzazione che resta in ascolto di una modifica nello stato del ciclo di vita di un'attività appartenente a uno dei sottoprocessi di un padre.
Workflow di riferimento
SynchronizingOnSiblingSubProcess.xml
SiblingSubProcess.xml
Descrizione
L'espressione riportata di seguito si riferisce a un robot che resta in ascolto di un evento ACTIVITY_STATE_CHANGED emesso da un'attività assegnata. L'espressione verifica se il nodo di attività che ha emesso l'evento appartiene a uno dei sottoprocessi del modello di workflow padre a cui appartiene il nodo di robot di sincronizzazione. In caso affermativo, viene attivato l'evento di instradamento appropriato in base allo stato del ciclo di vita del nodo di attività.
Istruzioni
Il robot in questo caso resta in ascolto dell'evento ACTIVITY_STATE_CHANGED, mentre la classe Windchill cui prestare attenzione è wt.workflow.work.WfAssignedActivity.
In questo esempio si presuppone che l'attività appartenga a un processo di primo livello e che non sia pertanto presente in un sottoprocesso annidato. Nonostante sia possibile tenere traccia di questa attività, il robot in tal caso dovrebbe conoscere la struttura dei sottoprocessi annidati.
Copiare il codice riportato di seguito.
//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";
}
}