我使用的DDal ical library效果很好,但我刚才意识到我想看看如何将事件表示为不在办公室而非忙碌(因此在Microsoft Outlook中加载时显示不同
我看到名为listed on this microsoft site的属性:
这是否可以在DDay ical库中设置,因为我在文档中没有看到任何内容?
答案 0 :(得分:4)
如果您在RFC 2445中描述了忙/闲组件,那么它尚未基于DDay.iCal Compliance with RFC 2445列表实现。
答案 1 :(得分:1)
(Don't use dday.ical;使用ical.net。它包含许多性能增强和错误修正。)
任何带有X-
前缀的内容都意味着它是特定于供应商的。没有标准的说法"离开办公室" vs"忙碌"。我相信Outlook也有一个概念"暂定"也进入那个领域。
icalendar spec supports四种基本状态:" FREE"," BUSY"," BUSY-UNAVAILABLE"," BUSY-TENTATIVE& #34 ;.这些都是VFREEBUSY
组件的有效选项。该规范旨在为VFREEBUSY及其子标题FREEBUSY组件提供基本上为试图计划会议的人们传递免费繁忙信息。 Outlook具有其调度助手功能;它可能会使用VFREEBUSY信息来显示其时间表。
所以这并不是你真正想要的。
规范确实有categories的概念,其中一个例子是"不在办公室":
" CATEGORIES"的一些可能的英语值。物业包括: "周年纪念","任命","业务","教育"," HOLIDAY", "会议","其他","非工作时间","不在办公室", " PERSONAL"," PHONE CALL"," SICK DAY"," SPECIAL OCCASION"," TRAVEL", " VACATION&#34 ;.类别可以用任何注册语言指定。
这两个选项都不是很好,而且,IMO,又是规范不足的另一个地方。您几乎想要一个可以在VFREEBUSY
清单中指定的BUSY-OUT-OF-OFFICE状态,但规格没有它,ical.net(或之前的dday.ical)也没有
为此,如果Outlook是消耗序列化输出的东西,最好手动将X-MICROSOFT-CDO-BUSYSTATUS
属性添加到事件中:
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