ICalendar和事件更新在Outlook中不起作用

Tom*_*ter 23 language-agnostic icalendar rfc2445 rfc5545

我正在生成ICalendar(.ics)文件.

使用UID和SEQUENCE字段,我可以更新Google日历和Windows日历中的现有事件,但不能更新 MS Outlook 2007中的现有事件- 它只会创建第二个事件

如何让他们为Outlook工作?

谢谢

汤姆

Tom*_*ter 24

我继续做一些测试,现在设法让Outlook根据.cs文件更新和取消事件.

事实上,Outlook似乎对RFC 2446中定义的规则做出了回应

总之,你必须指定

METHOD:REQUESTORGANIZER:xxxxxxxx

除了UID:和SEQUENCE:

要取消,您必须指定 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
Run Code Online (Sandbox Code Playgroud)

取消示例;

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
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 8

我找到了提问者汤姆卡特.他有一个工作示例,其中包含请求,然后取消.我错的是我的方法在我的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
Run Code Online (Sandbox Code Playgroud)

更新:

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
Run Code Online (Sandbox Code Playgroud)

我所做的就是添加请求方法(在正确的位置!)和组织者.


小智 5

我正在使用 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
Run Code Online (Sandbox Code Playgroud)