Synchronisation sur des sous-processus enfants
Cette rubrique propose un exemple d'utilisation du noeud d'automate de synchronisation pour analyser une modification d'état de l'activité d'un sous-processus parent.
Processus référencés
SynchronizingOnSiblingSubProcess.xml
SiblingSubProcess.xml
Description
L'expression ci-dessous concerne un automate qui analyse un événement ACTIVITY_STATE_CHANGED généré par une activité affectée. L'expression vérifie si le noeud d'activité qui a généré l'événement appartient à l'un des sous-processus du modèle de processus parent auquel appartient le noeud d'automate de synchronisation. Dans ce cas, elle déclenche l'événement de routage approprié en fonction de l'état du noeud d'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'activité appartient à un processus de premier niveau, c'est-à-dire qui n'existe pas dans un sous-processus imbriqué. Il est possible de suivre une activité de ce type, mais dans ce cas, l'automate doit connaître la structure des sous-processus imbriqués.
Copiez le code suivant :
//Get the Activity that generated the event
wt.workflow.engine.WfActivity activity = (( wt.workflow.engine.WfActivity ) (((wt.events.KeyedEvent)event).getEventTarget()));
//Get the sub process that the Activity belongs to
wt.workflow.engine.WfProcess subProcess = activity.getParentProcess();
//Get the Parent of that sub process
wt.workflow.engine.WfProcess activityParentProcess = (( wt.workflow.engine.WfActivity ) subProcess.getRequester( )). getParentProcess( );
//Get the parent process of the Synch robot that has this expression
wt.workflow.engine.WfProcess myParentProcess = ( wt.workflow.engine.WfProcess ) self.getObject( );
//If the object IDs of the parent of the activity and the parent of the Synch Robot are the same,check for the state of the activity.
if ( wt.fc.PersistenceHelper.isEquivalent(activityParentProcess , myParentProcess )){
//If the Activity has been executed, set result to "completed" and if it has been terminated, setresult to "terminated". Else wait //for a state change.
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 ?