【问题标题】:ICalendar and event updates not working in OutlookICalendar 和事件更新在 Outlook 中不起作用
【发布时间】:2008-09-05 09:14:03
【问题描述】:

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

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

如何让它们为 Outlook 工作?

谢谢

汤姆

【问题讨论】:

  • 它是否[验证]?如果是这样,您可以发布一个示例吗?
  • link - 有用的在线验证器
  • 如果尚未使用 METHOD:PUBLISH 添加项目,METHOD:REQUEST 将在 Outlook 2016 中生成臭名昭著的“尝试的操作失败。找不到对象”。这在 Outlook 2007 中不会发生。在 Outlook 2007 中,将在日历中搜索所请求的项目 - 如果未找到,只需将该项目添加为新项目。不知道为什么删除了 Outlook 2007 的逻辑行为...
  • icalendar.org/validator.html 仍然有效的在线验证器..

标签: language-agnostic icalendar rfc2445 rfc5545


【解决方案1】:

我继续做一些测试,现在已经设法让 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

取消示例;

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

【讨论】:

  • 我很快就会遇到同样的情况。我猜这节省了我的时间。 :-D 谢谢!
  • 我发现(很难)这在 Apple iCal 中不起作用,除非您指定参加者(在 VEVENT 块内),在两个活动中都相同:*** ATTENDEE;CN=" John Doe";PARTSTAT=ACCEPTED:mailt o:john@doe.com *** 没有它,iCal 什么也做不了。有了它,它会删除事件并提供删除它的选项。
  • 我要补充一点,iOS 邮件/日历应用程序似乎无法正确处理事件更新,除非初始 ical 事件中的 SEQUENCE 属性值为 0(我的从1 开始,后续更新作为新事件添加)。
【解决方案2】:

我抓住了提问者汤姆·卡特。他有一个工作示例,请求后取消。我错了,我的 METHOD 应该在我的 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

我所做的只是添加请求方法(在正确的位置!)和一个组织者。

【讨论】:

  • 原始和更新没有显着差异。复制/粘贴错误?
  • DTSTART 时间不同。关键是在每一个中都以正确的顺序拥有所有正确的东西。它们最终看起来几乎一样。
  • @AyyappanSekar,您最后是否可以使用 Google 日历?
  • @Anatoly: 否 :( 我的问题仍未解决。
【解决方案3】:

我正在使用 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

【讨论】:

  • 我遇到了同样的行为。对于 Outlook 2003(尚未测试 2007),以下是更新事件的最低要求:(a) ics 中的单个事件 (b) METHOD 必须是 REQUEST (c) UID 必须相等 (d) SEQUENCE 必须存在, 和 >= 前一个序列号 (e) 通过双击事件导入到 Outlook 中
【解决方案4】:

将此添加到您的 ICS 文件中

X-WR-RELCALID:MyCal123   

其中 MyCal123 是您日历的唯一标识符。

通过将此行添加到 ICS 文件,整个日历都会得到更新(在 Outlook 中出现提示后)。您甚至不需要更改 DTSTAMP 或 SEQUENCE 或 ORGANIZER 并且 METHOD:PUBLISH 适合更新。只需更新活动详情,双击 ICS,日历就会更新。请注意,如果您已经发布了日历并提供了一个供人们查看的 URL,这也可以正常工作。他们只需要在大约 2 分钟后点击刷新,他们也会得到更新。

感谢 David Bjørnhart 指出这一点:ICal import creates new calendar When Open the ics file

【讨论】:

  • 如何获得日历的唯一标识符?
【解决方案5】:

我正在使用 Entourage,因此这可能与您看到的行为不完全匹配,但我希望它会有所帮助。

使用您回复中的 iCalendar,Entourage 甚至不会导入数据。使用已知良好的文件,我将其导入,然后成功更新。比较这两个文件,唯一的结构差异如下:

  • 我的 known-good 没有 VERSION 元素
  • 我的 known-good 没有 PRODID 元素
  • 我的 known-good 没有 STATUS 元素
  • 我的 known-good 没有 SEQUENCE 元素

由于 Microsoft 对开放标准的支持往往滞后,我建议尝试不使用 VERSION 信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多