基本的な管理機能 > コラボレーションのサポート > ワークフロー管理 > ワークフローツール > ワークフローテンプレート管理 > ワークフローのコーディング例 > 同期化ロボットの例 > 親子プロセスの同期化
  
親子プロセスの同期化
このトピックでは、親ワークフロープロセスを生成したイベントのアクティビティ状態の変更をリッスンする同期化ロボットノードの例を示します。
参照ワークフロー
SynchronizationOnParentChildProcess.xml
SynchronizeChildProcess.xml
説明
下記の定義式は、割当アクティビティノードにより発生する ACTIVITY_STATE_CANGED イベントをリッスンするロボットに対して使用されます。この定義式により、イベントを発生させたアクティビティが、このロボットの親プロセスから派生した子プロセスの 1 つに属しているかどうかを確認できます。属している場合は、アクティビティの状態に基づいて、対応するルーティングイベントを起動します。
指示
このケースでは、ロボットは ACTIVITY_STATE_CHANGED イベントをリッスンします。注意すべき Windchill クラスは wt.workflow.work.WfAssignedActivity です。
この例では、ロボットが第 1 レベルのプロセスに属すると仮定します。つまり、ネステッドサブプロセスには存在しません。ワークフローテンプレートで第 1 レベルのプロセスにアクセスするには、ネステッドサブプロセスの構造を認識できるように、ロボットを設定する必要があります。
以下のコードをコピーします。
//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";
}
}