Synchronisation sur des processus parents/enfants
Cette rubrique propose un exemple d'utilisation du noeud d'automate de synchronisation pour analyser une modification d'état de l'activité de l'événement ayant généré le processus parent.
Processus référencé
SynchronizationOnParentChildProcess.xml
SynchronizeChildProcess.xml
Description
L'expression ci-dessous concerne un automate qui analyse un événement ACTIVITY_STATE_CHANGED généré par un noeud d'activité affectée. L'expression vérifie si l'activité qui a généré l'événement appartient à un processus qui a déclenché le processus parent de l'automate. Dans ce cas, elle déclenche l'événement de routage approprié en fonction de l'état de l'activité.
Instructions
Dans ce cas, l'automate scrute l'événement ACTIVITY_STATE_CHANGED et la classe Windchill nécessitant une attention particulière est wt.workflow.work.WfAssignedActivity.
Cet exemple suppose que l'automate appartient à un processus de premier niveau, c'est-à-dire qui n'existe pas dans un sous-processus imbriqué. L'automate doit connaître la structure des sous-processus imbriqués afin d'accéder au modèle de processus qui est le plus éloigné.
Copiez le code suivant :
//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";
}
}