他アプリからレコード取得後、一括登録

お世話になっております。

現在、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);
});
};
})();

こんにちは!

どの行まで正常に動いているのでしょうか!?:sweat_drops:

ソースを追おうと見ていたのですが、インデントが全部解除されていて途中で断念してしまいました:sweat_drops:(ここの仕様上、ソースの貼り付けが難しいといえば難しいのですが)

登録でこけている?ということから、function putAllData(putRecords)~あたりを見ていましたが、このputRecordsには登録したいレコードが入ってきているのでしょうか??
エラーコードなど出ているのでしょうか?(゜-゜):sweat_drops:

「配列の中身が空になる」とは、どの行のところでしょうか?

console.logなどをちょいちょい仕込んで、コンソール画面から今どの変数になにが入っている・・・

みたいのを試されてみてください^0^

コメントありがとうございます。

分かりづらくて申し訳ありません。インデントを整えましたので、再度ご確認いただけますと幸いです。

function putAllData(putRecords)の部分についてですが、putRecords自体には登録したいレコードが入ってきていません。ただ、登録処理後、画面をリロードするとフィールドの中身がすべて空白のレコードが、Aアプリのレコード分登録されるという結果になります。

また、

//登録用関数呼び出し
var resolve = putAllData(putRecords);

の部分をコメントアウトしてみると、「Dアプリ登録用データ作成処理」後のコンソールでは登録したいデータが配列に入っていることが確認できています。

エラーは特に出ていない状態です。

promiseについて理解しきれていないので、おそらくそのあたりで躓いているのではないかと思っております。

お手数をおかけしますが、よろしくお願い致します。

すみません、自己解決致しました。

原因は初歩中の初歩で、kintoneに登録しているフィールドコードと、登録処理で指定しているフィールドコードの不一致でした。

なので、コード自体は問題なさそうです。

お手数おかけして申し訳ありません。

参考コードとしてご覧いただければと思います。

よろしくお願い致します。

スミマセン、返信があったのを見落としていましたm(_ _)m

解決できたみたいで良かったです^0^