レコード更新(PUT)が成功しているのに値が更新されない

お世話になります。

AアプリからBアプリへデータをコピーしPOSTしたあとBアプリ内を請求日と顧客コードを検索キーとしてクエリ検索を行いBアプリ内で集計したデータを更新する処理を作ったのですがうまく動作してくれず困っています。

コード一番上のbody5の処理が問題なく動作して繰越額が更新されるのですが、body6が実行に成功しているのに更新されない状態です。実行前のparam配列を見るとデータは入っているのですが、実行後のresp6の中身を見ると空の配列になっています。

何が原因でしょうか?

// 繰越額の処理
var body5 = {
    "app":kintone.app.getId(),
    "records":ca_amount
};

kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', body5, function(resp5) {
    // 請求日で絞る
    let param = {
        "app":kintone.app.getId(),
        "query":"請求日 = \"" + date + "\""
    };

    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', param, function(resp) {
let update = [];        
for( let i = 0; i < resp.records.length; i++ ){
            // 顧客コード
            let cs_cd = resp.records[i].顧客コード.value;
            // 顧客名
            let cs_name = resp.records[i].顧客名.value;
            // レコード番号
            let record_no = resp.records[i].レコード番号.value;

            // 顧客で絞る
            let param = {
                "app":kintone.app.getId(),
                "query":"顧客コード = \"" + cs_cd + "\" and 顧客名 = \"" + cs_name + "\""
            };

            kintone.api(kintone.api.url('/k/v1/records', true), 'GET', param, function(resp2) {
// 請求額                
let claim = 0;
// 入金額
                let payment = 0;

                if( resp2.records.length == 1 ){
                } else {
                    claim = resp2.records[1].請求額.value;
                    payment = resp2.records[1].入金額.value;
                }

                update.push({
                    "id":record_no,
                    "record":{
                        "請求額":{
                            "value":claim
                        },
                        "入金額":{
                            "value":payment
                        }
                    }
                });
            }, function(error2){
                alert("エラーが発生しました。");
            });
        }

        let body6 = {
            "app":kintone.app.getId(),
            "records":update
        };

        kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', body6, function(resp6) {
            window.location.href = "https://xxxxxxxx.cybozu.com/k/xx/?query=請求日=\""+date+"\"";
        },function(error6){
            alert("エラーが発生しました。");
        });
    },function(eeror5){
        alert("エラーが発生しました。");
    });

Promiseを待つ処理をいれてないので、途中のfor文でデータ取得しているこの箇所が通り過ぎてしまっています。

ここが参考になるので今後のためにも、一度みたほうがいいかとおもいます。

https://developer.cybozu.io/hc/ja/articles/360023047852-kintone%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BPromise%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%AE%E5%9F%BA%E6%9C%AC

 

ただ、今回はさらにfor文内でPromiseしてややこしいので(For内でPromiseを使う場合はこちらが参考になりそう)、

理想は、

                “query”:“顧客コード = "” + cs_cd + “" and 顧客名 = "” + cs_name + “"”

このクエリを1回のGETで欲しいレコードをすべて取得できるように組み替えるほうがよさそうです。(For文でクエリを組み立てて、そのあと1回のGETでデータを取得するほうが楽そう、の意図)

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