outlook无法以Java编程方式更新定期会议
我创建了一个具有以下详细信息的定期会议
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
。我应该处理其他事情吗
# 1 楼答案
您不能在同一VEVENT组件中同时具有RECURRENCE-ID和RRULE
如果您想要构造一个简单的每周定期会议,那么只需删除RECURRENCE-ID属性
另一个问题是DTSTAMP属性与DTSTART对齐。因此,在第二个事件中,它早于第一个事件。DTSTAMP属性应反映构建和发送VEVENT的日期和时间。因此,如果您使用新信息更新事件,DTSTAMP应该比初始时间晚
只有在有定期会议时,才应使用RECURRENCE-ID,但有例外(例如,第三个实例的位置不同)。在https://www.rfc-editor.org/rfc/rfc5546#section-4.4.8上有一个很好的例子
# 2 楼答案
在Outlook中,主UID和异常UID是不同的,但后者是从前者派生出来的
尝试将修改后的定期约会保存为Outlook中的ICS文件,以查看Outlook的功能