Вопрос

Я создаю файлы ICalendar (.ics).

Используя поля UID и SEQUENCE, я могу обновлять существующие события в Календаре Google и Календаре Windows. НО НЕТ в MS Outlook 2007 — просто создается второе событие

Как мне заставить их работать в Outlook?

Спасибо

Том

Это было полезно?

Решение

Я продолжил тестирование и теперь мне удалось заставить Outlook обновлять и отменять события на основе файла .cs.

Outlook на самом деле, кажется, реагирует на правила, определенные в RFC 2446

В общем, вам нужно указать

METHOD:REQUEST и ORGANIZER:xxxxxxxx

в дополнение к UIDSEQUENCE:

Для отмены необходимо указать METHOD:CANCEL

Пример запроса/обновления

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//SYFADIS//PORTAIL FORMATION//FR
METHOD:REQUEST
BEGIN:VEVENT
UID:TS_229377_MS_262145@syfadis.com
SEQUENCE:5
DTSTAMP:20081106T154911Z
ORGANIZER:catalog@syfadis.com
DTSTART:20081113T164907
DTEND:20081115T170000
SUMMARY:TestTraining
STATUS:CONFIRMED
END:VEVENT
END:VCALENDAR

Отменить пример;

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//SYFADIS//PORTAIL FORMATION//FR
METHOD:CANCEL
BEGIN:VEVENT
UID:TS_229377_MS_262145@syfadis.com
SEQUENCE:7
DTSTAMP:20081106T154916Z
ORGANIZER:catalog@syfadis.com
DTSTART:20081113T164907
SUMMARY:TestTraining
STATUS:CANCELLED
END:VEVENT
END:VCALENDAR

Другие советы

Я связался с Томом Картером, спрашивающим.У него был рабочий пример с запросом и последующей отменой.Я ошибся в том, что мой МЕТОД находился внутри моего VEVENT, хотя он должен был быть снаружи.Итак, вот рабочее обновление!

Оригинал:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
METHOD:REQUEST
BEGIN:VEVENT
UID:FRICAL201
SEQUENCE:0
DTSTAMP:20081108T151809Z
ORGANIZER:donotreply@test.com
DTSTART:20081109T121200
SUMMARY:11/9/2008 12:12:00 PM TRIP FROM JFK AIRPORT (JFK)
LOCATION:JFK AIRPORT (JFK)
END:VEVENT
END:VCALENDAR

Обновлять:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
METHOD:REQUEST
BEGIN:VEVENT
UID:FRICAL201
SEQUENCE:1
DTSTAMP:20081108T161809Z
ORGANIZER:donotreply@test.com
DTSTART:20081109T121300
SUMMARY:11/9/2008 12:13:00 PM TRIP FROM JFK AIRPORT (JFK)
LOCATION:JFK AIRPORT (JFK)
END:VEVENT
END:VCALENDAR

Все, что я сделал, это добавил метод запроса (в нужном месте!) и органайзер.

Я использую Outlook 2003 (судя по сообщениям, 2007 год ведет себя таким же образом), и вам необходимо четко различать поведение явного импорта файла ics и неявного импорта, когда файл ics «двойной щелчок». '.

В меню Outlook Файл/Импорт и экспорт...Outlook загрузит столько записей VEVENT, сколько есть в файле, без изменения UID:, SEQUENCE:или DTSTAMP:значения меняют это, т. е. если вы измените какие-либо данные и повторно импортируете их, вы просто получите дублирующийся набор записей.

Если вы дважды щелкните файл ics, он обработает только первую запись VEVENT.Однако он распознает UID и, если DTSTAMP:позднее (ПОСЛЕДОВАТЕЛЬНОСТЬ может быть такой же, но не ниже), вам будет предложено это событие обновить в вашем календаре.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:www.membership-services.net
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20090126T210000
DTEND:20090126T220000
SUMMARY:Avondale - Thameside Away Game vs Croydon
LOCATION:Whitgift School
DESCRIPTION:http://maps.google.co.uk/maps?f=q&hl=en&geocode=&q=CR2+6YT 
UID:AWPC_8
SEQUENCE:0
DTSTAMP:20090123T112600
END:VEVENT
BEGIN:VEVENT
DTSTART:20090202T213000
DTEND:20090202T223000
SUMMARY:Avondale - Thameside Home Game vs Orcas
LOCATION:Putney
DESCRIPTION:http://maps.google.co.uk/maps?f=q&source=s_q&hl=en&ie=UTF8&ll=51.4635,-0.2285&spn=0.005,0.009613&t=h&z=17&iwloc=lyrftr:w2t.90,0x48760f04a04b1801:0x49ebf12503a5d5a9,51.463459,-0.228674 
UID:AWPC_10
SEQUENCE:0
DTSTAMP:20090123T112600
END:VEVENT
END:VCALENDAR

добавьте это в свой файл ICS

X-WR-RELCALID:MyCal123   

где MyCal123 — уникальный идентификатор вашего календаря.

При добавлении этой строки в файл ICS обновляется весь календарь (после запроса в Outlook).Вам даже не нужно менять DTSTAMP, SEQUENCE или ORGANIZER, а METHOD:PUBLISH подойдет для обновления.Просто обновите сведения о событии, дважды щелкните ICS, и календарь обновится.Обратите внимание, что это также работает нормально, если вы опубликовали календарь и предоставили URL-адрес, чтобы люди могли его просмотреть.Им просто нужно нажать «Обновить» примерно через 2 минуты, и они также получат обновление.

Спасибо Дэвиду Бьёрнхарту за указание на это: Импорт ICal создает новый календарь. При открытии файла ics.

Я использую Entourage, поэтому это может не совсем совпадать с тем поведением, которое вы видите, но я надеюсь, что это поможет.

Используя iCalendar из вашего ответа, Entourage даже не импортировал данные.Используя заведомо исправный файл, мне удалось его импортировать, а затем успешно обновить.При сравнении двух файлов единственные структурные различия заключаются в следующем:

  • У моего известного товара нет VERSION элемент
  • У моего известного товара нет PRODID элемент
  • У моего известного товара нет STATUS элемент
  • У моего известного товара нет SEQUENCE элемент

Поскольку поддержка Microsoft открытых стандартов имеет тенденцию отставать, я бы предложил попробовать без VERSION Информация.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top