无法在 Java 中以编程方式更新定期会议
unable to update a recurring meeting programatically in 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
。我应该处理其他事情吗?
在Outlook中,master和exceptions的UID是不同的,但后者是从前者派生出来的。
尝试将修改后的定期约会另存为 Outlook 中的 ICS 文件,看看 Outlook 做了什么。
您不能在同一个 VEVENT 组件中同时使用 RECURRENCE-ID 和 RRULE。
如果您想要构建的是一个简单的每周定期会议,那么只需删除 RECURRENCE-ID 属性.
另一个问题是您的 DTSTAMP 属性 与您的 DTSTART 对齐。因此,在第二个事件中,它比第一个事件早。 DTSTAMP 属性 应反映构造和发送 VEVENT 的日期和时间。因此,如果您使用新信息更新您的事件,DTSTAMP 应该比初始时间晚。
仅当您有例外的定期会议(例如,第 3 个实例有不同的位置)时,才应使用 RECURRENCE-ID。 https://www.rfc-editor.org/rfc/rfc5546#section-4.4.8 .
提供了很好的示例
我创建了一个包含以下详细信息的定期会议。
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
。我应该处理其他事情吗?
在Outlook中,master和exceptions的UID是不同的,但后者是从前者派生出来的。
尝试将修改后的定期约会另存为 Outlook 中的 ICS 文件,看看 Outlook 做了什么。
您不能在同一个 VEVENT 组件中同时使用 RECURRENCE-ID 和 RRULE。
如果您想要构建的是一个简单的每周定期会议,那么只需删除 RECURRENCE-ID 属性.
另一个问题是您的 DTSTAMP 属性 与您的 DTSTART 对齐。因此,在第二个事件中,它比第一个事件早。 DTSTAMP 属性 应反映构造和发送 VEVENT 的日期和时间。因此,如果您使用新信息更新您的事件,DTSTAMP 应该比初始时间晚。
仅当您有例外的定期会议(例如,第 3 个实例有不同的位置)时,才应使用 RECURRENCE-ID。 https://www.rfc-editor.org/rfc/rfc5546#section-4.4.8 .
提供了很好的示例