我正在做一个icalndar预约一代的工作;这将允许代表查看活动的网站,并单击提供的链接以将约会添加到他们的日历。
我有一个工作程序集,它将根据一组已知信息(开始日期,结束日期,标题等)生成一个格式化的输出(作为物理文件或流)。
我为日历约会生成的输出示例如下:
BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20110210T124703Z
DESCRIPTION:Anything Else\n\nHopefully some useful information would be written here\n
DTEND:20110212T100000Z
DTSTAMP:20110210T124600Z
DTSTART:20110212T090000Z
LAST-MODIFIED:20110210T124703Z
LOCATION:Dummy Location
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-us:Dummy Meeting
TRANSP:OPAQUE
UID:040000008200E00074C5B7101A82E00800000000B0D1061C57C8CB01000000000000000
010000000281117EDC1194242B64F0247C54DB401
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\n<HTML>\n<HEAD>\n<META HTTP-EQUIV="Content-Type" CONTENT="text/html\; charset=Windows-1252">\n<META NAME="Generator" CONTENT="MS Exchange Server
version 6.5.7654.12">\n<TITLE>Dummy Meeting</TITLE>\n</HEAD>\n<BODY>\n<!-
- Converted from text/plain format -->\n\n<P><FONT SIZE=2><\;h1>\;Anyt
hing Else<\;/h1>\;<\;p>\;Hopefully some useful information would b
e written here<\;/p>\;<BR>\n</FONT>\n</P>\n\n</BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-IMPORTANCE:1
END:VEVENT
END:VCALENDAR
我被问到的是;是否可以更改约会,但是下次有人请求提醒时,它会检测到他们的日历中已存在的约会并更新它而不是创建新条目?
所以我试图找出是否可以覆盖现有的日历约会。
我注意到有一个UID值,我试过保持这个值不变,但它似乎没有提供日历约会之间的链接。
日历约会上的“保存并关闭”操作是否可能生成新的UID,因此不再有链接?
我还能尝试什么?
答案 0 :(得分:1)
可以更新约会,但不能更新约会。这是重要的:
METHOD
应该是REQUEST
- PUBLISH
事件不会更新,它会一次又一次地添加。 REQUEST
会议请求的行为方式不同,甚至会在用户批准之前更新现有会议。我注意到,如果事件已经是Publish类型,则无法更新(至少据我所知)。UID
。DTSTAMP
应该大于现有的日期戳(如果您动态创建它,这应该没问题)ORGANIZER
- Outlook可能不允许人们在没有它的情况下接受会议(不是真正相关,但很重要)。我的博客中有部分总结 - Sending Meeting Requests to Outlook via ASP.NET Mail Message,虽然它没有将批准发送给组织者和时区(这非常重要,所以我已经听说的)。
另请参阅:RFC 2446 - iTIP,搜索 1.3 ITIP角色和交易
部分答案 1 :(得分:1)
可以更新PUBLISH
条目。您无需将METHOD
更改为REQUEST
(并在每RSVP=FALSE
设置ATTENDEE
)。
要让新副本替换现有副本,您需要做的就是提高SEQUENCE
值。 SEQUENCE
属性主要用于区分时间相关更改的条目版本(例如DTSTART
)。
然而,RFC 2445并不排除SEQUENCE
因任何原因(例如修正拼写错误)而受到影响。这样做会使条目的任何工作流响应无效,因为它们用于较低的SEQUENCE
值,但在PUBLISH
情况下,确实没有工作流程;一路走来。
如果您未对条目进行任何与时间相关的更改,则只需将DTSTAMP
值更改为较新的值即可。收件人会看到他们已经拥有UID
和SEQUENCE
值,但已经有DTSTAMP
,因此他们应该只更新已有的内容。
任何在PUBLISH
或SEQUENCE
更新DTSTAMP
或{{1}}时未能更新的人都不理解标准或未能正确实施。