こんにちは、またまた行き詰ってしまいましたのでご質問させて頂きます。
内容としましては、テーブルの中身を全件確認して一件づつREST APIのGETで確認して、確認したアプリに内容として無い物を削除したいというものになります。
一件づつ確認するというのは、再帰処理で行っています。
問題としまして、あるレコードが2回再帰処理を行って、2回GETを行うのですが、2回目のGETのrespが一回目のまま処理が行われます。
なにか解決方法等ございませんでしょうか?
伝わりにくいですがお願いいたします。
コード全体:
kintone.events.on('app.record.index.show', (event) => {
const records = event.records;
const user_sel = kintone.app.getQueryCondition();
const appUrl = kintone.api.url("/k/v1/records");
let kaku_t;
let miko_t;
let seban;
let rec_id;
let i = 0;
let i20 = 0;
let i30 = 0;
let params;
let params2;
if (user_sel == 'user_sel in (" USER", LOGINUSER())') {
records_ser();
}
async function records_ser() {
if (i == records.length) {
} else {
//return new kintone.Promise((resolve, reject) => {
kaku_t = records[i].kaku_t;
miko_t = records[i].miko_t;
seban = records[i].seban.value;
rec_id = records[i].rec_id.value;
i20 = 0;
i30 = 0;
ssp();
//});
}
}
async function ssp() {
await kaku_t_del();
i = i + 1;
await records_ser();
}
async function kaku_t_del() { //予算確定テーブルを案件管理NOを元にあるかないか判断してなければ削除、あればそのままにする。
//下記から再帰処理を用いて対象のテーブルをループさせる。
if (i20 == kaku_t.value.length || kaku_t.value.length == 0 ||
kaku_t.value[i20] == null) {
await miko_t_del();
} else {
return new kintone.Promise((resolve, reject) => {
let no_t = kaku_t.value[i20].value.no_t.value;
let mo = moment(new Date(records[i].kijun_d.value));
let month = mo.startOf('month').format('YYYY-MM');
let query = 'anken_no = "' + no_t + '"'
params = {
app: 272,
query: query,
};
return kintone.api(appUrl, "GET", params).then((resp) => {
console.log(resp);
for (var i2 = 0; i2 < kaku_t.value.length; i2++) {
if (resp != null) {
let bunpai_t = resp.records[0].bunpai_t
let flug = 0;
for (var i4 = 0; i4 < bunpai_t.value.length; i4++) {
let mo_t = moment(new Date(bunpai_t.value[i4].value.keijou_d_0.value))
let month_t = mo_t.startOf('month').format('YYYY-MM');
if (bunpai_t.value[i4].value.seban.value == seban && month == month_t) {
break;
} else {
flug = flug + 1;
}
if (flug == bunpai_t.value.length) {
delete kaku_t.value[i2];
let value = kaku_t.value.filter(v => v);
kaku_t = { value };
}
}
} else {
delete kaku_t.value[i2];
var value = kaku_t.value.filter(v => v);
kaku_t = { value };
i2 = i2 - 1;
}
i20 = i20 + 1;
kaku_t_del();
}
}, (error) => {
console.log(error);
});
});
}
}
async function miko_t_del() {//予算見込テーブルを案件管理NOを元にあるかないか判断してなければ削除、あればそのままにする。
//下記から再帰処理を用いて対象のテーブルをループさせる。
if (i30 == miko_t.value.length || miko_t.value.length == 0 ||
miko_t.value[i30] == null) {
await upsert_put();
} else {
return new kintone.Promise((resolve, reject) => {
let no_t_0 = miko_t.value[i30].value.no_t_0.value;
let mo = moment(new Date(records[i].kijun_d.value));
let month = mo.startOf('month').format('YYYY-MM');
let query = 'anken_no = "' + no_t_0 + '"'
params2 = {
app: 272,
query: query,
};
return kintone.api(appUrl, "GET", params2).then((resp2) => {
console.log(resp2)
for (var i3 = 0; i3 < miko_t.value.length; i3++) {
if (resp2 != null) {
let bunpai_t_0 = resp2.records[0].bunpai_t_0
let flug1 = 0;
for (var i5 = 0; i5 < bunpai_t_0.value.length; i5++) {
let mo_t = moment(new Date(bunpai_t_0.value[i5].value.mikomi_d_0.value))
let month_t = mo_t.startOf('month').format('YYYY-MM');
if (bunpai_t_0.value[i5].value.seban_0.value == seban && month == month_t) {
break;
} else {
flug1 = flug1 + 1;
}
}
if (flug1 == bunpai_t_0.value.length) {
delete miko_t.value[i3];
var value = miko_t.value.filter(v => v);
miko_t = { value };
}
} else {
delete miko_t.value[i3];
var value = miko_t.value.filter(v => v);
miko_t = { value };
}
i30 = i30 + 1
miko_t_del();
}
}, (error) => {
console.log(error);
});
});
}
}
function upsert_put() {
return new kintone.Promise((resolve, reject) => {
let body = {
app: 283,
id: rec_id,
record: {
kaku_t,
miko_t
}
}
return kintone.api(kintone.api.url("/k/v1/record.json", true), "PUT", body).then(function (resp4) {
console.log(resp4)
})
, (error) => {
console.log(error);
}
});
}
問題部分:
async function kaku_t_del() { //予算確定テーブルを案件管理NOを元にあるかないか判断してなければ削除、あればそのままにする。
//下記から再帰処理を用いて対象のテーブルをループさせる。
if (i20 == kaku_t.value.length || kaku_t.value.length == 0 ||
kaku_t.value[i20] == null) {
await miko_t_del();
} else {
return new kintone.Promise((resolve, reject) => {
let no_t = kaku_t.value[i20].value.no_t.value;
let mo = moment(new Date(records[i].kijun_d.value));
let month = mo.startOf('month').format('YYYY-MM');
let query = 'anken_no = "' + no_t + '"'
params = {
app: 272,
query: query,
};
return kintone.api(appUrl, "GET", params).then((resp) => {
console.log(resp); //←ここのrespが変わらない、上記のparamsの内容は変わっている。
for (var i2 = 0; i2 < kaku_t.value.length; i2++) {
if (resp != null) {
let bunpai_t = resp.records[0].bunpai_t
let flug = 0;
for (var i4 = 0; i4 < bunpai_t.value.length; i4++) {
let mo_t = moment(new Date(bunpai_t.value[i4].value.keijou_d_0.value))
let month_t = mo_t.startOf('month').format('YYYY-MM');
if (bunpai_t.value[i4].value.seban.value == seban && month == month_t) {
break;
} else {
flug = flug + 1;
}
if (flug == bunpai_t.value.length) {
delete kaku_t.value[i2];
let value = kaku_t.value.filter(v => v);
kaku_t = { value };
}
}
} else {
delete kaku_t.value[i2];
var value = kaku_t.value.filter(v => v);
kaku_t = { value };
i2 = i2 - 1;
}
i20 = i20 + 1;
kaku_t_del();
}
}, (error) => {
console.log(error);
});
});
}
}
});