2011-02-10 102 views
2

我正在做一些icalndar约会生成的工作;这将允许代表查看活动的网站,并单击提供的链接将约会添加到他们的日历。替换现有的Outlook日历约会

我具有基于一组已知的信息的工作组件,其将生成的ICS格式的输出(无论是作为物理文件或流)(开始日期,结束日期,标题等)。

输出我生成一个日历约会的一个例子是:

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>&lt\;h1&gt\;Anyt 
hing Else&lt\;/h1&gt\;&lt\;p&gt\;Hopefully some useful information would b 
e written here&lt\;/p&gt\;<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所以不再有联系吗?

我还能试试吗?

回答

1

它可以更新一个约会,但不是你所采取的方式。这里是非常重要的:

  • METHOD应该是REQUEST - 一个PUBLISH事件将不会更新,它会一次又一次地补充道。 REQUEST会议请求的行为会有所不同,并且即使在用户批准之前也会更新现有会议。我会注意到,如果这些事件已经是发布类型,那么它们不能被更新(至少据我所知)。
  • 您必须使用完全相同的UID
  • DTSTAMP应该比现有的日期戳大(如果你动态创建它,这应该是OK)
  • 包括ORGANIZER - Outlook可能无法让人们接受没有它的会议(不是真的有关,但重要)。

我有一个部分夏日的这在我的博客 - Sending Meeting Requests to Outlook via ASP.NET Mail Message,尽管它缺少发送批准,组织者,和时区(这是非常重要的,所以我听说)。

参见:RFC 2446 - iTIP,搜索部分1.3 ITIP的角色和业务

+0

阅读RFC文档让人混淆,因为它提到`UID`,`SEQUENCE`和`DTSTAMP`的组合应该足以在`PUBLISH`上更新,他们甚至举例说明了如何更新和`发布`是'方法'。 – 2011-02-11 13:40:38

1

它可以更新PUBLISH编辑条目。你不需要改变你的METHODREQUEST(和每ATTENDEE设置RSVP=FALSE)。

有一个新的副本替换现有的任何一个,所有你需要做的是撞击SEQUENCE值。 SEQUENCE属性主要用于区分与时间相关的某个条目的版本(例如,DTSTART)。

但是RFC 2445并不排除SEQUENCE由于任何原因(例如,修正拼写错误)而被碰撞。这样做会使条目的任何工作流程响应无效,因为它们的值较低,但在PUBLISH的情况下确实没有工作流程;它的一个方面。

如果您没有对条目进行任何时间相关的更改,那么您可以简单地将DTSTAMP值更改为新条目。收件人将看到他们已经具有UIDSEQUENCE的值,但较老的DTSTAMP,因此他们应该简单地更新它们已有的值。

任何人在SEQUENCEDTSTAMP已更新时未能更新PUBLISH ed条目不理解该标准或未能正确实施。