詳細画面でテーブル内のルックアップを自動更新

詳細画面でボタンを押すと、テーブル内に配置された数値の値を変更し、ルックアップを更新したいのですが、数値の変更は出来るのですがルックアップの更新ができません。

以下のコードを実行すると
PUT https://xxxx.cybozu.com/k/v1/record.json 400 (Bad Request)
のエラーが出ます。

ルックアップ:{
lookup: true
}
の記述の問題だと思うのですが、正しい記述方法が判りません。

(() => {
‘use strict’;
const events = [‘app.record.detail.show’]; //編集画面
kintone.events.on(events, async (event) => {
// 増殖バグを防ぐ
if (document.getElementById(‘menu_button’) !== null) {
return false;
}
const menuButton = document.createElement(‘button’);
menuButton.id = ‘menu_button’;
menuButton.innerText = ‘入力を反映する’;
menuButton.onclick = function() {

  Swal.fire({
    title: "入力した内容を反映させますか?",
    text: "",
    icon: "warning",
    showCancelButton: true,
    confirmButtonColor: "#3085d6",
    cancelButtonColor: "#d33",
    confirmButtonText: "反映する",
    cancelButtonText: "反映しない",
  }).then((result) => {
    if (result.isConfirmed) {

      // レコード更新のパラメータ設定
      const body = {
        app: kintone.app.getId(),
        id: kintone.app.record.getId(),
        record: {
          テーブル:{
            value:[
              {
                id:17344, //テーブル上のデータID
                value:{
                  数値1:{
                    value: 456
                  },
                  数値2:{
                    value: 123
                  },
                  ルックアップ:{
                    lookup: true
                  }
                }
              }
            ]
          },
        },
      };

      // フィールドの値を更新する
      return kintone.api(
        kintone.api.url("/k/v1/record.json", true), "PUT", body, (resp) => {
          // 更新できたらリロード
          location.reload();
        }
      );
    } else {
      // 「反映しない」をクリックした処理
    }
  });

};
//フォーム上の'space_field'の位置にボタンを表示
menuButton.className = 'kintoneplugin-mybutton-1';
const spaceField = kintone.app.record.getSpaceElement('space_field');
spaceField.appendChild(menuButton);
return event;

});
})();

ルックアップの部分をコメントアウトし実行すると
正常に動作して数値1、数値2は変更できています。

アドバイス等よろしくお願いいたします。

試していないですが、
パッと見た感じですと、次の行は、ルックアップフィールドに対して値を指定すべきですが、trueが指定されているため、リクエストエラーになったからだと思います。

ルックアップ:{
    lookup: true
}

lookupの自動ルックアップを有効するには、次のように指定します。
iは行のインデックス)

record['テーブル'].value[i].value['lookupフィールド'].lookup =true;

参考:テーブル内のルックアップの自動取得 - Legacy_Account2802 の #3

また、同じレコード内の値をセットするには、REST APIよりはkintone.app.record.set(record)の方はいい気がします。
このAPIは、 ルックアップの自動取得を操作できます。

お世話になっております。
cybozu developer network 運営チームでございます。

ご投稿内容にドメイン情報が含まれているため、伏せさせていただきました。

今後ともよろしくお願いします。

ご回答ありがとうございます。
ただ編集画面ではご指摘の記述で実現できているのですが、
編集画面に入る前の詳細画面で実現できずに悩んでいます。
詳細画面ではREST APIを使わないと出来ないと言うような情報を
目にしたので投稿したようなソースを書いてみました。
数値の変更ができているので、ルックアップの更新もできるのでは?
と思っているのですがいかがなものでしょうか?

認識が違ってしまい失礼しました。

lookupフィールドに値が入っている状態でしょうか?
入っていなければ、lookup: trueを設定しても自動ルックアップしません。

次のように、lookupフィールドに値を指定してみると、詳細画面でも編集画面でも動くことを確認しました。

ルックアップ:{
  lookup: true
},
ルックアップ:{
  value: 1
}

また、ルックアップ元のフィールドを「値を唯一」に設定する必要があります。

qiuxiang様
更なるご回答ありがとうございます。

lookupフィールドに値を指定すると出来ました!
ルックアップ元のフィールドは元々「値を唯一」に
していたので、値の指定の部分が問題でした。

物凄くすっきりしました。
有難うございました!

「いいね!」 1

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