同じ題名「現在の作業者をユーザー選択フィールドに表示させる」
という投稿をして
もみじ様より下記のプログラム内容の回答をいただきましたが
返信しようと思ったのですが操作を間違い、投稿がクローズされており
もみじ様に質問できなかった為
もう一度投稿いたしました。(メンションとかも出来なくて)
この方法で質問が届くかは不明ですが投稿いたします。
<質問その1>
どうして下記のソートという動きをさせているのか教えてもらいたいです。
順番の違いは無視して比較する為と書かれてますが
その意味がわかりませんでした。順番の違いとは?
また、それぞれのオブジェクトにuser.codeは1つだけではないのでしょうか?
複数存在する事もあるのでしょうか?
よろしくお願いします。
↓↓↓
// [作業者]と[ユーザー選択]のログイン名だけ取り出してソート(順番の違いは無視して比較するため)
const assigneeCodes = processAssignee.map(user => user.code).sort();
const userSelectionCodes = userSelection.map(user => user.code).sort();
<質問その2>
作業者の情報を’GET’で取得するのは間違いでしょうか?
または、プロセス管理の情報を取得するとか?/ja/kintone/docs/rest-api/apps/settings/get-process-management-settings/
このリンクは、読んでも私は理解できなかったのですが・・・。
すみません、よろしくおねがいします。
実行したコードをコピー&ペーストしましょう
(() => {
'use strict';
// レコード詳細画面が表示されたときに処理開始
kintone.events.on('app.record.detail.show', async (event) => {
const record = event.record;
const processAssignee = record['作業者'].value;
const userSelection = record['ユーザー選択'].value;
// [作業者]と[ユーザー選択]のログイン名だけ取り出してソート(順番の違いは無視して比較するため)
const assigneeCodes = processAssignee.map(user => user.code).sort();
const userSelectionCodes = userSelection.map(user => user.code).sort();
// [作業者]と[ユーザー選択]のログイン名が完全に一致しているかどうかを判定
const isSame = assigneeCodes.length === userSelectionCodes.length &&
assigneeCodes.every((code, index) => code === userSelectionCodes[index]);
// すでに一致している場合は、無駄な更新をしないために処理を中止
if (isSame) {
return event;
}
// [作業者]の情報を kintone.api での更新に使える形式に変換
const userList = processAssignee.map(user => ({ code: user.code }));
try {
// 1件のレコードを更新する REST API を実行
await kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', {
app: kintone.app.getId(), // 現在のアプリID
id: event.recordId, // 現在のレコードID
record: {
'ユーザー選択': {
value: userList // [ユーザー選択]を[作業者]と同じ内容に更新
}
}
});
// リロードして、画面に[ユーザー選択]の更新を反映
location.reload();
} catch (error) {
// REST API 実行後にエラーが出たらコンソールに出力
console.error(error);
}
return event;
});
})();