アプリAのレコード内に利用品IDフィールドとサブテーブル(日付・数・利用者名(ルックアップ)・利用者ID)があり、各行に異なる利用者名・利用者IDが入っています。
アプリBのレコード内には、利用者ID・利用者名フィールドとサブテーブル(日付・利用品ID(ルックアップ)・数)があります。
アプリA側でプログラムを走らせ、
アプリAのサブテーブル内の利用者IDとアプリBの利用者IDフィールドが一致すれば、アプリAの一致した利用者IDがある行をアプリBのサブテーブルに追加する処理を作成しております。
基本的には意図した通り動くのですが、時々アプリBに一致する利用者IDがあるのに追加されないでそのまま次の行に行ってしまうことがあります。
await / async を使って非同期処理の対応はしているつもりなのですが、不十分なのでしょうか。
プログラム的にはアプリAのサブテーブルの行数分forで回し、一致する利用者ID行があれば都度PUTするといった形です。(効率悪いですが)
どこが間違っているかお教えいただけると助かります。
//shipがアプリAのテーブル
for (var i = 0; i < ship.length; i++) {
let userID = ship[i].value[‘利用者ID’].value;
//アプリBにuserIDと同じ利用者IDがあるか確認する
const paramforGet = {
‘app’: APP_B, //アプリB
‘query’: query,
};
const get_resp = await kintone.api(kintone.api.url(‘/k/v1/records’,true), ‘GET’, paramforGet);
//console.log(get_resp);
if (!get_resp.records.length) {
//なければ何もしない
} else { //あればアプリA→アプリBへその行だけサブテーブルに追加する
let appended_subtable = [];
let subtable = [];
const sellItemTable = get_resp.records[0][“販売品”].value;
for (let m = 0; m < sellItemTable.length; m++) {
subtable.push(sellItemTable[m]);
};
subtable.push({
“value”: {
“販売品_日付”: {
“value”: ship[i].value[‘出庫日付’].value
},
“販売品利用数”: {
“value”: ship[i].value[‘出庫数’].value
},
“利用品ID_販売品”: {
“value”: record.利用品ID.value,
“lookup”: true
},
}
});
const sellItemPut = {
“app”: userItem,
“id”: get_resp.records[0].$id.value,
“record”: {
“販売品”: {
“value”: subtable
}
}
};
appended_subtable.push(sellItemPut);
subtable = subtable.concat(appended_subtable); // 既存と追加分のサブテーブルを結合
let put_record = {}; // レコード更新用オブジェクト
put_record[“販売品”] = {
value: subtable
};
const put_resp = await kintone.api(kintone.api.url(“/k/v1/record.json”, true), “PUT”, sellItemPut);
};
};