CookBook

IM-LogicDesignerを利用してIM-Workflowの到達処理で既処理者自動承認する方法

投稿日:2023-04-03 更新日:

このCookBookでは、IM-LogicDesignerを利用して、 IM-Workflowの到達処理で既処理ユーザが自動承認する方法について紹介します。

完成イメージ

  1. サンプルのフローを申請します。
  2. ロジックフローを到達処理に設定したノードの手前のノードまで、処理対象者ユーザで承認します。
  3. ロジックフローが実行されます。
    既処理ノードの処理者が、実行対象ノードの処理対象者である場合に自動で承認します。

完成サンプル

以下の完成サンプルをダウンロードしてご活用ください。
なお、以下のサンプルはintra-mart Accel Platform 2023 Springの環境を利用して作成したものです。

IM-LogicDesignerのIM-BIS「承認」タスクは、2023 Springから到達処理で利用できるようになったため、2022 Winter以前のバージョンでは動作しません。

種類定義名補足説明
ユーザ定義(JavaScript)GetProcessHistoryLatestList処理中の未完了案件の処理履歴最新情報を取得するユーザ定義
ユーザ定義(JavaScript)Get Auth User Orgz承認者の未完了案件に対する処理権限者の所属組織情報を取得するユーザ定義
ロジックフローAuto approve上記のユーザ定義を参照し、既処理者自動承認を実行するロジックフロー

完成サンプルをご利用の際は、テナント環境セットアップでサンプルデータのインポートを行い、利用するユーザのロールに「BIS担当者」を設定してください。

レシピ

  1. ユーザ定義を作成する。
  2. 既処理者自動承認ロジックフローを作成する。
  3. BISワークフローを作成する。
  4. ユーザプログラムの到達処理を設定する。
  5. ノード到達処理を設定する。

1. ユーザ定義を作成する。

以下のユーザ定義を作成してください。

2. 既処理者自動承認ロジックフローを作成する。

2-1. 入出力設定

入出力設定の入力には、以下を設定してください。

入力項目
localeIdstring
systemMatterIdstring
nodeIdstring
preNodeResultStatusstring

入出力設定の出力には、以下を設定してください。

出力項目
mailSendFlagboolean

入出力設定の詳細は以下のドキュメントを参照してください。

[IM-Workflow 管理者操作ガイド] - [到達処理]

2-2. 定数の設定

定数ID定数値
FALSEfalse
INDEX0
LOCK_KEY_PREFIXArrivedAutoApprove_
TRUEtrue

2-3. 変数の設定

既処理者リストと既処理ノードリストを変数に定義してください。

変数項目
approveUserCdsstring[]
approveNodesstring[]

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 (承認)

承認タスクを到達処理で実行する際は、 asyncProcessingFlagtrue を設定します。
承認タスクの詳細は、以下のドキュメントを参照ください。
 [IM-LogicDesigner仕様書] - [承認]

所属組織リストの1つ目の情報を権限者所属組織情報に設定します。

以下のようにマッピング設定してください。

  • Lock Release (ロック解放)

解放対象である「Lock Acquisition」タスクのロックキーを「Lock Release」タスクの入力値に設定します。

以下のようにマッピング設定してください。

3. BISワークフローを作成する。

今回は、以下のようなBISワークフローを作成します。

申請と承認画面に画面アイテム「ボタン(登録)」を配置してください。

※BISワークフローの詳細は、サンプルデータをご参照ください。

4. ユーザプログラムの到達処理を設定する。

サイトマップから、ワークフローのロジックフロー管理で、「1. ロジックフローを作成する。」で作成したロジックフローのリソース設定画面を開きます。

プルダウンで「ユーザプログラム」を選択し、「到達処理」を追加してください。

次に、サイトマップ、ワークフローのコンテンツ定義から、作成したワークフローのユーザプログラムタブを開きます。

新規作成で、以下のように設定してください。

項目内容
プログラム名AutoApprove ※今回のみ
プラグイン種別到達処理
対象ノード承認ノード
プラグイン種類【到達処理】LogicDesigner
プラグイン種類 - フロー選択「2. 既処理者自動承認ロジックフローを作成する。」で作成したロジックフローを選択
実行順番1 ※今回のみ

5. ノード到達処理を設定する。

サイトマップ、ワークフローのフロー定義から、作成したワークフローのルート詳細タブを開きます。

到達処理を設定したいノードの編集ボタンを選択し、ノード設定ダイアログを開きます。

今回は、「Approve3」ノードに到達処理を設定します。

ノード到達処理で「標準から変更する」を選択し、 「4. ユーザプログラムの到達処理を設定する。 」で設定したユーザプログラムを選択してください。

以上で、到達処理で既処理者自動承認ロジックフローを実行することができます。

ぜひ、目的に合わせてロジックフローの内容を変更してみてください。

-CookBook
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

バージョンアップを認めずパッチのみを許可する module.xml の依存関係の指定方法の書き方

この CookBook では、module.xml の依存関係の書き方について紹介しています。 記事のタイトルにあるように、モジュールを特定のバージョンのパッチまでに依存する方法についてご紹介します。 …

no image

IMBox に投稿種別を追加する方法(iframe)

この CookBook では、IMBox に投稿種別を追加する方法について紹介しています。 以下のドキュメントを参照することで、IMBox に投稿種別を追加することができます。 IMBox プログラミ …

no image

IM-FormaDesignerで複数のセレクトボックスを連動させて利用する方法

このCookbookでは、セレクトボックスの選択結果によって、他のセレクトボックスの選択肢を絞り込む方法を説明します。 この方法は、IM-FormaDesignerのみ導入環境での方法です。 IM-B …

no image

外部連携の後処理で任意のエラーメッセージを表示する

このCookbookでは、外部連携の後処理で任意のエラーメッセージを表示する方法を紹介します。 この方法を活用することにより、外部連携の後処理ででエラーが発生した場合、利用者に内容を通知することができ …

IM-BloomMaker カスタムスクリプトの使い方と$variableからの取得・代入の方法

このCookBookでは、IM-BloomMakerのアクションの一つであるカスタムスクリプトの使い方と$variable(変数)からの取得および代入の方法について紹介しています。 実際にサンプル画面 …