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

**URL:** <https://community.cybozu.dev/t/topic/9868>\
**Category:** kintone 開発相談\
**Created:** [2024 年 12 月 20 日午前 2:05 UTC](https://community.cybozu.dev/t/topic/9868 "2024-12-20T02:05:41Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![masalemon](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@masalemon](https://community.cybozu.dev/u/masalemon)\
**Post date:** [2024 年 12 月 20 日午前 2:05 UTC](https://community.cybozu.dev/t/topic/9868/1 "2024-12-20T02:05:41Z")

</div>

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

以下のコードを実行すると  
PUT [https://xxxx.cybozu.com/k/v1/record.json](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:{
                  数値１:{
                    value: 456
                  },
                  数値２:{
                    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;

```

});  
})();

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

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

---

<div class="post-metadata">

**Author:** ![akika](https://avatars.discourse-cdn.com/v4/letter/a/5e9695/32.png) [@akika](https://community.cybozu.dev/u/akika)\
**Post date:** [2024 年 12 月 21 日午後 11:49 UTC](https://community.cybozu.dev/t/topic/9868/2 "2024-12-21T23:49:47Z")

</div>

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

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

```

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

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

```

参考：[テーブル内のルックアップの自動取得 - Legacy\_Account2802 の #3](https://community.cybozu.dev/t/topic/5147/3)

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

---

<div class="post-metadata">

**Author:** ![Staff-melon](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/staff-melon/32/24_2.png) [@Staff-melon](https://community.cybozu.dev/u/Staff-melon)\
**Post date:** [2024 年 12 月 21 日午後 11:55 UTC](https://community.cybozu.dev/t/topic/9868/3 "2024-12-21T23:55:19Z")

</div>

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

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

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

---

<div class="post-metadata">

**Author:** ![masalemon](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@masalemon](https://community.cybozu.dev/u/masalemon)\
**Post date:** [2024 年 12 月 23 日午前 12:16 UTC](https://community.cybozu.dev/t/topic/9868/4 "2024-12-23T00:16:01Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![akika](https://avatars.discourse-cdn.com/v4/letter/a/5e9695/32.png) [@akika](https://community.cybozu.dev/u/akika)\
**Post date:** [2024 年 12 月 23 日午後 10:10 UTC](https://community.cybozu.dev/t/topic/9868/5 "2024-12-23T22:10:32Z")

</div>

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

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

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

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

```

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

---

<div class="post-metadata">

**Author:** ![masalemon](https://avatars.discourse-cdn.com/v4/letter/m/d78d45/32.png) [@masalemon](https://community.cybozu.dev/u/masalemon)\
**Post date:** [2024 年 12 月 24 日午前 2:19 UTC](https://community.cybozu.dev/t/topic/9868/6 "2024-12-24T02:19:44Z")

</div>

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

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

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

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 12 月 27 日午前 2:19 UTC](https://community.cybozu.dev/t/topic/9868/7 "2024-12-27T02:19:56Z")

</div>

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