Synchronisation de processus indépendants
Cette rubrique propose un exemple d'utilisation du noeud d'automate de synchronisation pour interrompre un processus jusqu'à ce qu'un noeud d'activité d'un processus distinct atteigne un certain état.
Processus référencés
SynchronizationOfIndependentProcesses.xml
SynchronizeIndependentProcess.xml
Description
Un noeud d'automate de synchronisation peut interrompre la progression d'un processus jusqu'à ce qu'une activité d'un processus distinct atteigne un certain état. Le code ci-dessous peut être une expression d'un automate de ce type. La classe à vérifier est wt.workflow.work.WfAssignedActivity et l'événement à vérifier est ACTIVITY_STATE_CHANGED. L'automate vérifie si l'activité qui a déclenché cet événement et son processus parent sont identiques à ceux qui lui ont été fournis. Dans ce cas, un routage est effectué en fonction de l'état de l'activité. Pour identifier le modèle de processus parent de l'activité, l'automate doit connaître les noms de l'activité et de son modèle de processus parent. Il peut s'agir d'une variable du processus auquel appartient l'automate.
Instructions
activityName et otherProcessName sont des variables du modèle de processus, dont les valeurs texte représentent le nom de l'activité et celui du processus surveillé par l'automate.
* 
Plusieurs processus peuvent porter le même nom. Pour pouvoir utiliser cet exemple, vous devez vous assurer qu'un seul processus porte le nom "processName" ou que tous les processus de ce nom sont des instances du même modèle de processus.
Copiez le code suivant :
//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";
}
}
}
Est-ce que cela a été utile ?