【问题标题】:icalendar remove an instance from recurrenceicalendar 从重复中删除实例
【发布时间】:2016-02-23 14:27:13
【问题描述】:

我正在使用 Icalendar 在用 C# 开发的门户上创建重复邀请。正文包含所涉及房间的信息。如果用户创建了一个为期 5 周的包含 3 个房间的重复周期,则会创建一个重复周期请求邀请。但是,如果用户在该重复周期中更新任何特定日期的房间信息,我会发送当天的单个邀请,但要从重复周期的单个邀请中删除该天,我必须重新创建该 5 周的单个邀请,其中包含特定日期EXDATE(排除)。有没有一种方法可以实现这一点,以避免重复 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();

【问题讨论】:

  • 我想,你应该提供更多信息。你的一些实现代码。和 ICalender 的介绍。
  • @DynamicVariable,我用我用来创建重复邀请的示例代码更新我的问题。
  • 排除日期是 ICalendar 规范中的正确方法。
  • @BradleyUffner,正确,但我面临的问题是用户更新任何特定日期的请求,然后我必须通过 EXDATE 并重新创建重复邀请和特定日期的新邀请,我必须避免娱乐重复邀请。

标签: c# icalendar


【解决方案1】:

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

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

另请参阅Recurring events, how to store them?,它提供了示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 2021-05-13
    • 2016-10-15
    • 2019-10-16
    • 2014-10-06
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多