【问题标题】:How to modify a specific instance of an event series如何修改事件系列的特定实例
【发布时间】:2016-03-20 16:40:08
【问题描述】:

假设我创建了一个周期性活动,该活动从周一上午 9 点开始,到上午 11 点结束,该活动每天重复 3 天。 现在我想(在我使用重复创建事件之后)更改周二事件的开始时间,同时保持其他事件不变,我该怎么办?

我可以使用高级日历 API 轻松获取此 eventSeries 的重复规则,它返回类似于

RRULE:FREQ=DAILY;COUNT=3 

可以随意修改此规则以更改所有事件(我也可以使用patch 更新事件,但不只是针对单个事件。 我尝试使用API tryout 来获取此 eventSeries 的每个实例,并且我确实可以看到每个开始和结束时间(* 见下文),但我没有找到任何方法来使用 Google Apps 脚本中的日历 API 来获取它。

我没有找到修改特定实例的方法,即写回修改后的值。

由于我可以在日历 Web UI 中手动执行此操作,我想我应该可以使用脚本来执行此操作,但我真的不知道如何操作。

我用来获取事件参数的代码相当简单:

  ...
  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 试用获得的一个实例的捕获:

【问题讨论】:

  • 您可以尝试在应用程序脚本中使用日历 API 并将事件系列作为单个事件获取,然后更新详细信息。或者使用补丁来更新事件详细信息。这个SO question 将表明您可以在日历 API 中使用 Events.get 和 Events.update。要添加日历 API,请单击资源 > 高级 Google 服务 > 启用 Google 日历
  • 感谢您的评论,我所做的一切都在改变所有事件,而不是单一事件......我怎样才能将其中一个事件作为单一事件发生?我在这里 (code.google.com/p/google-apps-script-issues/issues/…) 看到事件具有特定的 ID,其中包含 RFC339 日期字符串的紧凑形式,但没有成功使用它来获取事件。有什么线索吗?

标签: google-apps-script calendar google-calendar-api google-calendar-recurring-events


【解决方案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"));
});

我无法判断您的“特定实例”是指单个事件还是每个星期二的事件,或者您是否有理由在这种情况下甚至使用高级日历 API。

【讨论】:

  • 感谢您的回答,但不幸的是,这个解决方案(我已经尝试过,我应该提一下)正在打破重复。修改后的活动不再是活动系列的一部分......副作用是,如果您需要更改这些活动中的任何细节(位置、摘要或与会者),您必须为每次发生的事件单独进行(至少你已经改变了)这对负责活动组织的人来说非常不舒服
  • 那些细节需要为所有事件改变还是只是时间改变的那个?我更改了一个事件的时间,然后用cal.getEventSeriesById().setDescription() 更改了所有事件的详细信息,它们都更新了,包括时间不同的事件。我没有看到事件系列中的解除绑定行为。
  • 哇,你说得对……我想我在尝试的时候错过了一些东西……真丢人 ;-) 500 代表积分给你!谢谢
猜你喜欢
  • 2021-11-12
  • 2012-05-23
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多