4

我正在使用运行良好的DDal ical 库,但我刚刚意识到我想看看如何将事件指示为不在办公室与忙碌(因此在加载到 Microsoft Outlook 时显示不同

我看到这个微软网站上列出的属性叫做:

  • X-MICROSOFT-CDO-BUSYSTATUS
  • PidLidBusyStatus

这是否可以从 DDay ical 库中设置,因为我在文档中看不到任何内容?

4

2 回答 2

4

如果您有RFC 2445中描述的空闲/忙碌组件,那么根据DDay.iCal 符合 RFC 2445列表,它尚未实现。

于 2013-11-12T10:09:48.547 回答
1

不要使用 dday.ical;使用ical.net。它包含许多性能增强和错误修复。)

任何前缀X-都意味着它是特定于供应商的。没有标准的方式来表示“不在办公室”与“忙碌”。我相信 Outlook 也有一个“暂定”的概念,它也适用于该领域。

icalendar规范支持四种基本状态:“FREE”、“BUSY”、“BUSY-UNAVAILABLE”、“BUSY-TENTATIVE”。这些都是VFREEBUSY组件的有效选项。该规范旨在让 VFREEBUSY 及其子标题 FREEBUSY 组件实质上为尝试计划会议的人们传达忙/闲信息。Outlook 具有日程安排助手功能;它可能会使用 VFREEBUSY 信息来显示其时间线。

所以这不是你真正想要的。

规范确实有类别的概念,其中一个例子是“不在办公室”:

“CATEGORIES”属性的一些可能的英文值包括:“ANNIVERSARY”、“APPOINTMENT”、“BUSINESS”、“EDUCATION”、“HOLIDAY”、“MEETING”、“MISCELLANEOUS”、“NON-WORK HOURS”、“NOT IN OFFICE” ”、“个人”、“电话”、“病假”、“特殊场合”、“旅行”、“假期”。可以使用任何注册语言指定类别。

这些选项都不是很好,而且是 IMO,也是规范不足的另一个地方。您几乎想要一个可以在VFREEBUSY清单中指定的 BUSY-OUT-OF-OFFICE 状态,但规范没有它,ical.net(或之前的 dday.ical)也没有。

为此,最好X-MICROSOFT-CDO-BUSYSTATUS手动将属性添加到事件中,如果 Outlook 是消耗序列化输出的东西:

var now = DateTime.Now;
var later = now.AddHours(1);

var e = new Event
{
    DtStart = new CalDateTime(now),
    DtEnd = new CalDateTime(later),
};
e.AddProperty("X-MICROSOFT-CDO-BUSYSTATUS", "OOF"); // I think "OOF" is right per the MS documentation

var calendar = new Calendar();
calendar.Events.Add(e);

var serializer = new CalendarSerializer(new SerializationContext());
var icalString = serializer.SerializeToString(calendar);
Console.WriteLine(icalString);

这将生成:

BEGIN:VCALENDAR
PRODID:-//github.com/rianjs/ical.net//NONSGML ical.net 2.1//EN
VERSION:2.0
BEGIN:VEVENT
DTEND:20160827T162931
DTSTAMP:20160827T192931Z
DTSTART:20160827T152931
SEQUENCE:0
UID:fea526df-7f40-4585-a9de-8d422e43eebe
X-MICROSOFT-CDO-BUSYSTATUS:OOF
END:VEVENT
END:VCALENDAR
于 2016-08-27T19:33:58.463 回答