IM-BPM for Accel Platform IM-BPM チュートリアルガイド 第18版 2021-04-01

4.3.14.1. パラレルゲートウェイを使用する

このチュートリアルでは、「パラレルゲートウェイ」を使用してプロセスの並列処理の開始や合流の定義方法を解説します。
「パラレルゲートウェイ」を使用することで、無条件で並列処理が行えます。
「パラレルゲートウェイ」の詳細については、「IM-BPM プロセスデザイナ 操作ガイド」 - 「ゲートウェイ」 - 「パラレルゲートウェイ」もあわせて参照してください。

コラム

このチュートリアルで作成するプロセス定義のサンプルを以下のリンクからダウンロードできます。

このサンプルは「プロセス定義アップロード」機能でプロジェクトにアップロードできます。
アップロード手順は「IM-BPM プロセスデザイナ 操作ガイド」-「プロセス定義のアップロード」を参照してください。

4.3.14.1.1. パラレルゲートウェイを使用し、並列処理を行う

以下の図は、ユーザAとユーザBでじゃんけんを行うプロセスです。
ユーザA、および、ユーザBの手を選択するスクリプトタスクを並列に実行します。
2つのスクリプトタスクがどちらも完了したら結果を判定するスクリプトタスクを呼び出します。
../../../../_images/parallel_gateway_0002.png
図:完成イメージ
  1. パラレルゲートウェイのプロパティを設定します。

    パラレルゲートウェイで分岐と結合を行うにあたり、特別なプロパティの設定を行う必要はありません。

  2. シーケンスフローのプロパティを設定します。

    パラレルゲートウェイから出力されているシーケンスフローは全て無条件で同時並列に分岐対象となるため、特別なプロパティの設定を行う必要はありません。

  3. スクリプトタスク「ユーザAのじゃんけんの手を決める」 のプロパティを設定します。

    ../../../../_images/parallel_gateway_0003.png
    図:スクリプトタスク「ユーザAのじゃんけんの手を決める」

    スクリプトタスク「ユーザAのじゃんけんの手を決める」にユーザAの手をランダムに選択し、変数 userA に格納するスクリプトを設定します。

    function run(variables, execution, entity) {
      var random = new java.util.Random();
      var hand = random.nextInt(3);
    
      entity.setVariable('userA', hand);
    }
    ../../../../_images/parallel_gateway_0004.png
    図:スクリプトタスク「ユーザAのじゃんけんの手を決める」の「プロパティエリア」-「メインコンフィグ」-「スクリプト」
  4. スクリプトタスク「ユーザBのじゃんけんの手を決める」 のプロパティを設定します。

    ../../../../_images/parallel_gateway_0005.png
    図:スクリプトタスク「ユーザBのじゃんけんの手を決める」

    スクリプトタスク「ユーザBのじゃんけんの手を決める」にユーザBの手をランダムに選択し、変数 userB に格納するスクリプトを設定します。

    function run(variables, execution, entity) {
      var random = new java.util.Random();
      var hand = random.nextInt(3);
    
      entity.setVariable('userB', hand);
    }
    ../../../../_images/parallel_gateway_0006.png
    図:スクリプトタスク「ユーザBのじゃんけんの手を決める」の「プロパティエリア」-「メインコンフィグ」-「スクリプト」
  5. スクリプトタスク「結果を表示する」のプロパティを設定します。

    ../../../../_images/parallel_gateway_0007.png
    図:スクリプトタスク「結果を表示する」

    スクリプトタスク「結果を表示する」にユーザAとユーザBのじゃんけんの勝者を変数 winner に格納するスクリプトを設定します。

    function run(variables, execution, entity) {
      var userAhand = entity.getVariable('userA');
      var userBhand = entity.getVariable('userB');
    
      if (userAhand == userBhand) {
        Debug.console('The game was drawn.');
        entity.setVariable('winner', 'The game was drawn.');
      } else if (userAhand == 0) {
        if (userBhand == 1) {
          Debug.console('USER_A WINS');
          entity.setVariable('winner', 'USER_A');
        } else {
          Debug.console('USER_B WINS');
          entity.setVariable('winner', 'USER_B');
        }
      } else if (userAhand == 1) {
        if (userBhand == 2) {
          Debug.console('USER_A WINS');
          entity.setVariable('winner', 'USER_A');
        } else {
          Debug.console('USER_B WINS');
          entity.setVariable('winner', 'USER_B');
        }
      } else if (userAhand == 2) {
        if (userBhand == 0) {
          Debug.console('USER_A WINS');
          entity.setVariable('winner', 'USER_A');
        } else {
          Debug.console('USER_B WINS');
          entity.setVariable('winner', 'USER_B');
        }
      }
    }
    ../../../../_images/parallel_gateway_0008.png
    図:スクリプトタスク「結果を表示する」の「プロパティエリア」-「メインコンフィグ」-「スクリプト」
  6. 実行結果を確認します。

    上記で作成したプロセスを実行環境にデプロイし、実行した結果の確認を行います。

    ../../../../_images/parallel_gateway_0009.png
    図:結果表示
    ../../../../_images/parallel_gateway_0010.png
    図:変数一覧