申請者と承認者が同じユーザーであるときに承認させない¶
ある承認ステップが OR 承認グループで申請者自身が含まれているとき、申請者が承認者として承認することで次の承認ステップへ進みます。
申請者自身での承認を禁止するときは、申請者の情報と承認者の情報を比較して同一ユーザーであるか確認が必要です。
本項では、申請者と承認者の情報を比較する方法、画面上で承認できない表示とする方法を説明します。
注意
本設定は、V5.2.0以降のフォームで利用可能です。
V5.2.0より前のバージョンで作られたフォーム、Liteフォームおよび旧バージョン形式のフォーム(JSP/PDF)では利用できません。
ヒント
以降の説明では、申請・承認フォームを表示しているユーザーの情報を参照するため JavaScript の API を利用します。
それぞれのAPIは、以下の名前空間で公開しています。JavaScript API リファレンス もあわせて参照ください。
- フォームを表示しているユーザーの情報を参照
- iftc.cwf.api.Forms
- iftc.cwf.api.WorkFlowNode
想定する運用と必要な設定¶
想定する運用
必要な設定
この運用を実現するために必要となる設定や方法は以下です。
承認者情報の参照と申請者情報との比較¶
承認者は「現在操作中のユーザー」となるため 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つのフォームは「申請フォーム」と「承認フォーム」で構成されます。
- 申請フォーム
- 申請者のみが使用します。
- 承認フォーム
- 承認者・決裁者・閲覧者が共通して使用します。
第1承認者での操作
第1承認者のユーザーで該当の申請案件を表示すると 「送信ボタンの非表示化」 の設定が実行されますが、 申請者と同一のユーザーではないため送信ボタン([承認する]ボタン)が表示されます。
第2承認者での操作
第2承認者は OR 承認グループで申請者と同一のユーザーが登場します。
それぞれで表示を確認します。申請者と同一のユーザーが承認者として操作するとき
申請者と同一のユーザーで送信ボタン([承認する]ボタン)の非表示とメッセージの表示を確認します。
該当の申請案件を表示すると 「送信ボタンの非表示化」 で設定した メッセージが表示され送信ボタン([承認する]ボタン)が非表示となります。
申請者と異なるユーザーが承認者として操作するとき
申請者と異なるユーザーでは、送信ボタン([承認する]ボタン)が表示され、メッセージが表示されないことを確認します。
申請者と同じ第2 OR 承認グループに所属のユーザーで該当の申請案件を表示します。 承認フォームには 「送信ボタンの非表示化」 を設定していますが、申請者とは異なるユーザーであるため送信ボタン([承認する]ボタン)が 表示されメッセージは表示されません。
第3承認者以降での操作
第3承認者と決裁者で該当の申請案件を表示すると 「送信ボタンの非表示化」 の設定が実行されますが、申請者と異なるユーザーであるため送信ボタン([承認する]ボタン)が表示され、メッセージは表示されません。
ヒント
以下に該当するときは OR 承認グループの承認がスキップされます。OR 承認グループでの承認が必要なときは、図の[同一ユーザーが連続時に承認をスキップする]の設定を無効としてください。