申請者と承認者が同じユーザーであるときに承認させない

✔ 概要

ある承認ステップが OR 承認グループで申請者自身が含まれているとき、申請者が承認者として承認することで次の承認ステップへ進みます。
申請者自身での承認を禁止するときは、申請者の情報と承認者の情報を比較して同一ユーザーであるか確認が必要です。

本項では、申請者と承認者の情報を比較する方法、画面上で承認できない表示とする方法を説明します。

注意

本設定は、V5.2.0以降のフォームで利用可能です。
V5.2.0より前のバージョンで作られたフォーム、Liteフォームおよび旧バージョン形式のフォーム(JSP/PDF)では利用できません。

ヒント

以降の説明では、申請・承認フォームを表示しているユーザーの情報を参照するため JavaScript の API を利用します。
それぞれのAPIは、以下の名前空間で公開しています。JavaScript API リファレンス もあわせて参照ください。

  • フォームを表示しているユーザーの情報を参照
    • iftc.cwf.api.Forms
    • iftc.cwf.api.WorkFlowNode


想定する運用と必要な設定

想定する運用

組織階層や承認ルートの作成状況によっては「申請者」が後続の承認ステップへ登場することがあります。
このようなときに、申請者と同一のユーザーでは承認ができない状態として、別のユーザーで承認します。

例えば下図の「第2 OR 承認グループ」では「鶴瀬 瑞穂」と「中村 俊」が登場しますが、 「鶴瀬 瑞穂」は申請者として登場したため承認ができず、「中村 俊」が承認します。

必要な設定

この運用を実現するために必要となる設定や方法は以下です。

申請者の情報を参照する

申請者の情報は「情報表示フィールド」を配置して参照します。
フォームへ配置する情報表示フィールドのプロパティでは、表示する内容として[申請者]の[ID]を指定します。

ヒント

  • 情報表示フィールドは「申請フォーム」と「承認フォーム」へ配置します。

  • 配置する情報表示フィールドは以下の設定とします。[情報の表示]タブでは申請者と承認者の「ID」を比較するときの「申請者の情報」を指定します。 また、[表示]タブではオブジェクトの表示を「非表示」と設定します。

    [情報の種類]タブの設定 [表示]タブでの非表示設定
    項目 設定値
    表示 非表示
    出力時

    [設定]ボタンをクリックし、[出力時表示設定]ダイアログにて以下を選択します。

    出力時表示設定 [表示]設定の値を使用する

承認者情報の参照と申請者情報との比較

承認者は「現在操作中のユーザー」となるため JavaScript API で参照できます。
「スクリプトでフォームを表示したユーザーの情報を確認する」「操作中のユーザー情報を参照する」 に記載の内容で承認者情報となるユーザーの「ID」を参照します。

注釈

ユーザーの「ID」は他のユーザーと重複せずに一意の登録となるため、申請者と承認者を比較する要素として使用できます。

以下の JavaScript では、操作中のユーザーのIDを取得して申請者のIDを表示する情報表示フィールドの値(ID)と比較します。

//APIをインスタンス化
const forms = new iftc.cwf.api.Forms();

//操作中ユーザーのIDを取得
const userId = forms.getCurrentWorkFlowNode().userId;

//情報表示フィールドより申請者のIDを取得
const applyerId = document.getElementsByName('APL_EMP_ID-A')[0].value;

//操作中ユーザーのIDと申請者のIDを比較する
if( userId === applyerId ){
   //承認者のIDと申請者のIDが一致する
}

送信ボタンの非表示化

承認できない状態は、送信ボタン([承認する]ボタン)を非表示とすることで実現します。
また、操作者へメッセージを表示して送信ボタン([承認する]ボタン)がクリックできない理由を説明します。

◇メッセージ

◇送信ボタン([承認する]ボタン)の非表示

・通常の承認者での表示

・申請者と同一のユーザーでの表示([承認する]ボタンの非表示)

以下は 「承認者情報の参照と申請者情報との比較」 の JavaScript に対して、「送信ボタン([承認する]ボタン)の非表示化」と「承認者へメッセージの表示」を行う処理を追加した状態です。

ヒント

  • 本 JavaScript は「承認フォーム」のみに登録します。
  • 本 JavaScript は Formエディターのメニューバー [オプション - アクション - ページ表示時のJavaScript登録] から起動するダイアログへ設定します。

注意

承認ルート上で承認者以降に申請者と同一のユーザーが登場した場合、そのユーザーでは承認などの操作ができなくなります。

//APIをインスタンス化
const forms = new iftc.cwf.api.Forms();

//操作中ユーザーのIDを取得
const userId = forms.getCurrentWorkFlowNode().userId;

//情報表示フィールドより申請者のIDを取得
const applyerId = document.getElementsByName('APL_EMP_ID-A')[0].value;

//操作中ユーザーのIDと申請者のIDを比較する
if( userId == applyerId ){
   //承認者のIDと申請者のIDが一致する
   //送信ボタン([承認する]ボタン)の非表示
   document.getElementsByName('SUBMIT')[0].style.display="none";

   //メッセージの表示
   alert('申請者と同一であるため承認できません。');
}

ヒント

  • 操作中のユーザーが「代理承認者」や「代行承認者」のときでも、「forms.getCurrentWorkFlowNode().userId」の値は代理/代行の承認を依頼したユーザーの「ID」となります。

  • 申請者の「代理承認者」や「代行承認者」として「操作中のユーザー」が指定されていると、情報表示フィールドと「forms.getCurrentWorkFlowNode().userId」の値が同一となり、承認できない状態となります。

  • 運用として「代理承認」や「代行承認」で承認するときは、 「iftc.cwf.api.Forms」クラスのメソッド「isOperatedByProxyUser」 を使用して代理/代行での操作であるか確認し、代理/代行での操作であるときは以下の処理を実行しないように制御します。

    • 送信ボタン([承認する]ボタン)の非表示
    • メッセージの表示

動作確認

以下の承認ルートでは「第2承認者」に申請者と同一のユーザーが登場します。

各承認ステップのユーザーで下表の通りの動作であるか確認します。
第2承認者では、申請者と同一のユーザーで操作して 「送信ボタンの非表示化」 の設定が反映されるか確認します。

承認ステップ 確認内容
申請者
  • フォーム表示時に何もメッセージが表示されない
  • [申請する]ボタンが表示されている
第1承認者
  • フォーム表示時に何もメッセージが表示されない
  • [承認する]ボタンが表示されている
第2承認者

申請者と同一のユーザーである場合

  • フォーム表示時にメッセージが表示される
  • [承認する]ボタンが表示されない

申請者と異なるユーザーである場合

  • フォーム表示時に何もメッセージが表示されない
  • [承認する]ボタンが表示されている
第3承認者以降
  • フォーム表示時に何もメッセージが表示されない
  • [承認する]ボタンが表示されている


申請者での操作

申請フォームには 「送信ボタンの非表示化」 を設定していないため通常通り申請が確定できます。

ヒント

1つのフォームは「申請フォーム」と「承認フォーム」で構成されます。

  • 申請フォーム
    • 申請者のみが使用します。
  • 承認フォーム
    • 承認者・決裁者・閲覧者が共通して使用します。

第1承認者での操作

第1承認者のユーザーで該当の申請案件を表示すると 「送信ボタンの非表示化」 の設定が実行されますが、 申請者と同一のユーザーではないため送信ボタン([承認する]ボタン)が表示されます。

第2承認者での操作

第2承認者は OR 承認グループで申請者と同一のユーザーが登場します。
それぞれで表示を確認します。

申請者と同一のユーザーが承認者として操作するとき

申請者と同一のユーザーで送信ボタン([承認する]ボタン)の非表示とメッセージの表示を確認します。

該当の申請案件を表示すると 「送信ボタンの非表示化」 で設定した メッセージが表示され送信ボタン([承認する]ボタン)が非表示となります。

◇メッセージ

◇送信ボタン([承認する]ボタン)の非表示

申請者と異なるユーザーが承認者として操作するとき

申請者と異なるユーザーでは、送信ボタン([承認する]ボタン)が表示され、メッセージが表示されないことを確認します。

申請者と同じ第2 OR 承認グループに所属のユーザーで該当の申請案件を表示します。 承認フォームには 「送信ボタンの非表示化」 を設定していますが、申請者とは異なるユーザーであるため送信ボタン([承認する]ボタン)が 表示されメッセージは表示されません。

第3承認者以降での操作

第3承認者と決裁者で該当の申請案件を表示すると 「送信ボタンの非表示化」 の設定が実行されますが、申請者と異なるユーザーであるため送信ボタン([承認する]ボタン)が表示され、メッセージは表示されません。

ヒント

以下に該当するときは OR 承認グループの承認がスキップされます。OR 承認グループでの承認が必要なときは、図の[同一ユーザーが連続時に承認をスキップする]の設定を無効としてください。

  • 申請者の直後が OR 承認グループである
  • OR 承認グループに申請者自身が含まれている
  • [同一ユーザーが連続時に承認をスキップする]の設定が有効である