我正在生成ICalendar(.ics)文件.
使用UID和SEQUENCE字段,我可以更新Google日历和Windows日历中的现有事件,但不能更新 MS Outlook 2007中的现有事件- 它只会创建第二个事件
如何让他们为Outlook工作?
谢谢
汤姆
我需要允许用户下载具有多个会议日期的活动.为此,我创建了一个要下载的内存流,生成一个.ics文件.例如:
BEGIN:VCALENDAR PRODID:-//Company//Product//EN VERSION:2.0 METHOD:PUBLISH BEGIN:VEVENT SUMMARY:Subject of Event LOCATION:Location of Event UID:1227559810-8527e2c-20847@domain.com DESCRIPTION:Some description DTEND:20081101T200000Z DTSTART:20081101T200000Z PRIORITY:3 END:VEVENT BEGIN:VEVENT ... END:VEVENT END:VCALENDAR
如果我只在此文件中包含一个VEVENT,它会将其保存到我现有的Outlook日历中.但是,当我有多个VEVENT时,它想要将其作为新日历打开并将其存档在"其他日历"下.
有没有办法(不使用文件 - 从Outlook中导入)指定日历应在打开时自动导入现有日历?
更新:澄清一下,每个VEVENT都与一个"约会"有关.然而,可能存在或可能不存在重复模式.
-麦克风
我有一个ICS文件.它验证.它看起来像这样:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
BEGIN:VEVENT
UID:FRICAL201
SEQUENCE:0
DTSTAMP:20081108T151809Z
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)
我双击它,它完全进入Outlook 2007.然后,我双击另一个看起来像这样的ICS文件:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//WA//FRWEB//EN
BEGIN:VEVENT
METHOD:REQUEST
UID:FRICAL201
SEQUENCE:1
DTSTAMP:20081108T161809Z
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)
正如在rfc中所解释的那样,UID是相同的,序列号是一个更大的,所以我希望outlook更新我以前的事件条目,但它所做的只是插入第二个.
如何制定ICS文件以便Outlook知道更新事件?我在上面引用的主题中的原始海报说他得到它以METHOD和ORGANIZER回应但是根据我的经验,METHOD没有效果,并且ORGANIZER导致不希望的行为,Outlook希望将事件通过电子邮件发送给某人.我只是想让它更新日历.
我希望能够创建一个包含多个事件的ICS文件,用户可以在其默认的 Exchange日历中导入这些事件.我需要支持Outlook桌面客户端,Office 365 Web界面和Apple iPhone Mail/Calendar.
请注意,只有包含多个事件的ICS文件才会出现此问题.单事件ICS按预期工作.
以下多事件ICS文件:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//bobbin v0.1//NONSGML iCal Writer//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20180327T080000Z
DTEND:20180327T110000Z
DTSTAMP:20091130T213238Z
UID:1285935469767a7c7c1a9b3f0df8003a@yourserver.com
CREATED:20091130T213238Z
DESCRIPTION:Example event 1
LAST-MODIFIED:20091130T213238Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Example event 1
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20180328T120000Z
DTEND:20180328T130000Z
DTSTAMP:20091130T213238Z
UID:1285935469767a7c7c1a9b3f0df8003b@yourserver.com
CREATED:20091130T213238Z
DESCRIPTION:Example event 2
LAST-MODIFIED:20091130T213238Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Example event 2
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)
在Office 365 Web界面和Apple iPhone Mail/Calendar中正常工作.但是,当它在Outlook 2016中导入时,它会创建一个新的"无标题"日历并将事件放入其中而不是默认用户日历.
这似乎是之前在SO上引用的一个已知问题:
答案的范围从"它无法完成"到相反的范围.
第一个链接中的一个帖子提到X-WR-CALNAME从ICS 中删除 修复了该问题.我从未在ICS开始这样做过.
同一页面上的另一篇文章提到添加X-WR-RELCALID:XXXXXX修复它.我试过把它放入其中并没有任何区别.我不确定X-WR-RELCALID的值是否应设置为特定的值 - 我只是将其设置为某个GUID.
如果有人成功解决了这个问题 - 您是否可以发布ICS示例以及它使用的Outlook版本?
我试图在Outlook 2007中创建,更新和删除事件(但最好是它适用于所有版本).创建和删除事件工作正常.我跟踪了几个 线程,但由于某种原因,更新操作失败了.
当我双击ICS文件时,Outlook会打开一个窗口,我唯一的选择是删除.但它要删除的事件不是旧事件,而是新事件(即使它尚未创建).所以当我点击删除时,旧事件仍然在这里.
UID是相同的,序列已增加1,DTSTAMP更新.
第一项活动:
BEGIN:VCALENDAR
PRODID:-//Blatant Media Corporation//Absorb LMS//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
CLASS:PUBLIC
DTSTART;VALUE=DATE-TIME:20101111T13000000Z
DTEND;VALUE=DATE-TIME:20101111T14000000Z
UID:AbsorbClass150180
DESCRIPTION:A nov session for demoing only\n\nVenue:\nBoardroom 123\n\nInstructor:\nMike Owens\n\nCourse Description:\nInstructor Led Training (ILT) topic: First Aid\n\n------------------\nAbsorb Anywhere\nhttp://www.absorbtraining.com
LOCATION:Boardroom 123
SUMMARY:First Aid: Nov
DTSTAMP:20101107T15353400Z
LAST-MODIFIED:20101107T15353400Z
STATUS:CONFIRMED
SEQUENCE:0
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)
更新的活动:
BEGIN:VCALENDAR
PRODID:-//Blatant Media Corporation//Absorb LMS//EN
VERSION:2.0
METHOd:REQUEST
BEGIN:VEVENT
CLASS:PUBLIC
DTSTART;VALUE=DATE-TIME:20101111T15000000Z
DTEND;VALUE=DATE-TIME:20101111T16000000Z
UID:AbsorbClass150180
DESCRIPTION:A nov session for demoing only\n\nVenue:\nBoardroom 123\n\nInstructor:\nMike Owens\n\nCourse Description:\nInstructor Led Training (ILT) topic: First Aid\n\n------------------\nAbsorb Anywhere\nhttp://www.absorbtraining.com
LOCATION:Boardroom 123
SUMMARY:First Aid: …Run Code Online (Sandbox Code Playgroud)