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