2016-02-23 62 views
0

我正在使用Icalendar在C#中開發的門戶網站上創建重複邀請。身體包含涉及房間的信息。如果用戶在5周內創建了3個房間的重複,則創建了一個重複請求邀請。但是,如果用戶在該次重複中的某個特定日期更新了房間信息,那麼我會在當天發送一個邀請,但要從單次重複邀請中刪除那一天,我必須重新創建該特定日期的5周內的單個邀請EXDATE(exlusion)。有沒有一種方法可以實現這一點,以避免5周重複的單一邀請的娛樂,並且特定的一天不包括在該邀請中。icalendar從重複中刪除實例

我正在使用的代碼示例爲重複創建單個邀請。

str.AppendLine("BEGIN:VCALENDAR"); 
str.AppendLine("PRODID:-//Team Test"); 
str.AppendLine("VERSION:2.0"); 
str.AppendLine("METHOD:REQUEST"); 
str.AppendLine("BEGIN:VEVENT"); 
str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", utcStime)); //utcStime is UTC time 
str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow)); 
str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", utcEtime));////utcEtime is UTC time 
str.AppendLine(string.Format("RRULE:FREQ=WEEKLY;COUNT=5")); 
str.AppendLine("LOCATION: "); 
str.AppendLine(string.Format("UID:{0}", "Test12345")); 
str.AppendLine(string.Format("DESCRIPTION:{0}", msg.Body)); 
str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body)); 
str.AppendLine(string.Format("SUMMARY:{0}", msg.Subject)); 
str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.Address)); 
for (int i = 0; i < msg.To.Count; i++) 
{ 
    str.AppendLine(string.Format("ATTENDEE;ROLE=REQ-PARTICIPANT;CN=\"{0}\";RSVP=TRUE:mailto:{1}", msg.To[i].DisplayName, msg.To[i].Address)); 
} 
str.AppendLine(string.Format("ATTENDEE;PARTSTAT=ACCEPTED;CN=\"{0}\":mailto:{1}", 
str.AppendLine("BEGIN:VALARM"); 
str.AppendLine("TRIGGER:-PT15M"); 
str.AppendLine("ACTION:DISPLAY"); 
str.AppendLine("DESCRIPTION:Reminder"); 
str.AppendLine("END:VALARM"); 
str.AppendLine("END:VEVENT"); 
str.AppendLine("END:VCALENDAR"); 

System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar"); 
ct.Parameters.Add("method", "REQUEST"); 
AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), ct); 
msg.AlternateViews.Add(avCal); 
sc.Send(msg); // sc is smtpclient i.e. SmtpClient sc = new SmtpClient(); 
+0

我想,你應該提供更多的信息。您的一些代碼實現。並介紹ICalender。 –

+0

@DynamicVariable,我用我使用的示例代碼更新我的問題來爲重現創建單個邀請。 – Chandikumar

+0

排除日期是在ICalendar規範中執行此操作的正確方法。 –

回答

0

您不必爲此「例外」創建單獨的事件。您只需重新發送請求(由一個撞一個SEQUENCE屬性),但將包含2個VEVENT組件:

  • 主VEVENT組件(與RRULE,無需EXDATE)
  • 額外VEVENT組件與RECURRENCE-ID對應於您要修改的實例的DTSTART。

另請參閱Recurring events, how to store them?它給出了示例的指針。