在Ical.net中为事件添加警报

时间:2017-08-27 15:04:37

标签: c# icalendar

我正在使用ical.net为我的解决方案提供Outlook互联网日历集成。

我从早上00点到凌晨00点(第二天)有几个活动。 当我向事件添加警报时,在Outlook中这些事件显示没有警报。

这是我添加警报和事件的代码。

    foreach (var taskItem in taskItems.Where(t => t.DueDate != null && t.DueDate.HasValue == true))
    {
        var hyperlink = Request.GetBaseUrl();

        hyperlink = string.Format("{0}/TaskBoard/Tasks?listId={1}", hyperlink, taskItem.ListId);
        var dueDate = new DateTime(taskItem.DueDate.Value.Ticks, DateTimeKind.Utc);
        var alarm = new Alarm()
        {
            Summary = taskItem.Title,
            Trigger = new Trigger(TimeSpan.FromMinutes(-15)),
            Action = AlarmAction.Display
        };

        var calendarEvent = new Event
        {
            Class = "PUBLIC",
            Summary = taskItem.Title,
            Created = new CalDateTime(taskItem.Created.Value),
            Description = string.Format("Open board: {0}", hyperlink),
            Start = new CalDateTime(dueDate),
            End = new CalDateTime(dueDate.AddDays(1)),
            Uid = taskItem.Id.ToString(),
            Location = taskItem.ListTitle
        };

        calendarEvent.Alarms.Add(alarm);
        calendar.Events.Add(calendarEvent);
    }

这是生成的iCal文件内容

BEGIN:VCALENDAR
PRODID:-//github.com/rianjs/ical.net//NONSGML ical.net 2.2//EN
VERSION:2.0
X-WR-CALNAME:Agile Kanban - Meine Aufgaben
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20170814T114839
DESCRIPTION:Open board: https://localhost:44300/TaskBoard/Tasks?listId=637
 90e98-cacc-4f03-992f-f3276db06dda
DTEND:20170827T220000Z
DTSTAMP:20170829T170757Z
DTSTART:20170826T220000Z
LOCATION:Room1
SEQUENCE:0
SUMMARY:Task changed
UID:1d4b10bf-7434-41d9-8dd2-311e3679b0a7
BEGIN:VALARM
ACTION:Display
SUMMARY:Task changed
TRIGGER:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR

1 个答案:

答案 0 :(得分:1)

如何将事件添加到Outlook?

如果它们作为http订阅提供,Outlook可能会故意忽略它。如果想要提前通知,这是一个真正的个人选择,因此日历客户倾向于忽略来自外部来源的警报,无论是通过邀请(请参阅Sent email with iCal to outlook with valarm reminder)还是通过公共日历订阅添加。

如果您正在执行任务的导入并且警报仍未显示,则您的iCalendar流可能存在问题,因此查看实际的iCalendar流而不是您的代码会更多是有用的。

最后,我依稀记得Outlook只处理VTODO的绝对警报(参见https://tools.ietf.org/html/rfc5545#section-3.8.6.3),但我不知道是否仍然如此。