kintoneUtility.rest.getRecordsの結果をループ処理したい

こんにちは。
サブテーブルの各行の受付noから別アプリの顧客名を取得し、それぞれの行へ値を入れる処理を書きたいのですがうまくいきません。
コンソールに「Cannot read property ‘value’ of undefined」とエラーが表示されます。
どのように改善すれいいのかご教授お願いします。

jQuery.noConflict();
(function($) {
“use strict”;
kintone.events.on([‘app.record.create.submit’,‘app.record.edit.submit’], function(event) {
var tbl = event.record[‘Table’].value;
var gyomuName;
var values={};
var appArray = { ‘アプリ1’:3, ‘アプリ2’:3, ‘アプリ3’:3};

for (var i = 0; i < tbl.length; i++) {
kintoneUtility.rest.getRecords({‘app’:appArray[tbl[i].value[‘業務名’].value],
‘query’: ‘受付No = "’ + tbl[i].value[‘受付No’].value + ‘"’,
‘fields’: [‘顧客名’, ‘顧客名’]})
.then(function(result){
values[i] = result.records[0].登録名称.value;

tbl[i].value[‘物件名称’].value = values[i];
//ここでエラーになります
/*
省略
*/
});
}
kintone.app.record.set(record);
return event;
});

})(jQuery);


jiji様

お世話になっております。 cstapの江田と申します。

コンソールに表示されたエラーの原因は
tbl[i].value['物件名称'].value = values[i];
が実行された時点でitbl.lengthになっていることだと思います。
var文は、ブロックスコープではなく関数スコープで変数宣言するので注意が必要です。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/var
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/let

また、ご提示していただいたコードでは非同期処理が完了する前にreturn event;されています。

下記のようなコードに変更してみてはいかがでしょうか?

jQuery.noConflict();(function($){"use strict";kintone.events.on(['app.record.create.submit','app.record.edit.submit'],function(event){vartbl=event.record['Table'].value;vargyomuName;varvalues={};varappArray={'アプリ1':3,'アプリ2':3,'アプリ3':3};returnkintone.Promise.all(tbl.map(function(row){returnkintoneUtility.rest.getRecords({'app':appArray[row.value['業務名'].value],'query':'受付No = "'+row.value['受付No'].value+'"','fields':['顧客名','登録名称']}).then(function(result){row.value['物件名称'].value=result.records[0].登録名称.value;/\* 省略 \*/});})).then(function(){returnevent;});});})(jQuery);