Как изменить конкретный экземпляр серии событий

Предположим, я создаю повторяющееся событие, которое начинается в понедельник в 9 утра и заканчивается в 11 утра, это событие повторяется каждый день в течение 3 дней. Теперь я хочу (после того, как я создал события с использованием повторения), чтобы изменить время начала события во вторник, оставив другие события без изменений, как я могу это сделать?

Я могу легко получить правило повторения для этой серии событий, используя расширенный API календаря, он возвращает что-то вроде

RRULE:FREQ=DAILY;COUNT=3 

Это правило можно изменить по желанию, чтобы изменить все события (и я также могу обновлять события, используя patch, но не только для одного события. Я попробовал API tryout, чтобы получить каждый экземпляр этой серии событий, и я действительно могу видеть каждое время начала и окончания (* см. ниже ), но я не нашел способа получить это с помощью Calendar API в Google Apps Script.

Я не нашел способа изменить конкретный экземпляр, т.е. записать обратно измененные значения.

Поскольку я могу сделать это вручную в веб-интерфейсе календаря, я думаю, что смогу сделать это с помощью сценария, но я действительно не знаю, как это сделать.

Код, который я использую для получения параметров события, довольно прост:

  ...
  for(var n = 1 ; n < data.length ; n++){
    if(data[n][9] == ''){continue};
    var advancedID = data[n][9].substring(0,data[n][9].indexOf('@'));
    Logger.log(advancedID+'\n');
    ChangeEventRecurrence(calID,advancedID);
  }
}

function ChangeEventRecurrence(calID,advancedID){
  var event = Calendar.Events.get(calID, advancedID);
  Logger.log(event.recurrence+'\n'+JSON.stringify(event));
  // here I should be able to get all the instances of this eventSeries and change them if needed
 }

Вот снимок экземпляра, который я получаю с помощью пробной версии API:

введите здесь описание изображения


person Serge insas    schedule 20.03.2016    source источник
comment
вы можете попробовать использовать Calendar API в скрипте приложений и получить серию событий как одно событие, а затем обновить детали. Или используйте патч для обновления деталей события. Этот вопрос SO покажет, что вы можете использовать Events.get и Events. обновление в Calendar API. Чтобы добавить Calendar APi, щелкните Ресурсы ›Расширенные службы Google› Включить Календарь Google   -  person Mr.Rebot    schedule 22.03.2016
comment
Спасибо за ваш комментарий, все, что я пробовал, изменяет все события, а не одно событие ... как я могу получить одно из происшествий как отдельное событие? Я видел здесь (code.google. com / p / google-apps-script-issues / issues /), что события имеют определенный идентификатор, содержащий компактную форму строки даты RFC339, но не удалось использовать его для получения события. Есть подсказка?   -  person Serge insas    schedule 22.03.2016


Ответы (1)


С CalendarApp просто укажите диапазон дат для поиска отдельного события и прокрутите результат, чтобы затем использовать .setTime():

var cal = CalendarApp.getCalendarsByName('<YOUR_CAL>')[0];
var events = cal.getEvents(new Date("April 5, 2016 08:00:00 AM"), new Date("April 5, 2016 11:30:00 AM"));
events.forEach( function(e) {
  //var e = events[0];
  //if ( e.getTitle() === 'Your Title' ) 
  e.setTime(new Date("April 5, 2016 11:00:00 AM"), new Date("April 5, 2016 01:00:00 PM"));
});

Я не могу сказать, означает ли ваш «конкретный экземпляр» только одно событие или каждое вторник, или у вас есть причина даже использовать Advanced Calendar API в этом случае.

person Bryan P    schedule 27.03.2016
comment
Спасибо за ваш ответ, но, к сожалению, это решение (которое я уже пробовал, я должен был упомянуть) нарушает повторение. Измененное событие больше не является частью серии событий ... Побочный эффект заключается в том, что если вам нужно изменить какие-либо детали в этих событиях (местоположение, сводка или участники), вы должны делать это для каждого события отдельно (по крайней мере, для одного вы изменились), что очень неудобно для людей, ответственных за организацию мероприятий - person Serge insas; 28.03.2016
comment
Эти детали нужно изменить для всех событий или только для того, где изменилось время? Я изменил время на одном мероприятии, а затем изменил детали на всех с помощью cal.getEventSeriesById().setDescription(), и все они обновились, включая событие с другим временем. Я не видел непривязанного поведения из серии событий. - person Bryan P; 28.03.2016
comment
Вау, ты на самом деле прав ... Думаю, я что-то упустил, когда пытался ... позор мне ;-) 500 очков репутации для тебя тогда! Спасибо - person Serge insas; 28.03.2016