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