# 一覧画面表示時のサブテーブルの値追加

**URL:** <https://community.cybozu.dev/t/topic/1962>\
**Category:** kintone 開発相談\
**Created:** [2015 年 2 月 4 日午前 7:09 UTC](https://community.cybozu.dev/t/topic/1962 "2015-02-04T07:09:12Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1634](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account1634](https://community.cybozu.dev/u/Legacy_Account1634)\
**Post date:** [2015 年 2 月 4 日午前 7:09 UTC](https://community.cybozu.dev/t/topic/1962/1 "2015-02-04T07:09:12Z")

</div>

一覧画面表示時に、 フィールドコード：Processの値によって、サブテーブルの値を変更したいのですが、うまくいきません。  
下記コードの間違い、または何か良い方法がございましらご教示頂けますと幸いです。

* * *

(function() {  
“use strict”;  
kintone.events.on(‘app.record.index.show’,function(event){  
var records = event.records;  
for (var i = 0; i \< records.length; i++) {  
var record = records[i];  
var Process = record[‘Process’][‘value’];

```
if(Process === "A"){
            kintone.api(
                kintone.api.url('/k/v1/record',true),
                'PUT',
                {
                    "app": 132,
                    "id" : record['レコード番号']['value'],
                    "record": {
                        "テーブル": {
                            "value": {
                                "0":{
                                    "value": {
                                        "process": {
                                            "value": "B"
                                        },
                                        "Date": {
                                            "value": null
                                        },
                                        "week": {
                                            "value": ""
                                        },
                                        "chk_P": {
                                            "value": []
                                        },
                                        "chk_C": {
                                            "value": []
                                        },
                                        "status": {
                                            "value": "C"
                                        },
                                        "comment": {
                                            "value": ""
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            );
        }
    }
});

```

})();

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2015 年 2 月 4 日午前 7:38 UTC](https://community.cybozu.dev/t/topic/1962/2 "2015-02-04T07:38:54Z")

</div>

田中さん

サブテーブルの所で

```
"テーブル": {
  "value": {
    "0":{

```

となっている部分を、

```
"テーブル":{
  "value": [
    {
      "value": {
        "process": {
            "value": "B"
        },
        "Date": {
            "value": null
        },
        "week": {
            "value": ""
        },
        "chk_P": {
            "value": []
        },
        "chk_C": {
            "value": []
        },
        "status": {
            "value": "C"
        },
        "comment": {
            "value": ""
        }
      }
    },
    {
      "value": {
        "process": {
            "value": "B"
        },
        "Date": {
            "value": null
        },
        "week": {
            "value": ""
        },
        "chk_P": {
            "value": []
        },
        "chk_C": {
            "value": []
        },
        "status": {
            "value": "C"
        },
        "comment": {
            "value": ""
        }
      }
    }
  ]
}

```

といった感じにして頂けますと、通るのではないかと思います。`[]`の中に並べる分がサブテーブルの各行になります。  
サブテーブルにあまり慣れていっらしゃらないのであれば、まずは`GET`メソッドで形を確認されてみると  
良いかと思います。  
また、サブテーブル関連のTips（[1](https://cybozudev.zendesk.com/hc/ja/articles/202422244)、  
[2](https://cybozudev.zendesk.com/hc/ja/articles/200752984)、  
[3](https://cybozudev.zendesk.com/hc/ja/articles/202796890)）も参考にされてみてください。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1634](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account1634](https://community.cybozu.dev/u/Legacy_Account1634)\
**Post date:** [2015 年 2 月 5 日午前 12:50 UTC](https://community.cybozu.dev/t/topic/1962/3 "2015-02-05T00:50:21Z")

</div>

Ryu Yamashita さん  
ありがとうございます！  
ご指摘いただいた部分を修正したのですが、  
PUT https://\*\*\*\*\*.cybozu.com/k/v1/record.json 400 (Bad Request)  
とでてしまいます。こちらのエラーはどういった時にでるものなのでしょうか？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2015 年 2 月 5 日午前 1:12 UTC](https://community.cybozu.dev/t/topic/1962/4 "2015-02-05T01:12:18Z")

</div>

エラーメッセージを表示することは出来ますか？（[リファレンス](https://cybozudev.zendesk.com/hc/ja/articles/202166310)のサンプルのように`errback`を指定する等）  
400ですと、「不正なJSON文字列です」等が候補になってきます。

事前に`record`オブジェクトを個別に出して確認してみたり、サブテーブルに入れるフィールドを少なめからリクエストを試してみるのはいかがでしょうか？（サブテーブル中の全てのフィールドを指定しなくても、指定したフィールドのみ反映されますのでアプリ側のフィールドの変更等は不要です）

あとは、他の方法（[例](http://yamaryu0508.hatenablog.com/entry/2014/09/16/000440)）でリクエストしてみたりして比べてみるのもひとつの方法だと思います。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1634](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account1634](https://community.cybozu.dev/u/Legacy_Account1634)\
**Post date:** [2015 年 2 月 5 日午前 5:11 UTC](https://community.cybozu.dev/t/topic/1962/5 "2015-02-05T05:11:41Z")

</div>

Ryu Yamashitaさん  
早急にご対応いただきありがとございます！  
頂いたアドバイスを参考に試してみようと思います。  
エラーメッセージには、"入力内容が正しくありません。"と表示されました・・・！

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2015 年 2 月 5 日午前 8:43 UTC](https://community.cybozu.dev/t/topic/1962/6 "2015-02-05T08:43:25Z")

</div>

> エラーメッセージには、"入力内容が正しくありません。"と表示され  
> ました・・・！

このメッセージには分岐がありますが、

まず、 **必須であるリクエスト成功時コールバック関数** の指定がありませんでしたが、こちらは[リファレンス](https://cybozudev.zendesk.com/hc/ja/articles/202166310)通り対応頂きましたでしょうか？

また、補足になりますが、このJSを仕込むアプリに対するリクエストかなぁと推察させてもらったのですが、それであれば

- アプリIDを `kintone.app.getId()` で与える（アプリコピー等しても書換が不要になりますね）
- レコード番号を `record['$id']['value']` で与える（レコード番号フィールドは[アプリコード](https://help.cybozu.com/ja/k/user/appcode.html)の追加やフィールドコードの変更が起こりえますが、`$id`はユニークなレコードIDです）

を適用されると良いのではないかと思います。

あと、ご存知かと思いますが ‘event.records’ は今回ですとレコード一覧画面表示時イベント発動時に得られるものですので、要は表示されているレコードを取得し、今回更新対象としていることとなりますので、アプリ内の全レコードに対してという意図でしたら100件超えた際に次の101件目は「次へ」ボタンを押した際に更新されるということになりますので、ご注意ください。

またご不明な点がありましたら、お問合せ頂ければと思います。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1634](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account1634](https://community.cybozu.dev/u/Legacy_Account1634)\
**Post date:** [2015 年 2 月 5 日午前 8:50 UTC](https://community.cybozu.dev/t/topic/1962/7 "2015-02-05T08:50:09Z")

</div>

Ryu Yamashitaさん  
エラーは、  
レコード取得時にエラーが発生しました。  
入力内容が正しくありません。  
と表記されました。省略していましたすみません。

再度、いただいたアドバイスで試してみます！  
本当にありがとうございます！！  
また質問させていただくかもしれませんが、よろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2015 年 2 月 6 日午前 12:42 UTC](https://community.cybozu.dev/t/topic/1962/8 "2015-02-06T00:42:00Z")

</div>

言葉足らずですみません^^; 「入力内容が正しくありません」って分かりにくいですよねぇ。という意で捉えて頂けますと幸いです。

> レコード取得時にエラーが発生しました。

こちらは、リファレンスのサンプル中に挿入されていたテキストですね。

> コードを取得し、今回更新対象としていることとなりますので、アプリ内の全レコードに対してという意図でしたら100件超えた際に次の101件目

この辺の話を外して当初の意図を実現しようとすると、これで通ると思います。あとは、コール数の節約等も考慮して`/k/v1/records`でやる方法も良いかと思います。

```
(function() {
  "use strict";

  kintone.events.on('app.record.index.show',function(event){
    var records = event.records;
    for (var i = 0; i < records.length; i++) {
      var record = records[i];
      var Process = record['Process']['value'];

      if(Process === "A"){
        kintone.api(
            kintone.api.url('/k/v1/record',true),
            'PUT',
            {
                "app": kintone.app.getId(),
                "id" : record['$id']['value'],
                "record": {
                  "テーブル":{
                    "value": [
                      {
                        "value": {
                          "process": {
                              "value": "B"
                          },
                          "Date": {
                              "value": null
                          },
                          "week": {
                              "value": ""
                          },
                          "chk_P": {
                              "value": []
                          },
                          "chk_C": {
                              "value": []
                          },
                          "status": {
                              "value": "C"
                          },
                          "comment": {
                              "value": ""
                          }
                        }
                      },
                      {
                        "value": {
                          "process": {
                              "value": "B"
                          },
                          "Date": {
                              "value": null
                          },
                          "week": {
                              "value": ""
                          },
                          "chk_P": {
                              "value": []
                          },
                          "chk_C": {
                              "value": []
                          },
                          "status": {
                              "value": "C"
                          },
                          "comment": {
                              "value": ""
                          }
                        }
                      }
                    ]
                  }
                }
            },
            function(resp){
                console.log(resp);
            },
            function(resp) {
              var errmsg = 'レコード更新時にエラーが発生しました。';
              if (resp.message !== undefined){
                errmsg += '' + resp.message;
              }
              console.log(errmsg);
            }
        );
      }
    }
  });
})();

```

いかがでしょうか？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1634](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account1634](https://community.cybozu.dev/u/Legacy_Account1634)\
**Post date:** [2015 年 2 月 6 日午前 1:47 UTC](https://community.cybozu.dev/t/topic/1962/9 "2015-02-06T01:47:45Z")

</div>

Ryu Yamashitaさん

下記のコードで、テーブル項目の"必須項目にする"のチェックを外したところ出来ました！このチェックをしているしていないは関係するものなのでしょうか？

また、Dateの部分に  
“Date”: {  
“value”: “2015-02-06”  
の様に値を入れたところ再び反応しなくなりました・・・。  
ちなみに下記の様なエラーが出ています。  
Uncaught TypeError: Cannot read property ‘value’ of undefined

重ね重ね申し訳ございませんが、よろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2015 年 2 月 6 日午前 2:17 UTC](https://community.cybozu.dev/t/topic/1962/10 "2015-02-06T02:17:37Z")

</div>

> 下記のコードで、テーブル項目の"必須項目にする"のチェックを外したところ出来ました！このチェックをしているしていないは関係するものなのでしょうか？

文字通り必須のフィールドに値が指定されていないとエラーになってたと思います。

```
"Date": {
  "value": "2015-02-06"
}

```

こちらは私の方でも試してみましたが、更新できてしまいました^^; （フィールドのアクセス権や必須項目等の縛りはつけていません）

> Uncaught TypeError: Cannot read property ‘value’ of undefined

これは、例えば `record['Process']['value']` を得ようとする時に、Processプロバティが定義できていない（フィールドコードが誤っていたり）場合に出るエラーです。  
先のサンプルコードで読み出しを行っているのは `record['Process']['value']` と `record['$id']['value']` だけですが、`$id` は不変ですので、前者に原因になっている可能性が高そうに思います。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1634](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account1634](https://community.cybozu.dev/u/Legacy_Account1634)\
**Post date:** [2015 年 2 月 6 日午前 4:51 UTC](https://community.cybozu.dev/t/topic/1962/11 "2015-02-06T04:51:27Z")

</div>

Ryu Yamashitaさん  
申し訳ございません・・・フィールドコードが間違っていました\>\<  
無事実装する事が出来ました！ありがとございます！！！  
ただ正常に動作したのですが、下記エラーがでております。  
Uncaught TypeError: undefined is not a function  
こちらのエラーは、どういった時に出るものか教えていただきたいです。。

また、更新件数が100件以上ある場合は、  
[https://cybozudev.zendesk.com/hc/ja/articles/201501294](https://cybozudev.zendesk.com/hc/ja/articles/201501294)  
こちらを参考にすれば良いでしょか？？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2015 年 2 月 6 日午前 7:52 UTC](https://community.cybozu.dev/t/topic/1962/12 "2015-02-06T07:52:41Z")

</div>

無事実装に至られた？ようで良かったです^^

> Uncaught TypeError: undefined is not a function

は文字通りですが、定義されていない関数をコールしている時に出ますね。私が試した際には出ていませんし、今回のサンプル中で起きている事象ではなさそうに思います。

> また、更新件数が100件以上ある場合は、

xmlHttpRequestに抵抗はありますが、こちらを参考にされてみてください。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1634](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account1634](https://community.cybozu.dev/u/Legacy_Account1634)\
**Post date:** [2015 年 2 月 6 日午前 8:15 UTC](https://community.cybozu.dev/t/topic/1962/13 "2015-02-06T08:15:15Z")

</div>

Ryu Yamashitaさん  
実装できました！ありがとうございます。  
エラーに関しては、探ってみます・・・！

ちなみにxmlHttpRequest以外の方法で、何か良い方法はございますでしょうか？  
何度もすみませんがご教示いただけますと幸いです\>\<

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2015 年 2 月 8 日午後 11:07 UTC](https://community.cybozu.dev/t/topic/1962/14 "2015-02-08T23:07:32Z")

</div>

> ちなみにxmlHttpRequest以外の方法で、何か良い方法はございますでしょうか？

今回既に使われていますが、kintone JavaScript APIとしてサポートされている kintone.api() の利用が推奨されています。

---

<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:** [2025 年 5 月 28 日午前 7:16 UTC](https://community.cybozu.dev/t/topic/1962/15 "2025-05-28T07:16:56Z")

</div>

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