「代理権限と処理権限の両方を持つユーザ」が標準処理画面を開いた場合の挙動と対応方法

はじめに

今回は、「代理権限と処理権限の両方を持つユーザ」が標準処理画面を開いた場合の挙動と、その対応方法についてご紹介します。

代理権限とは

intra-martには、処理権限を持つユーザが別のユーザに処理を依頼できる、代理という機能があります。

代理を依頼された利用者は、依頼元と同様に申請や承認を行えます。

代理設定については下記ドキュメントをご参照ください。

document.intra-mart.jp

代理権限の弱点と対応方法

事象

代理機能は「代理権限と処理権限の両方を持つユーザ」のことが考慮されていません。
例えば「代理先のユーザ」と「代理元のユーザ」が同部署(A部)に所属していて、ある申請フローでA部の所属ユーザ全員が処理対象者に設定されたような場合、 「代理先のユーザ」は代理権限と処理権限の両方を持つことになります。
その場合、「代理先のユーザ」が標準処理画面を開く際に代理権限が優先され、処理者が「代理元のユーザ」で設定されるという事象が発生してしまいます。
処理者のプルダウンから選択しなおすこともできますが、毎回処理者を確認して修正する必要があるのは使い勝手が良いとは言えません。

処理対象者に「代理先のユーザ」と「代理元のユーザ」を設定

「代理権限と処理権限の両方を持つユーザ」で標準処理画面を開くと処理者が代理元ユーザに設定される

処理者をデフォルトで代理先ユーザとしたい場合は、以下の方法で解決できます。

対応方法

  1. 下準備
    IM-BISのアクション設定の初期表示イベントで、以下のルールで権限者コードを取得し画面アイテム「文字列」に設定する。(今回は"applyAuthUserCode" と命名
    ・代理権限あり/処理権限ありの場合…ログインユーザのコードを取得
    ・代理権限あり/処理権限なしの場合…代理元ユーザのコードを取得
    ・代理権限なし/処理権限ありの場合…ログインユーザのコードを取得

  2. 以下のコードをIM-BISのアクション設定の初期表示イベントに設定する

const applyAuthUserCode = formaItems.product_72_textbox.getItemData.applyAuthUserCode();

// 代理元ユーザの情報が初期表示になることを防ぐため、書き換えを行う。
$('input[name=imwAuthUserCode]').remove();
$('<input>').attr({
    type: 'hidden', 
    name: 'imwAuthUserCode',
    value: applyAuthUserCode}).appendTo('#form');

解説

"imwAuthUserCode" は下記ドキュメントに記載の通り、ログインユーザが代理先として設定されている場合は代理元ユーザコードが該当します。

document.intra-mart.jp

また、標準処理画面は "imwAuthUserCode" を元に申請者情報を決定しています。
このことが原因で、代理元ユーザが処理者に設定されてしまうというわけです。

そのため、 "imwAuthUserCode" を書き換えれば、「代理権限と処理権限の両方を持つユーザ」の場合に処理者を処理権限者本人に設定することが可能になります。

終わりに

今回は、「代理権限と処理権限の両方を持つユーザ」が標準処理画面を開いた場合の挙動と、その対処法についてご紹介しました。
実際に対応が必要になる場面は少ないかもしれませんが、もし対応に詰まった時に参考になれば幸いです。