2011-02-10 110 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條目不理解該標準或未能正確實施。