我向 Outlook 发送了一条 vCalendar 消息,这会在 Outlook 日历中产生一个新事件。如何设置“显示为”字段?(空闲/忙碌/暂定/不在办公室)
7 回答
I saw this line in the .ics file created by Outlook 2010
X-MICROSOFT-CDO-BUSYSTATUS:FREE
so it looks like Microsoft has "extended" the vcal spec to suit their purposes. I can confirm that adding that line does work when a feed is viewed in Outlook and seems to cause no harm when consumed by the iPhone's calendar app.
事实证明,在标准中有一个地方,肖恩错过了:
4.2.9 忙/闲时间类型
参数名称:FBTYPE
目的:指定空闲或忙碌时间类型。
格式定义:属性参数由以下符号定义:
fbtypeparam = "FBTYPE" "=" ("FREE" / "BUSY" / "BUSY-UNAVAILABLE" / "BUSY-TENTATIVE" / x-name ; Some experimental iCalendar data type. / iana-token) ; Some other IANA registered iCalendar data type.
说明:该参数指定空闲或忙碌时间类型。FREE值表示该时间间隔可用于调度。值 BUSY 表示时间间隔很忙,因为已为该间隔安排了一个或多个事件。BUSY-UNAVAILABLE值
表示时间间隔很忙,无法安排时间间隔。BUSY-TENTATIVE 值表示时间间隔很忙,因为已经
为该间隔暂时安排了一个或多个事件。如果未在
允许此参数的属性上指定,则默认值为 BUSY。示例:以下是该参数在 FREEBUSY 属性上的示例。
FREEBUSY;FBTYPE=BUSY:19980415T133000Z/19980415T170000Z
X-MICROSOFT-CDO-BUSYSTATUS:OOF
标记 Outlook 的“不在办公室”日历
您指的是哪个状态字段?您的意思是在回复会议请求或发送有关会议的信息时?
无论哪种方式,答案都在 vCalendar 标准文档中。我认为您的意思是 STATUS 字段。维基百科有一个这个领域的例子:
BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
CATEGORIES:MEETING
STATUS:TENTATIVE
DTSTART:19960401T033000Z
DTEND:19960401T043000Z
SUMMARY:Your Proposal Review
DESCRIPTION:Steve and John to review newest proposal material
CLASS:PRIVATE
END:VEVENT
END:VCALENDAR
http://en.wikipedia.org/wiki/VCalendar#vCalendar_1.0
格式的标准文档是:http ://www.ietf.org/rfc/rfc2445.txt
您也可以尝试在 Outlook 中创建事件,将其保存为 vCard,然后在记事本中打开 vCard。这将向您展示 Outlook 如何保存信息。
该文档使我相信您只能设置忙碌或暂定状态:
4.8.1.11 状态
属性名称:状态
用途:此属性定义
日历组件的整体状态或确认。值类型:文本
属性参数:可以在此属性上指定非标准属性参数。一致性:可以在“VEVENT”、“VTODO”或
“VJOURNAL”日历组件中指定此属性。描述:在组计划日历组件中,“组织者”使用该属性
向
“与会者”提供事件确认。例如,在“VEVENT”日历组件中,“组织者”可以指示会议是暂定的、确认的或取消的。在“VTODO”日历组件中,“组织者”可以指示操作项需要操作、已完成、正在进行或正在处理或已被取消。在“VJOURNAL”日历组件中,“组织者”可以指示日记条目是草稿的、最终的或已被取消或删除的。格式定义:该属性由以下符号定义:
status = "STATUS" statparam] ":" statvalue CRLF statparam = *(";" xparam) statvalue = "TENTATIVE" ;Indicates event is ;tentative. / "CONFIRMED" ;Indicates event is ;definite. / "CANCELLED" ;Indicates event was ;cancelled. ;Status values for a "VEVENT"
我用python导入win32,因为这是一个叫BUSYSTATUS的属性,该值可以定义显示FREE=0,1=TENTIVE,2=BUSY的状态
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
myItem = outlook.CreateItem(1)
myItem.MeetingStatus =(1) ## this means it is an appointment
myItem.BUSYSTATUS=0 ## SHOW AS 0=FREE,1=TENTIVE,2=BUSY
不确定这些年来情况是否发生了变化,但我能够使用它自动将事物设置为暂定:
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
由于 RFC 2445 和 5545 都不支持 OOO 和 Tentative 状态,您可以使用属性 X-MICROSOFT-CDO-INTENDEDSTATUS:https://msdn.microsoft.com/en-us/library/ee203636(v=exchg. 80).aspx