独立プロセスの同期化
このトピックでは、別のワークフロープロセスのアクティビティノードが特定の状態に到達するまで、プロセスを停止する同期化ロボットノードの例を示します。
参照ワークフロー
SynchronizationOfIndependentProcesses.xml
SynchronizeIndependentProcess.xml
説明
同期化ロボットノードは、別のワークフロープロセスのアクティビティが特定の状態に到達するまで、ワークフロープロセスの進行を停止できます。以下のコードは、そのようなロボットの定義式として使用できます。リッスン対象のクラスは wt.workflow.work.WfAssignedActivity、リッスン対象のイベントは ACTIVITY_STATE_CANGED です。ロボットは、イベントをトリガーしたアクティビティとその親プロセスが、ロボットに提供されたものと同一のものであるかどうかを調べ、同一である場合は、アクティビティの状態に基づいてルーティングを行います。アクティビティの親ワークフローテンプレートを識別するには、ロボットはアクティビティの名前とその親ワークフローテンプレートの名前の両方を知っている必要があります。これには、ロボットが所属するプロセス内の変数を使用できます。
指示
activityName と otherProcessName は、この条件式ロボットがリッスンするアクティビティ名およびプロセスを示す文字列値を含む、ワークフローテンプレートの変数です。
* 
同じ名前のプロセスが複数存在することがあります。この例を使用するには、1 つのプロセスのみが "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";
}
}
}
これは役に立ちましたか?