現在の作業者をユーザーフィールドに表示させる

何を実現したいのかを書きましょう

現在の作業者をユーザーフィールドに表示させたいです。
過去のトピックスでドンピシャのトピックスがあったのですが、
参考リンク先が非公開になっており
わからなかったので全く同じ質問で恐縮なのですが
教えてください。

発生した問題やエラーメッセージを具体的に書きましょう

ほんとはアクションボタンを押して
作業者が変更になったらユーザーフィールドの値も連動して変更させたかったのですが
それができなくて、アクション操作後に詳細画面が表示されるので
そのタイミングで更新できればと思いやってみたのですが
ユーザーフィールドの値は更新されません。
現在の作業者のデーターは取得出来て
イベントを編集画面を開いたときに変更すると
ユーザーフィールドが更新できますが
イベントを詳細画面に変更すると更新されません。
コンソールで値を確認すると
表示したいユーザーフィールドの値は現在の作業者が
入っているようなのですが
表示がされません。
詳細画面の表示を変更する何かが足りなのだと思うのですが
それがわかりません。
よろしくお願いします。

実行したコードをコピー&ペーストしましょう

(() => {
    'use strict';
  
    const events = [
//      'app.record.edit.show',
      'app.record.detail.show',
//      'app.record.detail.process.proceed',
    ];
  
    kintone.events.on(events, async (event) => {
      const recordId = kintone.app.record.getId();  // レコードID
      const appId = kintone.app.getId();            // アプリID
  
      try {
        // プロセス管理の作業者情報を取得するために GET メソッドを使用
        const processResp = await kintone.api(kintone.api.url('/k/v1/record.json',true),'GET',{
          app:appId,
          id:recordId
        });
  
        // レスポンスの内容を確認(コンソールに全データを表示)
        console.log('レスポンスデータ:', processResp.record);

        // 作業者フィールドの確認
        const assigneeField = processResp.record['作業者'];  // 作業者フィールドコード
        if (!assigneeField || assigneeField.value.length === 0) {
          console.log('作業者情報がありません');
          event.record['担当者'].value = [];  // 作業者情報がない場合、担当者表示用フィールドをクリア
          return kintone.app.record.set(event);  // 変更を保存
        }
  
        // 作業者情報の取得
        const assignee = assigneeField.value[0];  // 配列の最初の作業者情報
        const assigneeUserId = assignee.code;  // ユーザーコード(ID)
        const assigneeUserName = assignee.name;  // ユーザー名
  
        // コンソールにユーザーIDと名前を表示
 debugger;
        console.log('現在の作業者ID:',assigneeUserId);
        console.log('現在の作業者名:',assigneeUserName);
  
        // ユーザー情報を担当者表示用フィールドに反映
        event.record['担当者'].value = [{code:assigneeUserId,name:assigneeUserName }];

        console.log('event.recordの内容:',event.record);

      } catch (e) {
        // エラーメッセージをコンソールに表示
        console.error('API呼び出しに失敗しました:', e);
        alert('作業者の情報の取得に失敗しました');        
      }
      return event;
    });
  })();

実行前が左で実行後は右で
ユーザーフィールドの担当者がtukiだった名前が
作業者と同じhosiに変わってますが
アプリのフィールドは変わりません。

kintone.app.record.setonclickonchange などの JavaScript のイベントハンドラー内で
使うものであって、kintone.events.on() のイベントハンドラー内では実行できません。
加えて詳細画面で利用することもできません。

詳細画面でのフィールドの値の変更の保存は1件のレコードを更新するでやることになります。

(() => {
  '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;
  });

})();

もみじ様

回答ありがとうございます。
リンクやプログラムコードまでありがとうございます。
まだ初心者で、直ぐに理解出来ず時間かかりそうですが
やってみます。
ありがとうございます。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。