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

4.3.11.1. 外部システムで実行されるタスクを受信タスクを用いて表現する

このチュートリアルでは、受信タスクを用いてIM-BPMのプロセスの中に外部のシステムで実行されるタスクを表現する方法を解説します。
外部システムで実行されるタスクの完了を待ち、完了後に後続のタスクへ実行状態が移ります。

受信タスクの詳細については、「IM-BPM プロセスデザイナ 操作ガイド」 - 「タスク」 - 「受信タスク」もあわせて参照してください。

本チュートリアルで作成するシステムの流れは、以下です。
  1. 外部システムを実行したいタイミングでIM-LogicDesignerタスクから外部システムを実行します。
  2. 外部システムの実行中はIM-BPMでは受信タスクに実行中マークが付与されています。
  3. 外部システム完了のタイミングで、外部システムからintra-mart Accel Platformに対してIM-LogicDesignerで作成されたREST APIを呼び出します。
  4. 呼び出されたロジックフローで対象のエグゼキューションを検索し、シグナルを送信することで受信タスクを完了します。
../../../../_images/receive_task_0001.png
図 : 概要

コラム

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

4.3.11.1.1. 外部システムを実行するロジックフローを作成する

「IM-LogicDesigner」を使用して、IM-BPMと外部システムを繋ぐ部分のロジックフローを作成します。
../../../../_images/receive_task_0002.png
図 : 完成イメージ(ロジックフロー)
  1. 外部システムを開始するためのREST APIを実行するための「IM-LogicDesigner」の「REST定義」を作成します。
    「サイトマップ」→「IM-LogicDesigner」→「ユーザ定義」→「REST定義新規作成」をクリックします。
  2. 「ユーザ定義共通設定」項目をそれぞれ以下のように入力します
    • ユーザ定義ID: callExternalSystem

    • ユーザ定義名: 外部システム実行REST API呼び出し

    • ユーザカテゴリ:
      入力項目名 入力内容
      ユーザカテゴリID im_logicdesigner-data
      ユーザカテゴリ名 BPMチュートリアル
    • 入力値:
      キー名
      processInstanceId <string>
    ../../../../_images/receive_task_0003.png
    図 : 「REST定義新規作成」-「ユーザ定義共通設定」
  3. 「リクエスト情報」項目をそれぞれ以下のように入力します。
    • エンドポイント: <ベースURL>/logic/api/im_bpm_tutorial/receive_task/test

    • メソッド: POST

    • リクエストエンコーディング: UTF-8

    • リクエストパラメータ:
      パラメータ名 パラメータ値
      processInstanceId ${processInstanceId}
    ../../../../_images/receive_task_0004.png
    図 : 「REST定義新規作成」-「リクエスト情報」

    コラム

    このチュートリアルの上記項目は一例です。実際は利用されるシステムに合わせて入力内容を変更してください。
    このエンドポントを動作をさせるためには、以下の「IM-LogicDesigner」と「IM-Authz(認可) ポリシー - XML形式」の資材を追加でインポートする必要があります。
  4. 「登録」ボタンをクリックし、「REST定義」を保存します。

  5. 作成した「REST定義」を呼び出すロジックフローを作成します。
    • 「サイトマップ」→「IM-LogicDesigner」→「フロー定義一覧」をクリックします。
    • 「フロー定義一覧」画面、ツールバー内の「新規作成」をクリックし、「ロジックフロー定義編集」画面を表示します。
  6. メニューバーの「入出力設定」をクリックし、「入力設定」を表示します。

    ../../../../_images/receive_task_0005.png
    図 : 「ロジックフロー定義編集」
  7. 「入力設定」を表示し、入力でプロセスインスタンスIDを受け取るように設定します。

    • 入力
      「IM-BPM」から渡ってきた、外部システムへ連携するためのプロセスインスタンスID
      キー名
      processInstanceId <string>
    ../../../../_images/receive_task_0006.png
    図 : 「入出力設定」
  8. 作成したユーザ定義を配置します。
    • パレット内の「IM-BPMチュートリアル」の一覧から「外部システム実行REST API呼び出し」を選び、フロー編集画面上に追加します。
    ../../../../_images/receive_task_0007.png
    図 : 「ロジックフロー定義編集」
  9. 「外部システム実行REST API呼び出し」のマッピング設定をします。
    • 以下のように線を繋ぎます。

      入力(始点) 出力(終点)
      入力<object> - processInstanceId callExternalSystem1<object> - processInstanceId
    ../../../../_images/receive_task_0008.png
    図 : 「マッピング設定」 - 「外部システム実行REST API呼び出し」
  10. タスクを以下のようにつなぎます。

    out in
    開始 外部システム実行REST API呼び出し
    外部システム実行REST API呼び出し 終了
    ../../../../_images/receive_task_0002.png
    図 : 完成イメージ(ロジックフロー)
  11. 「ロジックフロー定義編集」画面上部、ヘッダ内の「新規保存」をクリックします。
    以下のように設定し、ロジックフロー定義を新規保存します。
    • フロー定義ID : callExternalSystem

    • フロー定義名 : 外部システム実行フロー

    • フローカテゴリ :
      • ID : im_logicdesigner-data
      • 名称 : BPMチュートリアル
    ../../../../_images/receive_task_0009.png
    図 : 「新規保存」

4.3.11.1.2. プロセス定義を作成する

上記のロジックフローを組み込んだプロセスを作成します。
このプロセスは、最初の「ユーザタスク」を処理すると「IM-LogicDesignerタスク」により外部システムが実行されます。
「受信タスク」で外部システムの完了のシグナルを待ちます。そのため、「受信タスク」が実行中となっている場合は外部システムが実行中であることが表現できます。
シグナルを受信した後、後続の「ユーザタスク」が実行されます。
../../../../_images/receive_task_0010.png
図 : プロセス定義図
  1. 「プール」を設置します。
  2. 「プール」に3つの「レーン」を設置し、上から順にそれぞれ以下のように名前をつけます。
    • 外部システム
    • intra-martシステム
    • 担当者
  3. プロセス全体に対する設定を行います。
    「プール」を選択し、プロセスタブから、以下のように項目を設定します。
    • プロセス定義キー : receive_task_usage
    • 名前 : 外部システム連携
    • 処理対象ユーザ : aoyagi
    ../../../../_images/receive_task_0011.png
    図 : 「プール」-「プロパティ」 - 「プロセス」
  4. 「開始イベント」を「担当者レーン」へ設置します。
  5. 外部システムを呼び出す前の状態を確認するために、「担当者レーン」に「ユーザタスク」を設置します。
  6. 動作確認の際に「タスク一覧画面」でわかりやすくするため、ユーザタスクに名前を付けます。
    「ユーザタスク」を選択し、「基本情報」タブから「名前」に 外部システム実行前 と設定します。
    ../../../../_images/receive_task_0012.png
    図 : 「ユーザタスク」-「プロパティ」 - 「基本情報」
  7. 「外部システム実行前」タスクに対して、担当者を設定します。
    「外部システム実行前」タスクを選択し「メインコンフィグ」タブから「担当者」に aoyagi と設定します。
    ../../../../_images/receive_task_0013.png
    図 : 「ユーザタスク」-「プロパティ」 - 「メインコンフィグ」
  8. 外部システムを実行するために「IM-LogicDesigner」を呼び出します。
    「IM-LogicDesignerタスク」を選択し、「intra-martシステムレーン」へ設置します。
  9. 設置した「IM-LogicDesignerタスク」に名前をつけます。
    「基本情報」タブから、「名前」に 外部システム起動 と設定します。
    ../../../../_images/receive_task_0014.png
    図 : 「IM-LogicDesignerタスク」-「プロパティ」 - 「基本情報」
  10. 呼び出すロジックフローの設定とロジックフローの入力値に渡すデータの設定をします。
    「IM-LogicDesignerタスク」 - 「プロパティ」 - 「メインコンフィグ」 で以下の項目を設定します。
    • フローID: callExternalSystem

    • 利用するバージョン: 最新バージョンを利用

    • 入力データ
      • 名前: processInstanceId
      • 値: ${execution.processInstanceId}
    ../../../../_images/receive_task_0015.png
    図 : 「IM-LogicDesignerタスク」-「プロパティ」 - 「メインコンフィグ」
  11. 外部システムの完了シグナルを受信するための「受信タスク」を「外部システムレーン」へ設置します。
  12. 設置した「受信タスク」にIDと名前をつけます。
    「基本情報」タブで以下のように設定をします。
    • ID: external-system-receive-task

    • 名前: 外部システム実行中

      ../../../../_images/receive_task_0016.png
      図 : 「受信タスク」-「プロパティ」 - 「基本情報」
  13. 外部システム完了後の状態を確認するために、「担当者レーン」に「ユーザタスク」を設置します。
  14. 動作確認の際に「タスク一覧画面」でわかりやすくするため、設置したユーザタスクに名前を付けます。
    「ユーザタスク」を選択し、「基本情報」タブから「名前」に 外部システム実行後 と設定します。
    ../../../../_images/receive_task_0017.png
    図 : 「ユーザタスク」-「プロパティ」 - 「基本情報」
  15. 「外部システム実行後」タスクに対して、担当者を設定します。
    「外部システム実行後」タスクを選択し「メインコンフィグ」タブから「担当者」に aoyagi と設定します。
    ../../../../_images/receive_task_0018.png
    図 : 「ユーザタスク」-「プロパティ」 - 「メインコンフィグ」
  16. 「終了イベント」を「担当者レーン」へ設置します。
  17. 以下に示すプロセス定義図を参考にエレメント同士をシーケンスフローでつなぎます。

    ../../../../_images/receive_task_0010.png
    図 : プロセス定義図

4.3.11.1.3. 外部システムの完了時に呼び出され、IM-BPMへシグナルを送信するロジックフローを作成する

外部システムが完了したことをIM-BPMへ伝えるためのシグナルを発行するためのロジックフローを作成します。
作成したロジックフローにルーティングを設定し、REST APIとして外部システムから呼び出します。
../../../../_images/receive_task_0028.png
図 : 完成イメージ(ロジックフロー)
  1. ロジックフローを作成します。
    • 「サイトマップ」→「IM-LogicDesigner」→「フロー定義一覧」をクリックします。
    • 「フロー定義一覧」画面、ツールバー内の「新規作成」をクリックし、「ロジックフロー定義編集」画面を表示します。
  2. メニューバーの「入出力設定」をクリックし、「入力設定」を表示し、入力でプロセスインスタンスIDを受け取るように設定します。

    • 入力
      外部システムから渡ってきた、連携のために外部システム実行時に渡していたIM-BPMのプロセスインスタンスID
      キー名
      processInstanceId <string>
    ../../../../_images/receive_task_0019.png
    図 : 「入出力設定」
  3. メニューバーの「変数設定」をクリックし、「変数設定」を表示し、検索した結果対象となるエグゼキューションIDを保持する変数を設定します。

    キー名
    queryExecutionReslut <object>
    processInstanceId<object> - id <string>
    ../../../../_images/receive_task_0020.png
    図 : 「変数設定」
  4. メニューバーの「定数設定」をクリックし、「定数設定」を表示し、ロジックフローを実行する上で必要な定数を定義します。

    定数ID 定数値 説明
    zero 0 エグゼキューション検索で結果を取得するためのインデックス
    activityId external-system-receive-task シグナル送信対象の受信タスクのアクティビティID
    ../../../../_images/receive_task_0021.png
    図 : 「定数設定」
  5. 「エグゼキューション検索」タスクを配置します。
    • パレット内の「IM-BPM」の一覧から「エグゼキューション検索」を選び、フロー編集画面上に追加します。
    ../../../../_images/receive_task_0022.png
    図 : 「ロジックフロー定義編集」
  6. 「エグゼキューション検索」のマッピング設定をします。
    • 以下のように線を繋ぎます。

      入力(始点) 出力(終点)
      入力<object> - processInstanceId im_bpmQueryExecutions1<object> - processInstanceId
      定数<object> - activityId im_bpmQueryExecutions1<object> - activityId
    ../../../../_images/receive_task_0023.png
    図 : 「マッピング設定」 - 「エグゼキューション検索」
  7. 「変数操作」タスクを配置します。
    • パレット内の「基本」の一覧から「変数操作」を選び、フロー編集画面上に追加します。
    ../../../../_images/receive_task_0024.png
    図 : 「ロジックフロー定義編集」
  8. 「変数操作」のマッピング設定をします。
    • 「マッピング設定」画面上部、ヘッダ内の右側に位置するセレクトボックスから「get」を選択します。
      「関数を追加」をクリックします。

    コラム

    マッピング関数については、「IM-LogicDesigner仕様書」-「マッピング関数一覧」を参照してください。
    • 以下のように線を繋ぎます。

      入力(始点) 出力(終点)
      im_bpmQueryExecutions1<object> - queryExecutionsResults<object[]> get: array
      定数<object> - zero get: index
      get: out 定数<object> - queryExecutionReslut
    ../../../../_images/receive_task_0025.png
    図 : 「マッピング設定」 - 「変数操作」
  9. 「エグゼキューション検索」タスクを配置します。
    • パレット内の「IM-BPM」の一覧から「シグナル送信」を選び、フロー編集画面上に追加します。
    ../../../../_images/receive_task_0026.png
    図 : 「ロジックフロー定義編集」
  10. 「シグナル送信」のマッピング設定をします。
    • 以下のように線を繋ぎます。

      入力(始点) 出力(終点)
      変数<object> - queryExecutionReslut<object> - id im_bpmSignal1<object> - executionId
    ../../../../_images/receive_task_0027.png
    図 : 「マッピング設定」 - 「シグナル送信」
  11. タスクを以下のようにつなぎます。

    out in
    開始 エグゼキューション検索
    エグゼキューション検索 変数操作
    変数操作 シグナル送信
    シグナル送信 終了
    ../../../../_images/receive_task_0028.png
    図 : 完成イメージ(ロジックフロー)
  12. 「ロジックフロー定義編集」画面上部、ヘッダ内の「新規保存」をクリックします。
    以下のように設定し、ロジックフロー定義を新規保存します。
    • フロー定義ID : sendSignalReceiveTask

    • フロー定義名 : 外部システム完了時シグナル送信フロー

    • フローカテゴリ :
      • ID : im_logicdesigner-data
      • 名称 : BPMチュートリアル
  13. 作成したロジックフローに対してルーティング定義を作成し、REST APIとして外部システムから呼び出せるようにします。
    • 「サイトマップ」→「IM-LogicDesigner」→「ルーティング定義一覧」
    • 「ロジックフロールーティング定義一覧」画面、ツールバー内の「新規作成」をクリックし、「ルーティング定義編集」画面を表示します。
  14. 「対象ロジックフロー定義情報」の対象フロー項目に以下を選択します。
    • フロー定義ID: sendSignalReceiveTask
    • フロー定義名: 外部システム完了時シグナル送信フロー
    ../../../../_images/receive_task_0029.png
    図 : 「ルーティング定義編集」-「対象ロジックフロー定義情報」
  15. 「ロジックフロールーティング定義情報」の各項目に以下を入力します。
    • ルーティング: imbpm/tutorial/send-signal/receive-task
    • メソッド: POST
    • 認可URI: imbpm/tutorial/send-signal/receive-task
    ../../../../_images/receive_task_0030.png
    図 : 「ルーティング定義編集」-「ロジックフロールーティング定義情報」
  16. 「登録」ボタンをクリックし、ルーティング定義を保存します。

  17. 「ロジックフロールーティング定義一覧」にて今回作成した「外部システム完了時シグナル送信フロー」の「icon_auth_setting_button」をクリックし「認可設定」画面を表示します。

    ../../../../_images/receive_task_0031.png
    図 : 「ロジックフロールーティング定義一覧」
  18. 「ゲストユーザ」、「認証済みユーザ」に対して許可します。

    ../../../../_images/receive_task_0032.png
    図 : 「外部システム完了時シグナル送信フロー」-「認可設定」
  19. これにより、外部システムから <ベースURL>/logic/api/imbpm/tutorial/send-signal/receive-task に対して、対象のプロセスインスタンスIDをパラメータ processInstanceId に詰めて送信することで、該当の受信タスクが完了するようになりました。
    外部システムの完了時の動作にこのREST APIへリクエストを送信するように設定してください。

コラム

このREST APIをcurlで使用する例は以下です。
  • curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "processInstanceId": "プロセスインスタンスID" }' '<ベースURL>/logic/api/imbpm/tutorial/send-signal/receive-task'

4.3.11.1.4. 作成したプロセスの動作確認をする

作成した「プロセス定義」を実行環境にデプロイし、動作の確認を行います。
  1. プロセスを開始します。
    「サイトマップ」→「BPM」→「プロセス開始一覧」画面を表示します。
  2. 「プロセス開始一覧」画面から、対象となるプロセスの「startable_list-start_processes」をクリックします。

    ../../../../_images/receive_task_0033.png
    図 : 「プロセス開始一覧」
  3. 開始直後のプロセスの状態は図のようになっており、まだ外部システムは実行されていません。
    ../../../../_images/receive_task_0034.png
    図 : 「プロセス図」
  4. 「外部システム実行前」タスクを処理します。
    • 「プロセス開始一覧」画面のツールバーにある「タスク一覧」をクリックし、「タスク一覧」画面を表示します。
    • 「外部システム実行前」タスクの「startable_list-start_processes」をクリックし、タスクを処理します。
    ../../../../_images/receive_task_0037.png
    図 : 「タスク一覧」
  5. 「外部システム実行前」タスクを処理することで、「外部システム起動」タスクへ到達します。
    紐付けられた、ロジックフローによって外部システムが起動し、次の「外部システム実行中」へ到達します。
    外部システムからのシグナルを受信するまではこのタスクに実行中マークが付与されます。
    ../../../../_images/receive_task_0035.png
    図 : プロセス定義図

    コラム

    REST定義作成の際に、エンドポイントを 「<ベースURL>/logic/api/im_bpm_tutorial/receive_task/test」 と設定して追加資材をインポートしている場合は、渡されたプロセスインスタンスIDがログへ出力されています。
    これは、追加資材の中のロジックフローにあるログ出力タスクによって、入力値の値をログへ出力するよう設定されているからです。
    ../../../../_images/receive_task_0036.png
    図 : ログ出力
  6. 外部システムの完了をintra-martへ知らせます。
    • 外部システムが完了した際に設定したリクエストが送信されることで、 ロジックフローが動作し、対象の受信タスクへシグナルが送信されます。

    コラム

    以下のcurlコマンドを実行することで、擬似的に外部システム完了のリクエストを送信できます。
    curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "processInstanceId": "プロセスインスタンスID" }' '<ベースURL>/logic/api/imbpm/tutorial/send-signal/receive-task'
  7. 外部システムが完了しシグナルが送信されると、「外部システム実行中」タスクが完了し、「外部システム実行後」タスクに到達します。

    ../../../../_images/receive_task_0038.png
    図 : プロセス定義図