お世話になっております。
現在、A(入金データ)・B(マスタ)・C(マスタ)という3つのアプリからレコードを全件取得し、Aアプリの件数分、2つのマスタから必要な情報を取得したのち、Dアプリに一括登録をするカスタマイズを実装中です。
Aアプリ全件分、マスタから情報取得→配列に入れるという部分までは実装できたのですが、登録処理を追加したところ、配列の中身が空になるという現象が起きてしまいました。
(lengthはA全件分になるため、空のレコードが一括登録されてしまいます。)
原因が全く分からないのですが、初心者のため、おそらくpromiseの使い方に間違いがあるのではないかと考えております。
以下、ソースコードです。ご教授お願い致します。
====================================
(function checkError() {
‘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 = ‘作成’;
// ボタンを配置するスペース
var el = kintone.app.getHeaderMenuSpaceElement();
// スペースに作成したボタンを追加
el.appendChild(myIndexButton);
//ボタン押下時イベント
myIndexButton.onclick = (function(){
//Aアプリからデータ取得
var get1 = function(){
return new kintone.Promise(function(resolve, reject){
var ebdata = getAllRecords1(アプリID);
resolve(ebdata);
});
};
//Bアプリからデータ取得
var get2 = function(){
return new kintone.Promise(function(resolve, reject){
var kouzaMaster = getAllRecords2(アプリID);
resolve(kouzaMaster);
});
};
//Cアプリからデータ取得
var get3 = function(){
return new kintone.Promise(function(resolve, reject){
var master = getAllRecords3(アプリID);
resolve(master);
});
};
//非同期処理の結果を取得
get1().then(function (ebdata){
get2().then(function(kouzaMaster){
get3().then(function(master){
createData(ebdata, kouzaMaster, master).then(function(putRecords){
console.log(putRecords);
console.log(putRecords.length);
//登録用関数呼び出し
var resolve = putAllData(putRecords);
});
});
});
});
//location.reload();
});
return event;
});
const getAllRecords1 = //Aアプリ全取得処理
const getAllRecords2 = //Bアプリ全取得処理
const getAllRecords3 = //Cアプリ全取得処理
//レコード登録処理
function putAllData(putRecords){
while(putRecords.length){
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘POST’, {
‘app’: kintone.app.getId(),
‘records’: putRecords.slice(0,100)
});
putRecords.splice(0,100);
}
}
//Dアプリ登録用データ作成処理
function createData(ebdata, kouzaMaster, master){
return new kintone.Promise(function(resolve, reject){
var putRecords = new Array();
for(var i = 0; i < ebdata.length; i++){
//マスタから必要データ取得処理
//配列に登録するレコードを入れる
var record = {
'accountNum':{
'value':kouzaNo
},
'branchAccountName':{
'value':naiyou
},
'startM':{
'value':ebdata[i]['startM']['value']
},
'startD':{
'value':ebdata[i]['startD']['value']
},
'sum':{
'value':kingaku
},
'balance':{
'value':zandaka
},
'description':{
'value':tekiyo
},
'inCharge':{
'value':[{
‘code’:tantou,
‘name’:tantouName
}]
},
‘organization’:{
‘value’:[{
‘code’:sosiki,
‘name’:sosikiName
}]
},
‘status’:{
‘value’:‘未’
},
};
putRecords.push(record);
console.log(putRecords);
};
resolve(putRecords);
});
};
})();