いつもお世話になっています。
「Garoonの日予定からkintoneの日報を作ろう」で紹介されていたものを参考にさせていただいて、開始時間と終了時間も取得できるようにJavascriptを書いてみました。
開始時間、終了時間は取得できるようになりましたが、表示順番が時間順にならないで入力した順番になってしまいます。
(例) ガルーンスケジュールに登録
1 9:00-10:00 用事1
2 14:00-15:00 用事2
と登録した後に
3 12:00-13:00 用事3 を登録したら
「ガルーンの予定を取得する」ボタンを押したら
1,3,2 と時間順で表示されてほしいのに、1,2,3の入力順になってしまいます。
入力順IDらしきパラメータ「schedule_event id」をソートすればいいような気がしますが、ご教授いただければ幸いです。
参考にさせていただいたページhttps://cybozudev.zendesk.com/hc/ja/articles/209901763
上のページを参考に書いたものです↓
(function() {
‘use strict’;
kintone.events.on([‘app.record.create.show’, ‘app.record.edit.show’], function(event) {
var space = kintone.app.record.getSpaceElement(‘button’);
$(space).append(‘<button id=“my-button” type=“button”>Garoonの予定を取得する</button>’);
$(‘#my-button’).on(‘click’, function() {
var record = kintone.app.record.get();
var date = record.record.date.value;
getSchedule(date).done(function(xml) {
var scheduleList = [];
$(xml).find(‘schedule_event’).each(function() {
scheduleList.push($(this));
});
var daliyReport = ‘’;
$(scheduleList).each(function() {
var plan = $(this).attr(‘plan’); // 追加
var title = $(this).attr(‘detail’);
var memo = $(this).attr(‘description’); // 追加
var allday = $(this).attr(‘allday’);
var eventType = $(this).attr(‘event_type’);
var prefix = ‘’, diff = ‘’;
var startDateTime = ‘’, endDateTime = ‘’;
if (allday === ‘false’) {
if (eventType === ‘normal’) {
startDateTime = $(this).find(‘datetime’).attr(‘start’);
endDateTime = $(this).find(‘datetime’).attr(‘end’);
diff = moment(endDateTime).diff(moment(startDateTime), ‘hours’, true);
prefix = diff + '時間: ';
} else if (eventType === ‘repeat’) {
var startDate = $(this).find(‘condition’).attr(‘start_date’);
var startTime = $(this).find(‘condition’).attr(‘start_time’);
var endTime = $(this).find(‘condition’).attr(‘end_time’);
startDateTime = startDate + ’ ’ + startTime;
// end_dateは繰り返し予定の終了日なのでstart_dateを利用
endDateTime = startDate + ’ ’ + endTime;
diff = moment(endDateTime).diff(moment(startDateTime), ‘hours’, true);
// 24時前開始、24時過ぎ終了の場合
if (diff < 0) {
diff += 24;
}
prefix = diff + '時間: ';
} else if (eventType === ‘banner’) {
prefix = '期間予定: ';
}
} else {
prefix = '終日予定: ';
}
var kaishi = moment(startDateTime); // 開始時間
var kaishijikan = kaishi.format(‘HH:mm’);
console.log(kaishijikan);
var owari = moment(endDateTime); // 終了時間
var owarijikan = owari.format(‘HH:mm’);
console.log(owarijikan);
daliyReport += kaishijikan +‘-’ + owarijikan +‘\r’ + prefix + plan + ’ ’ + title +‘\r’ + memo +‘\r’; // planとmemoを追加
});
setDailyReport(record, daliyReport);
});
});
});
function setDailyReport(record, daliyReport) {
record.record.daily_report.value = daliyReport;
kintone.app.record.set(record);
}
function getSchedule(date) {
var m = moment(date).utc();
var start_datetime = m.format(‘YYYY-MM-DDTHH:mm:ssZ’);
var end_datetime = m.add(1, ‘days’).add(-1, ‘seconds’).format(‘YYYY-MM-DDTHH:mm:ssZ’);
var data = ‘<?xml version=“1.0” encoding=“UTF-8”?>’;
data += ‘<soap:Envelope xmlns:soap=“http://www.w3.org/2003/05/soap-envelope”>’;
data += ’ <soap:Header>‘;
data += ’ <Action>’;
data += ’ ScheduleGetEvents’;
data += ’ </Action>‘;
data += ’ <Security>’;
// 更新系のAPIはリクエストトークンもしくはアカウント、パスワードの指定が必要です。
// https://cybozudev.zendesk.com/hc/ja/articles/202228464#step8
//
// リクエストトークンの必要なAPIの一覧はこちらです。
// https://cybozudev.zendesk.com/hc/ja/articles/202686190
//
// 今回はスケジュールの取得なので不要です。
data += ’ <UsernameToken>‘;
data += ’ <Username></Username>’;
data += ’ <Password></Password>‘;
data += ’ </UsernameToken>’;
data += ’ </Security>‘;
data += ’ <Timestamp>’;
data += ’ <Created>2010-08-12T14:45:00Z</Created>‘;
data += ’ <Expires>2037-08-12T14:45:00Z</Expires>’;
data += ’ </Timestamp>‘;
data += ’ <Locale>jp</Locale>’;
data += ’ </soap:Header>‘;
data += ’ <soap:Body>’;
data += ’ <ScheduleGetEvents>‘;
data += ’ <parameters start="’ + start_datetime + ‘" end="’ + end_datetime + ‘"> </parameters>’;
data += ’ </ScheduleGetEvents>‘;
data += ’ </soap:Body>’;
data += ‘</soap:Envelope>’;
return $.ajax({
method: ‘POST’,
url: ‘/g/cbpapi/schedule/api?’,
data: data,
dataType: ‘xml’,
contentType: ‘text/xml’
});
}
})();