いつもお世話になっております。
現状、自己解決できないエラーが発生しており、原因究明のアドバイスを頂けたらと思います。
・出張作業明細書(以降、Aアプリと記載)
・作業日報(以降、Bアプリと記載)
Bアプリから特定条件に一致するサブテーブルの値のみを抽出し、Aアプリのサブテーブルへデータコピーしたいと考えております。
データコピー作業は「Aアプリ側で完結」をさせる予定です。
https://developer.cybozu.io/hc/ja/community/posts/360047906752
上記QAなどを参照し、見よう見まねでコードを作成しましたが、現状「TypeError: Cannot read property ‘value’ of undefined」エラーが発生し先へ進めない状況です。
101行目、以下の[ii]後に記載された「value」でエラーが発生しているようなのですが、不思議なことにWatchでは問題なく中のデータが取得されていることが確認できます。
"作業開始": { "type": "DATETIME", "value": resp_pCostTable[ii].value["作業開始"].value },
素人ながらデバックツールも使用しつつ調べてはいるのですが、何が原因でエラーが発生しているのかを解明できずにおります。
もしかして大変初歩的なことをお聞きしているのかもしれませんが、皆様のお知恵をお貸し頂けましたら幸いです。
もし記載情報が不足しておりましたら、ご指摘ください。
以下に作成途中のコードを記載させて頂きます。
まだまだ修正していく予定ですが、コードの書き方がおかしいといった様なアドバイスなどもございましたら、あわせてご指摘頂けましたら嬉しいです。
(function() {
'use strict';
// 「Bアプリコピー」時の処理
kintone.events.on(["app.record.create.change.コピー",
"app.record.edit.change.コピー"],
function(event) {
var record = event.record;
///カーソル情報代入
var appID = 40; //データ取得元 BアプリID
var limit = 200;
var offset = 0;
var size = 100;
//Aアプリ情報代入
var pNo = record["工番"].value;
var reqStart = record["申請開始日"].value;
var reqEnd = record["申請終了日"].value;
var worker = record["出張作業者"].value;
var pCostTable = record["工数管理"].value;
function postCursor() {
var body = {
'app': appID,
'fields':["工数登録者","作業日","工数管理"],
//'query':「フィールドコード 演算子 条件」の順序で記述
//Bアプリ:「作業日」 が Aアプリ:「申請開始日」~「申請終了日」の間 and
//Bアプリ:「工数登録者」 が Aアプリ:「出張作業者」と同じ and
//Bアプリ:サブテーブル工数管理「工番」 が Aアプリ:「工番」 と同じ
'query': '作業日 >= "'+ reqStart +'" and 作業日 <= "'+ reqEnd +'" and 工数登録者 = "'+ worker +'" and 工番 in ("'+ pNo +'") order by $id desc' ,
'limit': limit,
'offset': offset,
'size': size,
};
// Bアプリデータ取得用のカーソル作成(thenを使うことで resp の中にデータが格納される)
return kintone.api(kintone.api.url('/k/v1/records/cursor', true), 'POST', body).then(function(resp) {
// 成功:カーソル作成
return resp.id;
// catch で取得失敗時のエラー制御
}).catch(function(error) {
// エラー発生時にエラー表示
return error;
});
}
function getRecordsFromCursor(cursorId, opt_records) {
var records = opt_records || [];
var body = {
'id': cursorId
};
// Bアプリからデータ取得(thenを使うことで resp の中にデータが格納される)
return kintone.api(kintone.api.url('/k/v1/records/cursor', true), 'GET', body).then(function(resp) {
// 成功:データを取得
records = records.concat(resp.records);
if (resp.next) {
return getRecordsFromCursor(cursorId, records);
}
return records;
// catch で取得失敗時のエラー制御
}).catch(function(error) {
// エラー発生時にエラー表示
return error;
});
}
postCursor().then(function(respCursorId) {
return getRecordsFromCursor(respCursorId);
}).then(function(respRecords) {
console.log(respRecords);
//Bアプリフィールド情報代入
for (var i = 0; i < respRecords.length; i++) {
var resp_pCostTable = respRecords[i]["工数管理"].value;
//Aアプリ「工数管理」サブテーブルへ取得データセット
for (var ii = 0; ii < respRecords.length; ii++) {
pCostTable.unshift({
value: {
"作業開始": { "type": "DATETIME", "value": resp_pCostTable[ii].value["作業開始"].value },
"作業終了": { "type": "DATETIME", "value": resp_pCostTable[ii].value["作業終了"].value },
"休憩時間": { "type": "TIME", "value": resp_pCostTable[ii].value["休憩時間"].value },
"作業時間": { "type": "CALC", "value": "" /*resp_pCostTable[ii].value["工数"].value*/ },
"作業内容": { "type": "SINGLE_LINE_TEXT", "value": resp_pCostTable[ii].value["備考"].value },
}
});
}
}
}).catch(function(error) {
console.log(error);
});
return event;
});
})();