AのテーブルとBのテーブルで同じPK項目に対してN:Nの更新を行いたいのですが、KINTONEAPIを使用すると非同期のため最後の項目のみ更新する状態になってしまいます。
Promiseを使用しても現象変わらずです。
この場合、どのようなロジックを組んだらよろしいでしょうか。
アドバイスをいただけたらと思います。
以下サンプルソースです。
(function() {
“use strict”;
kintone.events.on(‘app.record.index.show’, function(event) {
if (document.getElementById(‘my_index_button’) !== null) {
return;
}
var myIndexButton = document.createElement(‘button’);
myIndexButton.id = ‘my_index_button’;
myIndexButton.innerHTML = ‘取込実行’;
// ボタンクリック時の処理
myIndexButton.onclick = function() {
// 更新処理
set_Kousin();
};
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
});
//**************************************
// 登録処理
//**************************************
function set_Kousin(){
// 顧客情報アプリのアプリID
var updateAppId = 42;
// リクエストパラメータ
var requestParam = {
‘app’: kintone.app.getId()
};
//更新対象取得
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, requestParam, function(resp)
{
var records = resp.records;
if (!records || !records.length) {
window.alert(‘取り込むレコードがありません’);
return;
}
// データごとに処理
for (var i = 0; i < records.length; i++) {
var record =records[i];
// リクエストパラメータ
var requestParam2 = {
‘app’: updateAppId,
‘query’: "ID = " + record.ID.value
};
//更新先データ取得
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, requestParam2, function(resp2) {
var records2 = resp2.records;
if (!records2 || !records2.length) {
// 新規
set_Insert(updateAppId,record);
}
else
{
// 更新対象のレコード番号取得のため
var record2 = records2[0];
// 更新
set_Update(updateAppId,record,record2.レコード番号.value);
}
});
}
});
}
//**************************************
// データチェック
//**************************************
function CheckData(updateAppId,record){
var result = 1;
// リクエストパラメータ
var requestParam = {
‘app’: updateAppId,
‘query’: "ID = " + record.ID.value
};
//更新先データ取得
return new kintone.Promise(function(resolve, reject) {
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, requestParam, function(resp) {
var records2 = resp.records;
if (!records2 || !records2.length) {
result = 0;
}
else
{
result = records2[0].レコード番号.value;
}
resolve(result);
});
});
}
//**************************************
// 新規(POST)
//**************************************
function set_Insert(updateAppId,record){
// 必要情報セット
var body = {
“app”: updateAppId,
“record”:{
“ID”:{“value”:record.ID.value}
,“PK”:{“value”:record.得意先CD.value + ‘_’ + record.事業所CD.value}
,“得意先CD”:{“value”:record.得意先CD.value}
,“事業所CD”:{“value”:record.事業所CD.value}
,“得意先名”:{“value”:record.得意先名.value}
}
};
// 更新
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘POST’, body, function(resp) {
// success
console.log(resp);
location.reload();
}, function(resp) {
// error
window.alert(‘取込に失敗しました。’);
console.log(resp);
return;
});
}
//**************************************
// 更新(PUT)
//**************************************
function set_Update(updateAppId,record,id){
// 必要情報セット
var body = {
“app”: updateAppId,
“id”: id,
“record”:{
“ID”:{“value”:record.ID.value}
,“PK”:{“value”:record.得意先CD.value + ‘_’ + record.事業所CD.value}
,“得意先CD”:{“value”:record.得意先CD.value}
,“事業所CD”:{“value”:record.事業所CD.value}
,“得意先名”:{“value”:record.得意先名.value}
}
};
// 更新
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, body, function(resp) {
// success
console.log(resp);
location.reload();
}, function(resp) {
// error
window.alert(‘取込に失敗しました。’);
console.log(resp);
return;
});
}
})();