无法在Java中以编程方式更新定期会议

时间:2015-05-04 11:49:59

标签: java outlook icalendar recurring

我创建了一个定期会议,其中包含以下详细信息。

BEGIN:VCALENDAR
PRODID:-//XYZ//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
ORGANIZER:MAILTO:a@a.ins
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=FALSE:MAILTO:myMailId@abc.com
RECURRENCE-ID:20150511T093000Z
CLASS:PUBLIC
STATUS:CONFIRMED
DTSTART:20150511T093000Z
DTEND:20150511T094500Z
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;INTERVAL=1;COUNT=5
LOCATION:conference-room
TRANSP:OPAQUE
SEQUENCE:1
UID:tlc6006OJ52003
DTSTAMP:20150511T093000Z
ACTION:DISPLAY
DESCRIPTION:sample
SUMMARY:testing
PRIORITY:5
BEGIN:VALARM
TRIGGER:-PT15M
REPEAT:3
DURATION:PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

我尝试通过更改时间来更新同一次定期会议:
原始开始时间:20150511T093000Z
原始结束时间:20150511T094500Z

更新开始时间:20150511T084500Z
更新结束时间:20150511T091500Z

以下是ICS的更新值

BEGIN:VCALENDAR
PRODID:-//XYZ//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
ORGANIZER:MAILTO:a@a.ins
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=FALSE:MAILTO:myMailId@abc.com
RECURRENCE-ID:20150511T084500Z
CLASS:PUBLIC
STATUS:CONFIRMED
DTSTART:20150511T084500Z
DTEND:20150511T091500Z
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;INTERVAL=1;COUNT=5
LOCATION:conference-room
TRANSP:OPAQUE
SEQUENCE:2
UID:tlc6006OJ52003
DTSTAMP:20150511T084500Z
ACTION:DISPLAY
DESCRIPTION:sample
SUMMARY:testing
PRIORITY:5
BEGIN:VALARM
TRIGGER:-PT15M
REPEAT:3
DURATION:PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

但是我的日历没有更新到新的时间。它仍然显示我的Outlook日历中的旧详细信息。我应该如何处理RECURRENCE-ID财产?我觉得这是在创造问题。 UID对于两次会议都是相同的。我也增加了SEQUENCE。我应该处理其他事吗?

2 个答案:

答案 0 :(得分:2)

您不能在同一个VEVENT组件中同时拥有RECURRENCE-ID和RRULE。

如果您想要构建的是一个简单的每周定期会议,那么只需删除RECURRENCE-ID属性。

另一个问题是您的DTSTAMP属性与DTSTART对齐。因此,在第二个事件中,它早于第一个事件。 DTSTAMP属性应反映构建和发送VEVENT的日期和时间。因此,如果您使用新信息更新活动,则DTSTAMP应该在初始时间之后。

只有在异常的定期会议中(例如,第三个实例具有不同的位置),才应使用RECURRENCE-ID。 http://tools.ietf.org/html/rfc5546#section-4.4.8提供了很好的例子。

答案 1 :(得分:0)

在Outlook中,主和异常的UID是不同的,但后者来自前者。

尝试将修改后的定期约会保存为Outlook中的ICS文件,以查看Outlook的功能。