このCookBookでは、IM-LogicDesignerを利用して、 IM-Workflowの到達処理で既処理ユーザが自動承認する方法について紹介します。
完成イメージ
- サンプルのフローを申請します。
- ロジックフローを到達処理に設定したノードの手前のノードまで、処理対象者ユーザで承認します。
- ロジックフローが実行されます。
既処理ノードの処理者が、実行対象ノードの処理対象者である場合に自動で承認します。
完成サンプル
以下の完成サンプルをダウンロードしてご活用ください。
なお、以下のサンプルはintra-mart Accel Platform 2023 Springの環境を利用して作成したものです。
IM-LogicDesignerのIM-BIS「承認」タスクは、2023 Springから到達処理で利用できるようになったため、2022 Winter以前のバージョンでは動作しません。
- BIS一括インポート : im_cookbook_212823_lump_bis
- BISの一括インポート機能からインポートしてください。サンプルのフローが登録されます。
- 手順の詳細は以下のドキュメントをご覧ください。
[IM-BIS システム管理者 操作ガイド] - [一括インポート・エクスポートを行う]
- ロジックフロー定義 / ユーザ定義(JavaScript定義):im_cookbook_212823_logicdesigner-data
- LogicDesignerのインポート機能からインポートしてください。サンプルのユーザ定義(JavaScript)、ロジックフローが登録されます。
- 手順の詳細は以下のドキュメントをご覧ください。
[IM-LogicDesigner ユーザ操作ガイド] - [インポートを行う] - サンプルに含まれる定義情報は以下の表のとおりです。
種類 | 定義名 | 補足説明 |
ユーザ定義(JavaScript) | GetProcessHistoryLatestList | 処理中の未完了案件の処理履歴最新情報を取得するユーザ定義 |
ユーザ定義(JavaScript) | Get Auth User Orgz | 承認者の未完了案件に対する処理権限者の所属組織情報を取得するユーザ定義 |
ロジックフロー | Auto approve | 上記のユーザ定義を参照し、既処理者自動承認を実行するロジックフロー |
完成サンプルをご利用の際は、テナント環境セットアップでサンプルデータのインポートを行い、利用するユーザのロールに「BIS担当者」を設定してください。
レシピ
- ユーザ定義を作成する。
- 既処理者自動承認ロジックフローを作成する。
- BISワークフローを作成する。
- ユーザプログラムの到達処理を設定する。
- ノード到達処理を設定する。
1. ユーザ定義を作成する。
以下のユーザ定義を作成してください。
- GetProcessHistoryLatestList
ActvMatter.getProcessHistoryLatestList を利用して、 処理中の未完了案件の処理履歴の最新情報を取得します。
- Get Auth User Orgz
ProcessManager.getAuthUserOrgz を利用して、未完了案件に対する処理権限者の所属組織情報を取得します。
2. 既処理者自動承認ロジックフローを作成する。
2-1. 入出力設定
入出力設定の入力には、以下を設定してください。
入力項目 | 型 |
localeId | string |
systemMatterId | string |
nodeId | string |
preNodeResultStatus | string |
入出力設定の出力には、以下を設定してください。
出力項目 | 型 |
mailSendFlag | boolean |
入出力設定の詳細は以下のドキュメントを参照してください。
[IM-Workflow 管理者操作ガイド] - [到達処理]
2-2. 定数の設定
定数ID | 定数値 |
FALSE | false |
INDEX | 0 |
LOCK_KEY_PREFIX | ArrivedAutoApprove_ |
TRUE | true |
2-3. 変数の設定
既処理者リストと既処理ノードリストを変数に定義してください。
変数項目 | 型 |
approveUserCds | string[] |
approveNodes | string[] |
2-4. タスクの配置と接続
以下のロジックフローを作成します。
ロジックフローの処理の流れと配置するタスクは以下の通りです。
(1) 前ノード処理結果が申請、再申請、承認以外であれば終了
- Branch(PreNodeResultStatus)(分岐)
(2) 処理履歴を取得
- GetProcessHistoryLatestList (ユーザ定義)
(3) 処理履歴から既処理ノードリストと既処理者リストを作成
- Loop Start 1 (繰り返し開始)
- Branch(NodeType)(分岐)
- Branch(Status)(分岐)
- Branch (NodeId)(分岐)
- Variable Operation (変数操作)
- Loop End1 (繰り返し終了)
(4) ノードの処理対象者を取得
- Get Process Target Users (処理対象者取得)
(5) 既処理者が処理対象者であれば、(6)へ
- Loop Start 2 (繰り返し開始)
- Loop Start 3(繰り返し開始)
- Branch(ProcessTargetUser) (分岐)
- Loop End 3(繰り返し終了)
- Loop End 2(繰り返し終了)
(6) 処理者の所属組織を取得して承認
- Get Auth User Orgz (ユーザ定義)
- Lock Acquisition (ロック取得)
- Approve (承認)
- Lock Release (ロック解放)
2-5. プロパティ設定
(1) 前ノード処理結果が申請、再申請、承認以外であれば終了
- Branch(PreNodeResultStatus)(分岐)
分岐条件に以下のEL式を記述してください。
入力値の前ノード処理結果 が「申請」、「再申請」、「承認」以外の場合は自動承認しないようにします 。${ $input.preNodeResultStatus == "apply" || $input.preNodeResultStatus == "approve" || $input.preNodeResultStatus == "reapply" }
(2) 処理履歴を取得
「1. ユーザ定義を作成する。 」で作成した以下のユーザ定義を利用して処理履歴を取得します。
- GetProcessHistoryLatestList (ユーザ定義)
以下のようにマッピング設定してください。
(3) 処理履歴から既処理ノードリストと既処理者リストを作成
- Loop Start 1 (繰り返し開始)
繰り返し対象に処理履歴を設定してください。im_cookbook_212823_user_latestlist1/processHistoryList
- Branch(NodeType)(分岐)
分岐条件に以下のEL式を記述してください 。
処理履歴のノード種別がnull以外の場合かつ、「申請ノード」、「承認ノード」、「動的承認ノード」の場合、次の分岐に処理を進めます。${ im_startLoop1.item.nodeType != null && ( im_startLoop1.item.nodeType == "3" || im_startLoop1.item.nodeType == "2" || im_startLoop1.item.nodeType == "4" ) }
ノード種別のコード値については以下のドキュメントを参照してください。
IM-Workflow CodeList - ノード種別
- Branch(Status)(分岐)
分岐条件に以下のEL式を記述してください 。
処理履歴のステータスが「申請」、「申請(復元)」、「承認」、「承認(復元)」、「再申請」、「再申請(復元)」 である場合、次の分岐に処理を進めます。${ im_startLoop1.item.status == "apply" || im_startLoop1.item.status == "applyrestore" || im_startLoop1.item.status == "approve" || im_startLoop1.item.status == "approverestore" || im_startLoop1.item.status == "reapply" || im_startLoop1.item.status == "reapplyrestore" }
ステータスのコード値については以下のドキュメントを参照してください。
IM-Workflow CodeList - タスクステータス
また、申請者を既処理者自動承認の対象から除く場合は、ステータスが「申請」、「申請(復元)」、「再申請」、「再申請(復元)」であることを条件から除いてください。
- Branch (NodeId)(分岐)
分岐条件に以下のEL式を記述してください。
処理履歴のノードIDが既処理ノードリストに含まれない場合、次の「Variable Operation」タスクに処理を進めます。${ ! contains( $variable.approveNodes, im_startLoop1.item.nodeId ) }
- Variable Operation (変数操作)
「Branch(NodeType)」、「Branch(Status)」、「Branch (NodeId)」全てのタスクでtrueの場合、処理履歴のノードIDと処理権限者コードをそれぞれ既処理ノードリストと既処理者リストに追加します。
以下のようにマッピング設定してください。
(4) ノードの処理対象者を取得
- Get Process Target Users (処理対象者取得)
以下のようにマッピング設定してください。
(5) 既処理者が処理対象者であれば、(6)へ
- Loop Start 2 (繰り返し開始)
繰り返し対象に既処理者リストを設定してください。
$variable/approveUserCds
- Loop Start 3(繰り返し開始)
繰り返し対象に「 (4) ノードの処理対象者を取得 」で取得した処理対象者リストを設定してください。
im_bisGetProcessTargetUser1/userCds
- Branch(ProcessTargetUser) (分岐)
分岐条件に以下のEL式を記述してください。
処理対象者リストが空でないかつ、既処理者が処理対象者と一致する場合、繰り返しを抜けて承認するようにします。${ ! isEmpty( im_startLoop3.item ) && im_startLoop3.item == im_startLoop2.item }
(6) 処理者の所属組織を取得して承認
- Get Auth User Orgz (ユーザ定義)
以下のようにマッピング設定してください。
- Lock Acquisition (ロック取得)
【注意】
同期ノードや縦配置ノード内の到達処理で案件を処理するIM-BISタスクを利用する場合、複数ノードでロジックフローが同時実行されるため、ロック取得してください。対象ノードが複数同時実行されない場合、ロック取得は不要です。
今回は、定数の LOCK_KEY_PREFIX
と入力値の systemMatterId
を連結して入力値のロックキーに設定します。
以下のようにマッピング設定してください。
- Approve (承認)
承認タスクを到達処理で実行する際は、 asyncProcessingFlag
に true
を設定します。
承認タスクの詳細は、以下のドキュメントを参照ください。
[IM-LogicDesigner仕様書] - [承認]
所属組織リストの1つ目の情報を権限者所属組織情報に設定します。
以下のようにマッピング設定してください。
- Lock Release (ロック解放)
解放対象である「Lock Acquisition」タスクのロックキーを「Lock Release」タスクの入力値に設定します。
以下のようにマッピング設定してください。
3. BISワークフローを作成する。
今回は、以下のようなBISワークフローを作成します。
申請と承認画面に画面アイテム「ボタン(登録)」を配置してください。
※BISワークフローの詳細は、サンプルデータをご参照ください。
4. ユーザプログラムの到達処理を設定する。
サイトマップから、ワークフローのロジックフロー管理で、「1. ロジックフローを作成する。」で作成したロジックフローのリソース設定画面を開きます。
プルダウンで「ユーザプログラム」を選択し、「到達処理」を追加してください。
次に、サイトマップ、ワークフローのコンテンツ定義から、作成したワークフローのユーザプログラムタブを開きます。
新規作成で、以下のように設定してください。
項目 | 内容 |
プログラム名 | AutoApprove ※今回のみ |
プラグイン種別 | 到達処理 |
対象ノード | 承認ノード |
プラグイン種類 | 【到達処理】LogicDesigner |
プラグイン種類 - フロー選択 | 「2. 既処理者自動承認ロジックフローを作成する。」で作成したロジックフローを選択 |
実行順番 | 1 ※今回のみ |
5. ノード到達処理を設定する。
サイトマップ、ワークフローのフロー定義から、作成したワークフローのルート詳細タブを開きます。
到達処理を設定したいノードの編集ボタンを選択し、ノード設定ダイアログを開きます。
今回は、「Approve3」ノードに到達処理を設定します。
ノード到達処理で「標準から変更する」を選択し、 「4. ユーザプログラムの到達処理を設定する。 」で設定したユーザプログラムを選択してください。
以上で、到達処理で既処理者自動承認ロジックフローを実行することができます。
ぜひ、目的に合わせてロジックフローの内容を変更してみてください。