更新重复事件的所有(或子集)实例的正确方法是什么?也相关:给定原始事件的 id,您如何获取该事件的实例?
4 回答
如果您只想更新重复事件的子集,则需要在运行查询时设置 singleevents = true 以检索事件的初始列表。在 PHP 中你会做这样的事情
$gdataCal = new Zend_Gdata_Calendar($client);
$query = $gdataCal->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setStartMin($startDate);
$query->setStartMax($endDate);
$query->setSingleEvents('true'); //get recurring events as a series of single events
$eventFeed = $gdataCal->getCalendarEventFeed($query);
foreach ($eventFeed as $event) {
//do stuff with $event
}
我尝试更新所有重复事件,它正在工作。最初我从 2016 年 2 月 25 日到 2016 年 3 月 25 日每周一创建了一个重复事件,并为该重复周期创建了 6 个实例。在更新期间我尝试的是,
1.首先我分配给重复字段,“recurrence”:[“RRULE:FREQ=WEEKLY;COUNT=18;BYDAY=TU”](每周二更新)
2.之后我使用list google api获取可用列表。这里我使用了Single Events:false(因此它只会给出主要的重复事件而不是所有实例)
3.在我使用更新事件进行更新后,例如传递 auth、eventId 和 calendarId: "primary" 和 resource:updated 事件数组
然后就完成了。它在星期二将实例更新为每周一次。
我希望它对某人有所帮助。
要更新所有内容,您只需更改事件的相关属性,保持重复和重复异常字符串不变。不确定您是否可以轻松修改子集,因为这需要根据子集将重复事件转换为多个新事件。
对于第二部分或您的问题,根据 API 文档:
具体来说,每个重复事件都由结果提要中的一个元素表示,并且每个元素都包含一个元素,用于在开始时间和结束时间之间发生的该事件的每次发生。查看元素比自己解析重复和异常要简单得多。
但是,我从来没有能够找到那个神奇的“何时”......所以我最终解析了递归和递归异常字符串 - 如果你找到了那个答案,让我们都知道!
对于任何有这个问题的人,我也花了一些时间试图解决这个问题。基本上,当您获得 CalendarEventEntry 列表时,您需要检查每个 calendarEventEntry 是否有 originalEvent (calendarEventEntry.getOriginalEvent())。这基本上告诉您有另一个事件(您可能已经处理或尚未处理)需要与当前 calendarEventEntry 的信息交换。