獨立流程的同步
本主題提供一個「同步」自動機制節點的範例,該節點可停止流程,直到一個單獨工作流程中的活動節點達到特定狀態為止。
參考的工作流程
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";
}
}
}