【intra-mart】ワークフローの参照者を動的に追加する方法

#はじめに
　今回は「ワークフローの参照者を動的に追加する」機能を、intra-mart Accel Platformのlogicdesignerを使用して実装してみたいと思います。

　実装にあたり以下のCookBookを参考にしています。本記事を見ながら実装する場合は、以下のCookBookに完成サンプルがありますので、完成サンプルをインポートしてから実装してください。

https://dev.intra-mart.jp/cookbook142676/

#完成イメージ
　大まかなイメージはCookBookと同じく、申請者の担当組織に基づいて、ロジックフローで参照者を設定する機能です。異なる点として、任意のフロー定義の参照者に「ロジックフロー（ユーザ）」を利用することにより、<b>申請者と同じ組織のユーザ全員を参照者に設定</b>できます。これが今回実装したいことのイメージです。

【前提条件】
・intra-mart e Builder for Accel Platform をインストール済みであること。
・intra-mart Accel Platform をインストールし、初期設定までが完了していること。
・開発環境のresinサーバーが作成されていること。
・CookBookの完成サンプルをintra-martにインポートしていること。

#手順の説明
[1.ロジックフローを作成し、利用可能にする](#ロジックフローを作成し、利用可能にする)
[2.ワークフローの参照者に「ロジックフロー」を追加する](#ワークフローの参照者に「ロジックフロー」を追加する)
[3.実行画面で確認する](#実行画面で確認する)
###ロジックフローを作成し、利用可能にする
1.　入出力設定

・入力設定ではIM-Workflowが提供しているパラメータを利用するために、「imwApplyAuthInfo（申請者情報）」を設定します。出力設定では、「userCds<string[]>を」設定します。理由は、入力設定の申請者情報から組織情報を取得し、最終的に参照者に同じ組織のユーザを設定するため「userCds<string>」を出力する必要があるためです。

・設定後の入出力設定は以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/3e5bea29-d52a-3f86-8574-a4ad82278846.png)

※参考

https://document.intra-mart.jp/library/iap/public/im_workflow/im_workflow_administrator_guide/texts/basic_guide/logic_flow/authority_plugin.html

2.　タスクの配置と接続

以下のとおりに、タスクを配置し、それぞれのタスク同士を接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/0b639dda-73a8-e872-280b-be47a303454f.png)

・組織に所属するユーザの取得
　　共通マスタから申請者と同じ所属するユーザの情報を取得しています。

・【Cookbook】ロジックフローで案件操作権限者を設定する（ワークフローパラメータの作成）
　　共通マスタ取得したユーザの情報をワークフローに受け渡し可能な形式に変換しています。

3.　マッピング設定
各タスクのマッピングを以下のとおりに実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/44216286-3e92-20bd-ee39-a21421541efd.png)

(1) 組織に所属するユーザの取得
　入力の imwApplyAuthInfoのそれぞれの項目を、同じ名称の項目にマッピングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/8fcf2ba7-9c9b-b172-ea82-da9215f47f3d.png)

(2)【Cookbook】ロジックフローで案件操作権限者を設定する（ワークフローパラメータの作成）
　「(1)組織に所属するユーザの取得」の出力項目をマッピングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/d8ff48fb-0a5d-0d27-e611-490b24bb2f9c.png)


(3) 終了
　ロジックフローの出力値をワークフローの参照者や処理対象者に利用する場合、以下のように、String型の配列としてユーザコードを渡す必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/1b04ad9f-6350-377e-db03-1e9438d00e32.png)

4.　ワークフローで利用可能なロジックフローに登録する
　作成したロジックフローをワークフローで利用可能にするための設定を行います。
ワークフロー>「ロジックフロー管理」>リソース設定>「案件操作権限者（参照者）」と作成したロジックフローを関連づけてください。設定方法の詳細は以下の画像とドキュメントをご覧ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/4dc59eb4-bfdf-53ab-49f2-663aefce65d7.png)

https://document.intra-mart.jp/library/iap/public/im_workflow/im_workflow_administrator_guide/texts/basic_guide/basic_guide_17.html


###ワークフローの参照者に「ロジックフロー」を追加する
　ワークフローのフロー定義の参照者に作成したロジックフローを追加します。今回は例として、サンプルの「直線ルート[JavaEE開発モデル]」のフロー定義の参照者に作成したロジックフローを追加しました。
設定方法の詳細は以下の画像とドキュメントをご覧ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/ae4447bb-f03e-a5b6-71e3-c5905ea38987.png)

https://document.intra-mart.jp/library/iap/public/im_workflow/im_workflow_administrator_guide/texts/basic_guide/basic_guide_3.html#reference-config



###実行画面で確認する
　作ったロジックフローに入出力値をマッピングできているか確認します。logicdesignerにはデバック機能がついているので、今回は試しに[userCd]に'aoyagi'を入力して実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/4e1f86e7-7548-d029-017c-8d3150f8d297.png)
入力値を入れて実行してみると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/359a6894-0cc3-cee7-0c3d-0488cfc89a37.png)
同じ組織のユーザが返ってきました。
正しくワークフローの参照者に作成したロジックフローを追加できていれば、今回の機能は実装できているはずです。




#まとめ
　以上、今回は「ワークフローの参照者を動的に追加する方法」をまとめました。私自身は、実装してみた感想として、実装したい機能はどんな機能で、そのために何を入力して何を出力するか、そのデータをintra-mart上でどのように定義されているかをしっかり理解することで、logicdesignerはかなり便利な機能になるなと思いました。お読みいただいてありがとうございます。