icalendar从重复中删除实例

时间:2016-02-23 14:27:14

标签: c# icalendar

我正在使用Icalendar在C#开发的门户上创建重复邀请。身体包含有关房间的信息。如果用户在5周内创建了3个房间的重复,则会创建一个重复请求的邀请。但是,如果用户更新该重复的任何特定日期的房间信息,我会在当天发送一个邀请,但要从单次重复邀请中删除该日期,我必须重新创建该5周内的特定邀请EXDATE(exlusion)。有没有办法可以实现这一点,以避免重新创建5周重复的单一邀请,并从该邀请中排除特定的一天。

我用来创建单个重复邀请的代码示例。

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();

1 个答案:

答案 0 :(得分:1)

您不必为此“例外”创建单独的事件。你只需重新发送你的REQUEST(SEQUENCE属性被一个撞击)但它将包含2个VEVENT组件:

  • 主VEVENT组件(具有RRULE,无需EXDATE)
  • 一个额外的VEVENT组件,其RECURRENCE-ID对应于您要修改的实例的DTSTART。

另见Recurring events, how to store them?,其中给出了示例的指示。