Amministrazione di base > Supporto per la collaborazione > Amministrazione dei workflow > Strumenti per workflow > Amministrazione dei modelli di workflow > Esempi di codice di workflow > Esempi di robot di sincronizzazione > Sincronizzazione di processi indipendenti
  
Sincronizzazione di processi indipendenti
Questo argomento contiene un esempio relativo a un nodo di robot di sincronizzazione che blocca un processo fino a quando un nodo di attività di un processo di workflow separato non raggiunge un determinato stato del ciclo di vita.
Workflow di riferimento
SynchronizationOfIndependentProcesses.xml
SynchronizeIndependentProcess.xml
Descrizione
Un nodo di robot di sincronizzazione può bloccare l'avanzamento di un processo di workflow fino a quando un'attività di un processo di workflow separato non raggiunge un determinato stato del ciclo di vita. Il codice riportato di seguito è un esempio di espressione per un robot di questo tipo. La classe e l'evento per cui il robot resta in ascolto sono rispettivamente wt.workflow.work.WfAssignedActivity e ACTIVITY_STATE_CHANGED. Il robot verifica se l'attività che ha attivato l'evento e il relativo processo padre corrispondono a quelli specificati nell'espressione e, in tal caso, esegue l'instradamento in base allo stato dell'attività. Per identificare il modello di workflow padre dell'attività, deve conoscere i nomi sia dell'attività che del modello di workflow padre. Questi dati possono essere rappresentati da una variabile nel processo a cui il robot appartiene.
Istruzioni
activityName e otherProcessName sono le variabili del modello di workflow contenenti i valori stringa che rappresentano il nome dell'attività e del processo per cui il robot resta in ascolto.
* 
È possibile che siano presenti più processi con lo stesso nome. Per utilizzare questo esempio, è necessario verificare che solo un processo sia denominato "processName" o che tutti i processi presentino questo nome come istanze dello stesso modello di workflow.
Copiare il codice riportato di seguito.
//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";
}
}
}