User 登録のカスタム項目の取得コードについて

出張費用申請のフローを構築しています。プロセス管理で、”出張費用承認”のステータスを承認した人を、ユーザー選択フィールドの"Host承認者"にユーザーを反映させ、"HostCompany確認中(出張費用)"のプロセスで承認をした人を"GHR承認者"に入れるコードを書きました。これまでは、"Host承認者"と"GHR承認者"はユーザー選択フィールドだったのですが、文字列(1行)フィールドにフィールドを直し、ユーザー管理のカスタマイズ項目の"Name"覧に登録をした値を反映させたいです。

これまで利用していたコードは以下で、これは動いていました。
// HOST側の承認者、GHR側の承認者をユーザー選択フィールドに入力します。
const userSelectFieldCodeHost = “Host承認者”;
const userSelectFieldCodeGHR = “GHR承認者”;
const saveStatusHost = “出張費用承認”;
const saveStatusGHR = “HostCompany確認中(出張費用)”;

kintone.events.on("app.record.detail.process.proceed", function(event) {

if (event.nextStatus.value === saveStatusHost) {
const authorizer = kintone.getLoginUser();

  event.record[userSelectFieldCodeHost].value = [
   {
    code: authorizer.code
    }
    ];
   }

if (event.nextStatus.value === saveStatusGHR) {
const authorizerGHR = kintone.getLoginUser();

event.record[userSelectFieldCodeGHR].value = [
  {
    code: authorizerGHR.code
    }
  ];
}

return event;

});

ただ、英語名で表示をさせたいので、ユーザー管理の カスタマイズ項目の設定に”Name”という文字列(1行)の項目をもたせ、そこに英語名を入れ、これをフォームの文字列(1行)フィールドに反映させたいです。
※日本語環境で、承認者の名前を英語で出したいものです。

以下のように改修したのですが動きません。

const userSelectFieldCodeHost = “Host承認者”;
const userSelectFieldCodeGHR = “GHR承認者”;
const saveStatusHost = “出張費用承認”;
const saveStatusGHR = “HostCompany確認中(出張費用)”;

kintone.events.on("app.record.detail.process.proceed", function(event) {

if (event.nextStatus.value === saveStatusHost) {
const authorizer = kintone.getLoginUser().Name;

  event.record[userSelectFieldCodeHost].value = authorizer
    
    
   }

if (event.nextStatus.value === saveStatusGHR) {
const authorizerGHR = kintone.getLoginUser().Name;

event.record[userSelectFieldCodeGHR].value = authorizerGHR

}

return event;

});

})();

どのように修正すれば良いのでしょうか。ユーザー登録の、組織/ユーザーの中にある” カスタマイズ項目の設定”を利用しています。
ここの値を引っ張るにはどのようにすれば良いか、お知恵をお貸しください。宜しくお願い致します。

こんにちは。

kintone.getLoginUser() では、リンク先を確認してもらうとわかるのですが、
カスタマイズ項目の値を取得することはできません。

カスタマイズ項目で設定されている値を取得したい場合には、
User API で対象ユーザー情報を取得する必要があります。

    ※ ユーザー管理については、cybozu.com共通管理のプロフィール項目に、
        カスタマイズ項目を追加している認識です。

現状の処理だと、kintone.getLoginUser().Name で値が取得できていないので、
処理がうまく動いていないのかなと思います。

kintone.getLoginUser().Name の代わりに、User API の ユーザーを取得する
利用することで、処理が動くようになるか確認してみてもらえればと思います。

なお、ユーザーを取得する API は、kintone.api() を利用した以下のような処理で
実行することが可能ですよ。

const body = {
   codes:[kintone.getLoginUser().code]
};

const resp = await kintone.api(kintone.api.url('/v1/users.json', true), 'GET', body);
//カスタマイズ項目が1つのみで、対象項目値を抽出する場合
console.log(resp.users[0].customItemValues[0].value);
1 Like

ko_ji

お世話になっております。
お忙しい中、非常に有用なご回答ありがとうございました。

カスタマイズ項目で設定されている値を取得したい場合には、
User APIで対象ユーザー情報を取得する必要があるとの事、非常に勉強になりました。

今回は大人しく、基本項目の使わない項目”内線”に英語名を持たせて拾うという方向にひとまず走る事にしました。
(安易な方法に走り申し訳ありません)
一旦、以下で動くようになりましたが、頂いた方向でも組み立てられるよう、平行して勉強はできればと思います。

ありがとうございました!!!

const userSelectFieldCodeHost = “Host承認者”;
const userSelectFieldCodeGHR = “GHR承認者”;
const saveStatusHost = “費用承認”;
const saveStatusGHR = “HostCompany確認中(費用)”;

kintone.events.on("app.record.detail.process.proceed", function(event) {

if (event.nextStatus.value === saveStatusHost) {
const authorizer = kintone.getLoginUser().extensionNumber;

event.record[userSelectFieldCodeHost].value = authorizer

}

if (event.nextStatus.value === saveStatusGHR) {
const authorizerGHR = kintone.getLoginUser().extensionNumber;

event.record[userSelectFieldCodeGHR].value = authorizerGHR

}

return event;

});

1 Like