サブテーブルのレコード更新に失敗する

レコードの詳細画面に再計算ボタンを作成し、ボタンが押されたら別のアプリからデータを取得してサブテーブル内のデータを取得したデータで再度更新するプログラムを作成していますが、うまくいきません。

サブテーブルが1行の場合は動作しますが、複数行になると行が削除されて1行になってしまいます。consoleを見ている限り行IDも問題なく取得出来ています。

何が悪いのでしょうか?

よろしくお願いします。

 

tbrec = 開いている詳細レコードのサブテーブルのデータ

resp = 別アプリから取得した更新データ

rec = 開いている詳細レコードのサブテーブルを除いたデータ

for( var i = 0; i < tbrec.length; i++ ){
for( var j = 0; j < resp.records.length; j++ ){
    if( (tbrec[i].value.伝票No.value == "No." + resp.records[j].レコード番号.value) || (tbrec[i].value.伝票No.value == resp.records[j].レコード番号.value) ){
        for( var k = 0; k < resp.records[j].売上.value.length; k++ ){
            if( (tbrec[i].value.商品コード.value == resp.records[j].売上.value[k].value.商品コード.value) && ( tbrec[i].value.商品コード.value != "" ) ){
                /* サブテーブル内の更新 */
                var update = {
                    "app":11,
                    "id":rec.record.レコード番号.value,
                    "record":{
                        "請求":{
                            "value":[
                                {
                                    "id":tbrec[i].id,
                                    "value":{
                                        "商品コード":{
                                            "value":resp.records[j].売上.value[k].value.商品コード.value
                                        },
                                        "日付":{
                                            "value":resp.records[j].納品日.value
                                        },
                                        "伝票No":{
                                            "value":resp.records[j].レコード番号.value
                                        },
                                        "商品名":{
                                            "value":resp.records[j].売上.value[k].value.商品名.value
                                        },
                                        "数量":{
                                            "value":resp.records[j].売上.value[k].value.数量.value
                                        },
                                        "入数":{
                                            "value":resp.records[j].売上.value[k].value.入数.value
                                        },
                                        "ケース":{
                                            "value":resp.records[j].売上.value[k].value.ケース.value
                                        },
                                        "単価":{
                                            "value":resp.records[j].売上.value[k].value.単価.value
                                        },
                                        "単位":{
                                            "value":resp.records[j].売上.value[k].value.単位.value
                                        },
                                        "金額税抜":{
                                            "value":resp.records[j].売上.value[k].value.金額税抜.value
                                        },
                                        "消費税区分":{

                                            "value":resp.records[j].売上.value[k].value.消費税区分.value

                                        },

                                        "金額税込":{
                                            "value":resp.records[j].売上.value[k].value.金額税込.value
                                        },
                                    }
                                }
                            ]
                        }
                    }
                }
                /* 税抜き・税込み計算 */
                t += Number(resp.records[j].売上.value[k].value.金額税抜.value);
                t2 += Number(resp.records[j].売上.value[k].value.金額税込.value);

                /* 消費税取得 */
                s8 += parseInt(resp.records[j].消費税8.value);
                s10 += parseInt(resp.records[j].消費税10.value);
            }
        }
    }
    if( tbrec[i].value.商品名.value.indexOf('小計') != -1 ){
        var update = {
            "app":11,
            "id":rec.record.レコード番号.value,
            "record":{
                "請求":{
                    "value":[
                        {
                            "id":tbrec[i].id,
                            "value":{
                                "商品名":{
                                    "value":" 小計"+String(resp.records[j].合計税抜.value).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,' )
                                },
                            }
                        }
                    ]
                }
            }
        }
        cnt++;
    } else if(  tbrec[i].value.商品名.value.indexOf('消費税') != -1 ){
        var update = {
            "app":11,
            "id":rec.record.レコード番号.value,
            "record":{
                "請求":{
                    "value":[
                        {
                            "id":tbrec[i].id,
                            "value":{
                                "商品名":{
                                    "value":" 消費税(8%)"+String(resp.records[j].消費税8.value).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,' )+"円"+" 消費税(10%)"+String(resp.records[j].消費税10.value).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,' )+"円"
                                },
                            }
                        }
                    ]
                }
            }
        }
    }
}
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', update, function(up) {
    console.log(up);
}, function(error) {
    console.log(error);
});
}

単純に、for文の中で、APIのパラメーター自体を繰り返し代入してるからじゃないでしょうか?

繰り返すべきは record.請求.value の配列のみです。

 

イメージ

// まずrecord.請求.valueの中身を作る
var table = [];

for(/* 繰り返す条件*/) {
table.push({/*1行*/});
}

// 上記で作ったのをパラメータにセット
var update = {
app: 11,
id: rec.record.レコード番号.value,
record: {
請求: {
value: table
}
}
}

// APIを送信
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', update, function(up) {
    console.log(up);
}, function(error) {
    console.log(error);
});

ありがとうございます。

お教えいただいたコードを基に書き直したところ正常動作しました。