お世話になります。
こちら(A)「一覧で表示したレコードのキーを使用して一括で別のアプリに登録したい」と
こちら(B)「勤怠管理アプリをカスタマイズしてみよう」を参考に、
登録者を条件でフィルタした一覧から、タイムカードを一括登録したいと考えています。
それぞれのアプリは問題なく動作し、Aから一括登録される項目もBに問題なく反映されています。
ただ、Bのレコード内で自動で作成されるはずの1ヶ月分のテーブルが作成されません。
イベントが「app.record.create.show」となっていることが要因かと思うのですが、どう修正すれば良いのかわからず、お知恵を貸していただけますでしょうか。
(B)項目
・氏名(Aから反映)
・従業員番号(Aから反映)
・対象年月(Aから反映)
・始業時間(Aから反映)
・就業時間(Aから反映)
–B内テーブル項目–
・日付
・曜
・開始
・終了
・朝延長
・夜延長
・欠席
Bのコードは以下の通りです。
どうぞよろしくお願いいたします。
jQuery.noConflict();
(function($) {
“use strict”;
var holidayMST = 27; //休日マスタのアプリID
var kisanbi = 1; //起算日
var start = “0:00”; //デフォルト始業時間
var end = “0:00”; //デフォルト終業時間
var WeekChars = [“日”, “月”, “火”, “水”, “木”, “金”, “土”];
// hh:mm を分に変換
function strToMin(str) {
var hm = str.split(“:”);
return parseInt(hm[0]) * 60 + parseInt(hm[1]);
}
// 分をhh:mmに変換
function minToStr(min) {
var h = Math.floor(min / 60);
var m = min % 60;
return h + “:” + m;
}
// 全レコード取得関数
function fetchRecords(appId, query, opt_offset, opt_limit, opt_records) {
var offset = opt_offset || 0;
var limit = opt_limit || 500;
var allRecords = opt_records || [];
var params = {
app: appId,
query: query + ’ limit ’ + limit + ’ offset ’ + offset
};
return kintone.api(‘/k/v1/records’, ‘GET’, params).then(function(resp) {
allRecords = allRecords.concat(resp.records);
if (resp.records.length === limit) {
return fetchRecords(appId, query, offset + limit, limit, allRecords);
}
return allRecords;
});
}
// 休日取得関数
function fetchHoliday() {
var max, min;
if (kisanbi === 1) {
min = moment().format(“YYYY-MM-0” + kisanbi);
max = moment().endOf(‘month’).format(“YYYY-MM-DD”)
}
return fetchRecords(holidayMST, ‘日付 >= "’ + min + ‘" and 日付 <= "’ + max + ‘" order by 日付 asc’)
.then(function(holidayRecs) {
var result = {
maxDate: max,
minDate: min,
holidays: holidayRecs
};
return result;
});
}
kintone.events.on([“app.record.create.show”, “app.record.edit.show”], function(event) {
var record = event.record;
new kintone.Promise(function(resolve, reject) {
if (event.type === “app.record.create.show”) {
return fetchHoliday().then(function(resp) {
var tmpMinDate = resp.minDate;
var dObj = new Date(tmpMinDate);
var wDay = dObj.getDay();
var days = (moment(resp.maxDate).diff(moment(tmpMinDate), ‘days’) + 1);
for (var k = 0; k < days; k++) {
var flg = false;
for (var j = 0; j < resp.holidays.length; j++) {
if (tmpMinDate === resp.holidays[j].日付.value) {
flg = true;
break;
}
}
if (!flg) {
var newRow = {
“value”: {
“日付”: {
“type”: ‘DATE’,
“value”: tmpMinDate,
},
“曜”:{
“type”:‘SINGLE_LINE_TEXT’,
“value”:WeekChars[wDay],
},
“開始”: {
“type”: ‘TIME’,
“value”: start
},
“終了”: {
“type”: ‘TIME’,
“value”: end
},
“朝延長”: {
“type”: ‘TIME’,
“value”: ‘’,
},
“夜延長”:{
“type”:‘TIME’,
“value”:‘’,
},
“欠席”: {
“type”: ‘CHECK_BOX’,
“value”: []
}
}
};
record.Table.value.push(newRow);
}
tmpMinDate = moment(tmpMinDate).add(“days”, 1).format(“YYYY-MM-DD”);
var dObj = new Date(tmpMinDate);
var wDay = dObj.getDay();
}
record.Table.value.shift();
resolve();
});
}
resolve();
}).then(function() {
kintone.app.record.set(event);
return event;
});
});
})(jQuery);