4.3.11.1. 外部システムで実行されるタスクを受信タスクを用いて表現する¶
コラム
- プロセス定義
- IM-Authz(認可) ポリシー - XML形式定義情報
- それぞれの資材のアップロード方法については、以下を参照してください。
- プロセス定義:
- アップロード方法については「IM-BPM プロセスデザイナ 操作ガイド」 - 「プロセス定義のアップロード」を参照してください。
- ロジックフロー:
- インポート方法については「IM-LogicDesigner ユーザ操作ガイド」-「インポート/エクスポート」を参照してください。
- IM-Authz(認可) ポリシー - XML形式:
インポート手順は「IM-Authz(認可)インポート・エクスポート仕様書」-「ポリシー - XML形式」を参照してください。
パブリックストレージへのファイルの配置は「システム管理者操作ガイド」-「ファイル操作」を参照してください。
- ジョブネット「認可(ポリシー)インポート」の実行時に実行パラメータfile を追加し、値に上記の認可ファイルのパブリックストレージ上のパスを指定してください。または、パブリックストレージへの配置の際にファイル名をauthz-policy.xmlへリネームしてパブリックストレージのルート直下に配置し、ジョブを実行してください。
4.3.11.1.1. 外部システムを実行するロジックフローを作成する¶
- 外部システムを開始するためのREST APIを実行するための「IM-LogicDesigner」の「REST定義」を作成します。
- 「サイトマップ」→「IM-LogicDesigner」→「ユーザ定義」→「REST定義新規作成」をクリックします。
- 「ユーザ定義共通設定」項目をそれぞれ以下のように入力します
ユーザ定義ID: callExternalSystem
ユーザ定義名: 外部システム実行REST API呼び出し
- ユーザカテゴリ:
入力項目名 入力内容 ユーザカテゴリID im_logicdesigner-data ユーザカテゴリ名 BPMチュートリアル
- 入力値:
キー名 型 processInstanceId <string>
図 : 「REST定義新規作成」-「ユーザ定義共通設定」
- 「リクエスト情報」項目をそれぞれ以下のように入力します。
エンドポイント: <ベースURL>/logic/api/im_bpm_tutorial/receive_task/test
メソッド: POST
リクエストエンコーディング: UTF-8
- リクエストパラメータ:
パラメータ名 パラメータ値 processInstanceId ${processInstanceId}
図 : 「REST定義新規作成」-「リクエスト情報」コラム
このチュートリアルの上記項目は一例です。実際は利用されるシステムに合わせて入力内容を変更してください。このエンドポントを動作をさせるためには、以下の「IM-LogicDesigner」と「IM-Authz(認可) ポリシー - XML形式」の資材を追加でインポートする必要があります。- IM-Authz(認可) ポリシー - XML形式定義情報
- それぞれの資材のアップロード方法については、以下を参照してください。
- ロジックフロー:
- インポート方法については「IM-LogicDesigner ユーザ操作ガイド」-「インポート/エクスポート」を参照してください。
- IM-Authz(認可) ポリシー - XML形式:
インポート手順は「IM-Authz(認可)インポート・エクスポート仕様書」-「ポリシー - XML形式」を参照してください。
パブリックストレージへのファイルの配置は「システム管理者操作ガイド」-「ファイル操作」を参照してください。
- ジョブネット「認可(ポリシー)インポート」の実行時に実行パラメータfile を追加し、値に上記の認可ファイルのパブリックストレージ上のパスを指定してください。または、パブリックストレージへの配置の際にファイル名をauthz-policy.xmlへリネームしてパブリックストレージのルート直下に配置し、ジョブを実行してください。
「登録」ボタンをクリックし、「REST定義」を保存します。
- 作成した「REST定義」を呼び出すロジックフローを作成します。
- 「サイトマップ」→「IM-LogicDesigner」→「フロー定義一覧」をクリックします。
- 「フロー定義一覧」画面、ツールバー内の「新規作成」をクリックし、「ロジックフロー定義編集」画面を表示します。
メニューバーの「入出力設定」をクリックし、「入力設定」を表示します。
図 : 「ロジックフロー定義編集」「入力設定」を表示し、入力でプロセスインスタンスIDを受け取るように設定します。
- 作成したユーザ定義を配置します。
- パレット内の「IM-BPMチュートリアル」の一覧から「外部システム実行REST API呼び出し」を選び、フロー編集画面上に追加します。
図 : 「ロジックフロー定義編集」
- 「外部システム実行REST API呼び出し」のマッピング設定をします。
以下のように線を繋ぎます。
入力(始点) 出力(終点) 入力<object> - processInstanceId callExternalSystem1<object> - processInstanceId
図 : 「マッピング設定」 - 「外部システム実行REST API呼び出し」
タスクを以下のようにつなぎます。
- 「ロジックフロー定義編集」画面上部、ヘッダ内の「新規保存」をクリックします。以下のように設定し、ロジックフロー定義を新規保存します。
4.3.11.1.2. プロセス定義を作成する¶
- 「プール」を設置します。
- 「プール」に3つの「レーン」を設置し、上から順にそれぞれ以下のように名前をつけます。
- 外部システム
- intra-martシステム
- 担当者
- プロセス全体に対する設定を行います。「プール」を選択し、プロセスタブから、以下のように項目を設定します。
- プロセス定義キー : receive_task_usage
- 名前 : 外部システム連携
- 処理対象ユーザ : aoyagi
- 「開始イベント」を「担当者レーン」へ設置します。
- 外部システムを呼び出す前の状態を確認するために、「担当者レーン」に「ユーザタスク」を設置します。
- 動作確認の際に「タスク一覧画面」でわかりやすくするため、ユーザタスクに名前を付けます。「ユーザタスク」を選択し、「基本情報」タブから「名前」に 外部システム実行前 と設定します。
- 「外部システム実行前」タスクに対して、担当者を設定します。「外部システム実行前」タスクを選択し「メインコンフィグ」タブから「担当者」に aoyagi と設定します。
- 外部システムを実行するために「IM-LogicDesigner」を呼び出します。「IM-LogicDesignerタスク」を選択し、「intra-martシステムレーン」へ設置します。
- 設置した「IM-LogicDesignerタスク」に名前をつけます。「基本情報」タブから、「名前」に 外部システム起動 と設定します。
- 呼び出すロジックフローの設定とロジックフローの入力値に渡すデータの設定をします。「IM-LogicDesignerタスク」 - 「プロパティ」 - 「メインコンフィグ」 で以下の項目を設定します。
- 外部システムの完了シグナルを受信するための「受信タスク」を「外部システムレーン」へ設置します。
- 設置した「受信タスク」にIDと名前をつけます。「基本情報」タブで以下のように設定をします。
ID: external-system-receive-task
名前: 外部システム実行中
- 外部システム完了後の状態を確認するために、「担当者レーン」に「ユーザタスク」を設置します。
- 動作確認の際に「タスク一覧画面」でわかりやすくするため、設置したユーザタスクに名前を付けます。「ユーザタスク」を選択し、「基本情報」タブから「名前」に 外部システム実行後 と設定します。
- 「外部システム実行後」タスクに対して、担当者を設定します。「外部システム実行後」タスクを選択し「メインコンフィグ」タブから「担当者」に aoyagi と設定します。
- 「終了イベント」を「担当者レーン」へ設置します。
以下に示すプロセス定義図を参考にエレメント同士をシーケンスフローでつなぎます。
4.3.11.1.3. 外部システムの完了時に呼び出され、IM-BPMへシグナルを送信するロジックフローを作成する¶
- ロジックフローを作成します。
- 「サイトマップ」→「IM-LogicDesigner」→「フロー定義一覧」をクリックします。
- 「フロー定義一覧」画面、ツールバー内の「新規作成」をクリックし、「ロジックフロー定義編集」画面を表示します。
メニューバーの「入出力設定」をクリックし、「入力設定」を表示し、入力でプロセスインスタンスIDを受け取るように設定します。
- 入力外部システムから渡ってきた、連携のために外部システム実行時に渡していたIM-BPMのプロセスインスタンスID
キー名 型 processInstanceId <string>
図 : 「入出力設定」メニューバーの「変数設定」をクリックし、「変数設定」を表示し、検索した結果対象となるエグゼキューションIDを保持する変数を設定します。
キー名 型 queryExecutionReslut <object> processInstanceId<object> - id <string> 図 : 「変数設定」メニューバーの「定数設定」をクリックし、「定数設定」を表示し、ロジックフローを実行する上で必要な定数を定義します。
定数ID 定数値 説明 zero 0 エグゼキューション検索で結果を取得するためのインデックス activityId external-system-receive-task シグナル送信対象の受信タスクのアクティビティID 図 : 「定数設定」- 「エグゼキューション検索」タスクを配置します。
- パレット内の「IM-BPM」の一覧から「エグゼキューション検索」を選び、フロー編集画面上に追加します。
図 : 「ロジックフロー定義編集」
- 「エグゼキューション検索」のマッピング設定をします。
以下のように線を繋ぎます。
入力(始点) 出力(終点) 入力<object> - processInstanceId im_bpmQueryExecutions1<object> - processInstanceId 定数<object> - activityId im_bpmQueryExecutions1<object> - activityId
図 : 「マッピング設定」 - 「エグゼキューション検索」
- 「変数操作」タスクを配置します。
- パレット内の「基本」の一覧から「変数操作」を選び、フロー編集画面上に追加します。
図 : 「ロジックフロー定義編集」
- 「変数操作」のマッピング設定をします。
- 「マッピング設定」画面上部、ヘッダ内の右側に位置するセレクトボックスから「get」を選択します。「関数を追加」をクリックします。
コラム
マッピング関数については、「IM-LogicDesigner仕様書」-「マッピング関数一覧」を参照してください。以下のように線を繋ぎます。
入力(始点) 出力(終点) im_bpmQueryExecutions1<object> - queryExecutionsResults<object[]> get: array 定数<object> - zero get: index get: out 定数<object> - queryExecutionReslut
図 : 「マッピング設定」 - 「変数操作」
- 「エグゼキューション検索」タスクを配置します。
- パレット内の「IM-BPM」の一覧から「シグナル送信」を選び、フロー編集画面上に追加します。
図 : 「ロジックフロー定義編集」
- 「シグナル送信」のマッピング設定をします。
以下のように線を繋ぎます。
入力(始点) 出力(終点) 変数<object> - queryExecutionReslut<object> - id im_bpmSignal1<object> - executionId
図 : 「マッピング設定」 - 「シグナル送信」
タスクを以下のようにつなぎます。
- 「ロジックフロー定義編集」画面上部、ヘッダ内の「新規保存」をクリックします。以下のように設定し、ロジックフロー定義を新規保存します。
フロー定義ID : sendSignalReceiveTask
フロー定義名 : 外部システム完了時シグナル送信フロー
- フローカテゴリ :
- ID : im_logicdesigner-data
- 名称 : BPMチュートリアル
- 作成したロジックフローに対してルーティング定義を作成し、REST APIとして外部システムから呼び出せるようにします。
- 「サイトマップ」→「IM-LogicDesigner」→「ルーティング定義一覧」
- 「ロジックフロールーティング定義一覧」画面、ツールバー内の「新規作成」をクリックし、「ルーティング定義編集」画面を表示します。
- 「対象ロジックフロー定義情報」の対象フロー項目に以下を選択します。
- フロー定義ID: sendSignalReceiveTask
- フロー定義名: 外部システム完了時シグナル送信フロー
図 : 「ルーティング定義編集」-「対象ロジックフロー定義情報」
- 「ロジックフロールーティング定義情報」の各項目に以下を入力します。
- ルーティング: imbpm/tutorial/send-signal/receive-task
- メソッド: POST
- 認可URI: imbpm/tutorial/send-signal/receive-task
図 : 「ルーティング定義編集」-「ロジックフロールーティング定義情報」
「登録」ボタンをクリックし、ルーティング定義を保存します。
「ロジックフロールーティング定義一覧」にて今回作成した「外部システム完了時シグナル送信フロー」の「」をクリックし「認可設定」画面を表示します。
「ゲストユーザ」、「認証済みユーザ」に対して許可します。
- これにより、外部システムから <ベースURL>/logic/api/imbpm/tutorial/send-signal/receive-task に対して、対象のプロセスインスタンスIDをパラメータ processInstanceId に詰めて送信することで、該当の受信タスクが完了するようになりました。外部システムの完了時の動作にこのREST APIへリクエストを送信するように設定してください。
コラム
- 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. 作成したプロセスの動作確認をする¶
- プロセスを開始します。「サイトマップ」→「BPM」→「プロセス開始一覧」画面を表示します。
「プロセス開始一覧」画面から、対象となるプロセスの「」をクリックします。
- 開始直後のプロセスの状態は図のようになっており、まだ外部システムは実行されていません。
- 「外部システム実行前」タスクを処理します。
- 「プロセス開始一覧」画面のツールバーにある「タスク一覧」をクリックし、「タスク一覧」画面を表示します。
- 「外部システム実行前」タスクの「」をクリックし、タスクを処理します。
- 「外部システム実行前」タスクを処理することで、「外部システム起動」タスクへ到達します。紐付けられた、ロジックフローによって外部システムが起動し、次の「外部システム実行中」へ到達します。外部システムからのシグナルを受信するまではこのタスクに実行中マークが付与されます。
- 外部システムの完了を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'
外部システムが完了しシグナルが送信されると、「外部システム実行中」タスクが完了し、「外部システム実行後」タスクに到達します。