Sincronización de procesos padre-hijo
En este tema se proporciona un ejemplo del nodo de robot de sincronización que espera un cambio en el estado de actividad del evento que ha generado el proceso de trabajo padre.
Proceso de trabajo de referencia
SynchronizationOnParentChildProcess.xml
SynchronizeChildProcess.xml
Descripción
La siguiente expresión es para un robot que espera un evento ACTIVITY_STATE_CHANGED emitido por un nodo de actividad asignada. La expresión comprueba si la actividad que ha emitido el evento pertenece a un proceso que ha creado el proceso padre del robot. En caso afirmativo, arranca el evento de distribución adecuado en función del estado de la actividad.
Instrucciones
En este caso, el robot espera el evento ACTIVITY_STATE_CHANGED y la clase Windchill a la que debe prestar atención es wt.workflow.work.WfAssignedActivity.
En este ejemplo se supone que el robot pertenece a un proceso de primer nivel; es decir, que no existe en un subproceso anidado. El robot debe tener conocimiento de la estructura de los subprocesos anidados para poder obtener acceso al último proceso de la plantilla de proceso de trabajo.
Copie el código siguiente:
//Get the Activity that triggered the State_change event.
wt.workflow.engine.WfActivity activity = (( wt.workflow.engine.WfActivity ) (((wt.events.KeyedEvent)event).getEventTarget()));
//get the process that the Activity belongs to
wt.workflow.engine.WfProcess activityParentProcess = activity.getParentProcess();
//Get the Parent of that sub process
wt.fc.ObjectReference activityParentRef = activity.getParentProcessRef( );
//Get the parent process for the Synch Robot
wt.workflow.engine.WfProcess mySubProcess = ( wt.workflow.engine.WfProcess ) self.getObject( );
/Get the parent process that spawns this sub process
wt.workflow.engine.WfActivity myRequestorActivity = (( wt.workflow.engine.WfActivity ) mySubProcess.getRequester( ));
wt.workflow.engine.WfProcess myParentProcess = myRequestorActivity.getParentProcess( );
//Check if the parent of the activity and the parent process of the subprocess that the Synch robot belongs to are the same.
if ( wt.fc.PersistenceHelper.isEquivalent(activityParentProcess , myParentProcess )){
//If the state of the Activity in the ParentProcess is executed, set result to "completed" and ifterminated, set result to "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";
}
}