更新现有事件的startDate / endDate(而不是eventSeries!)

时间:2014-12-23 07:59:09

标签: events google-apps-script

是否可以通过id获取单个事件(而不仅仅是带有getEventSeriesById()的eventSeries? 我想更新单个事件的开始和结束日期,并且需要类似“getEventById”(事实上不存在) - 否则我必须在事件系列中设置重复:

var oldEvent = CalendarApp.getCalendarById('...').getEventSeriesById('...');
var recur = CalendarApp.newRecurrence().addDailyRule().times(1);
oldEvent.setRecurrence(recur, new Date(2015,0,2), new Date(2015,0,3));

我不希望在我的日历中有重复的事件,即使它们只出现一次。还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

  

是否可以通过id获取单个事件(而不仅仅是带有getEventSeriesById()的eventSeries?

是的,Advanced Calendar Service。 (结果将是Events Resource,而不是GAS CalendarEvent,因此您将以不同方式处理它。)

var event = Calendar.Events.get(calendarId, eventId);  // Note, your default calendarId is 'primary'

您可以将事件资源与update semantics一起使用来更改事件的时间:

function updateEventDateTime( calendarId, eventId, startDateTime, stopDateTime ) {
  // For update semantics, we need a complete event. Start by getting the event.
  var event = Calendar.Events.get(calendarId, eventId);

  // Change the event time
  event.start.dateTime = startDateTime.toISOString();
  event.stop.dateTime = stopDateTime.toISOString();

  // And update the event
  Calendar.Events.update(event, calendarId, eventId);
}

但是,您根本不需要getEventById()方法。通过使用patch semantics,您可以立即跳转到设置时间,而无需执行get。这将更有效:

function updateEventDateTime( calendarId, eventId, startDateTime, stopDateTime ) {
  // For patch semantics, we only need to provide properties that are changing. Start with empty object.
  var event = {};

  // Change the event time
  event.start.dateTime = startDateTime.toISOString();
  event.stop.dateTime = stopDateTime.toISOString();

  // And update the event
  Calendar.Events.patch(event, calendarId, eventId);
}

如果您真的关心采用getEventById()方法,请访问并加注明星Issue 4614