ICalendar和事件更新在Outlook中不起作用
我正在生成ICalendar(.ics)文件。
使用UID和SEQUENCE字段,我可以更新Google日历中的现有事件,而可以在Windows日历中更新,但不能在MS Outlook 2007中更新它,它只是创建了第二个事件
如何使它们在Outlook中工作?
谢谢
汤姆
解决方案
回答
我正在使用Entourage,因此这可能与我们所看到的行为不完全匹配,但我希望它能对我们有所帮助。
使用我们回复中的iCalendar,Entourage甚至不会导入数据。使用已知良好的文件,我将其导入,然后成功更新。比较这两个文件,唯一的结构差异如下:
- 我的已知商品没有
VERSION
元素 - 我的已知商品没有
PRODID
元素 - 我的已知商品没有
STATUS
元素 - 我的已知商品没有
SEQUENCE
元素
由于微软对开放标准的支持趋于落后,因此我建议我们尝试使用" VERSION"信息。
回答
我继续进行一些测试,现在设法让Outlook根据.cs文件更新和取消事件。
Outlook实际上似乎响应RFC 2446中定义的规则
总之,我们必须指定
METHOD:REQUEST
和ORGANIZER:xxxxxxxx
除了UID
:和SEQUENCE:
要取消,我们必须指定METHOD:CANCEL
请求/更新示例
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//SYFADIS//PORTAIL FORMATION//FR METHOD:REQUEST BEGIN:VEVENT UID:[email protected] SEQUENCE:5 DTSTAMP:20081106T154911Z ORGANIZER:[email protected] 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:[email protected] SEQUENCE:7 DTSTAMP:20081106T154916Z ORGANIZER:[email protected] DTSTART:20081113T164907 SUMMARY:TestTraining STATUS:CANCELLED END:VEVENT END:VCALENDAR
回答
我得到了问询者汤姆·卡特的追捧。他有一个可行的示例,其中有一个请求,随后被取消。我不对的是,我的METHOD应该在VEVENT内,而应该在外面。因此,这是一个有效的更新!
原版的:
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//WA//FRWEB//EN METHOD:REQUEST BEGIN:VEVENT UID:FRICAL201 SEQUENCE:0 DTSTAMP:20081108T151809Z ORGANIZER:[email protected] 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:[email protected] DTSTART:20081109T121300 SUMMARY:11/9/2008 12:13:00 PM TRIP FROM JFK AIRPORT (JFK) LOCATION:JFK AIRPORT (JFK) END:VEVENT END:VCALENDAR
我所做的只是添加了request方法(在正确的位置!)和一个组织器。
回答
我正在使用Outlook 2003(从阅读帖子中可以看到,2007年的行为方式相同),我们需要清楚地区分ics文件的显式文件导入和双击ics文件时的隐式导入之间的行为。 '。
在Outlook菜单上的"文件/导入和导出..."上,Outlook将加载与文件中一样多的VEVENT条目,并且不会更改任何数量的UID:,SEQUENCE:或者DTSTAMP:值会更改此值,即,如果我们更改任何数据并重新导入它,我们将获得一组重复的条目。
如果双击ics文件,它将仅处理第一个VEVENT条目。但是,它确实可以识别UID,并且如果DTSTAMP:之后(SEQUENCE可以相同,但不能更低),则会提示我们,并且它将更新日历中的事件。
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