2015-05-04 1 views
0

Я создал повторяющуюся встречу со следующими подробностями.не удалось обновить повторяющееся собрание программно в Java

BEGIN:VCALENDAR 
PRODID:-//XYZ//EN 
VERSION:2.0 
METHOD:REQUEST 
BEGIN:VEVENT 
ORGANIZER:MAILTO:[email protected] 
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=FALSE:MAILTO:[email protected] 
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:[email protected] 
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=FALSE:MAILTO:[email protected] 
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

У вас не может быть ID RECURRENCE и RRULE в одном компоненте VEVENT.

Если то, что вы хотите построить, является простой еженедельной повторяющейся встречей, то просто удалите свойство RECURRENCE-ID.

Другая проблема заключается в том, что ваше свойство DTSTAMP выровнено с вашим DTSTART. Следовательно, во втором случае он раньше, чем в первом. Свойство DTSTAMP должно отражать дату и время создания и отправки VEVENT. Поэтому, если вы обновляете свое событие с новой информацией, DTSTAMP должен быть в последний раз, чем исходный.

Вы должны использовать RECURRENCE-ID только в том случае, если у вас есть повторяющаяся встреча с исключением (например, третий экземпляр имеет другое местоположение). Хороший пример доступен по адресу http://tools.ietf.org/html/rfc5546#section-4.4.8.

+0

спасибо. Понимают, как работает RECURRENCE-ID. :) –

0

В Outlook UID для мастера и исключения отличаются друг от друга, но последний является производным от первого.

Попробуйте сохранить измененную повторяющуюся встречу как файл ICS в Outlook, чтобы узнать, что делает Outlook.

+0

Пробовал, как вы и предполагали. Outlook изменяет время и показывает обновленное время в календаре. Но почему же такое поведение наблюдается при программировании? –

+0

Вы открыли файл ICS, созданный Outlook в блокноте, и сравните его с тем, что производит ваш код? –