Базовое администрирование > Поддержка совместной работы > Администрирование рабочих процессов > Инструменты рабочего процесса > Администрирование шаблонов рабочего процесса > Примеры кодов рабочего процесса > Примеры синхронизации робота > Синхронизация по родственным подпроцессам
  
Синхронизация по родственным подпроцессам
В этом разделе приведен пример узла робота синхронизации, отслеживающего изменение в состоянии задачи родительского подпроцесса.
Рабочие процессы для справки
SynchronizingOnSiblingSubProcess.xml
SiblingSubProcess.xml
Описание
Приведенное ниже выражение предназначено для робота, отслеживающего событие ACTIVITY_STATE_CHANGED, которое порождается назначенной задачей. В выражении проверяется, выдано ли узлом задачи событие, относящееся к одному из подпроцессов родительского шаблона рабочего процесса, с которым связан узел робота синхронизации. В этом случае инициируется соответствующее управляющее событие в зависимости от состояния узла задачи.
Инструкции
В данном случае роботом отслеживается событие ACTIVITY_STATE_CHANGED и класс Windchill в отношении задачи wt.workflow.work.WfAssignedActivity.
В примере предполагается, что задача относится к процессу первого уровня, т. е. не является частью вложенного подпроцесса. Такую задачу можно отслеживать, но для этого роботу должна быть известна структура вложенных подпроцессов.
Скопируйте следующий код:
//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";
}
}