使用DDay图书馆时,您如何表明忙碌与免费与外出?

时间:2013-11-03 21:46:21

标签: c# icalendar dday

我使用的DDal ical library效果很好,但我刚才意识到我想看看如何将事件表示为不在办公室而非忙碌(因此在Microsoft Outlook中加载时显示不同

我看到名为listed on this microsoft site的属性:

  • X-MICROSOFT-CDO-BUSYSTATUS
  • PidLidBusyStatus

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

2 个答案:

答案 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