Sincronización de procesos independientes
En este tema se proporciona un ejemplo de nodo de robot de sincronización que detiene un proceso hasta que un nodo de actividad de otro proceso de trabajo alcance un estado determinado.
Procesos de trabajo de referencia
SynchronizationOfIndependentProcesses.xml
SynchronizeIndependentProcess.xml
Descripción
Un nodo de robot de sincronización puede detener el progreso de un proceso de trabajo hasta que una actividad de un proceso de trabajo independiente alcance un estado determinado. El código siguiente puede ser una expresión para dicho robot. The class to listen to is wt.workflow.work.WfAssignedActivity and the event to listen to is ACTIVITY_STATE_CHANGED. El robot comprueba si la actividad que ha activado este evento y su proceso padre son iguales a los proporcionados a tal efecto y, en caso afirmativo, los distribuye en función del estado de la actividad. Para poder identificar la plantilla de proceso de trabajo padre de la actividad, se debe conocer el nombre tanto de la actividad como de su proceso de trabajo padre. Puede tratarse de una variable del proceso al que pertenece el robot.
Instrucciones
activityName y otherProcessName representan variables de la plantilla de proceso de trabajo con valores de cadena que representan el nombre de la actividad y el proceso que espera el robot.
|
Es posible que existan varios procesos con el mismo nombre. Para utilizar este ejemplo, es necesario asegurarse de que solamente existe un proceso denominado "processName" o de que todos los procesos con este nombre son instancias de la misma plantilla de proceso de trabajo.
|
Copie el código siguiente:
//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";
}
}
}