前記事までの作業で、乗車予定を行動予定に変換できたので、今度はスケジューラ(Google Calendar)に登録する。乗車予定から行動予定の変換は一方向の処理(=手動での追加情報は無し)だったが、スケジューラ登録も同様の処理とする。
Google Calendarへの登録は、以前作成したライブラリによる。1件の行動予定データ(timeslot)を1件のイベントとして登録し、登録後に得られるイベントIDを予定データに保存しておく。また、Google Calendar側で説明(description)を変更した場合にのみ、その内容を予定データに反映する。(それ以外の変更は反映しない=一方向の処理。)
コードイメージは以下。
// JavaScript function syncGCal(isCreateFirst){ // var idxStart = (isCreateFirst)? 0 : 1; var idxEnd = (isCreateFirst)? gCurTimeslots.length : gCurTimeslots.length - 1; for (var i = idxStart; i < idxEnd; i++) { (function(){ syncGCal1(gCurTimeslots[i]); })(); } } function syncGCal1(aTS){ var _description = ''; if (aTS.cal_id == '' || aTS.cal_id == 'na') { // GCに未登録の場合は新規登録 gGCalendar.addEventA(aTS.slot_summary, strToDate(aTS.slot_startdate, aTS.slot_starttime), strToDate(aTS.slot_enddate, aTS.slot_endtime), aTS.loc_name, _description, function(resp){ // 登録後返されるデータを処理する aTS.cal_id = resp.id; // イベントID aTS.cal_seq = resp.sequence; // シーケンス番号 // 予定データを更新する gDSTimeslot.dbUpd(aTS.slot_key, aTS, function(res_ts){ }); }); } else { // GCに登録済の場合はイベントデータを取得する // イベントデータを取得 gGCalendar.getEvent(aTS.cal_id, function(xEvent){ // イベントデータのdescriptionを予定データにコピー if (xEvent.description){ aTS.slot_description = xEvent.description; gDSTimeslot.dbUpd(aTS.slot_key, aTS, function(res_ts){ }); } }); } }