检索日历项目(Outlook API,WebDAV) – 奇怪的行为

我们正在写一个微软的Outlook插件,以满足我们的业务逻辑应检查所有date之间的约会,我们遇到几个问题从日历中检索所有项目。 我们尝试了2个选项:

  1. Outlook API。 我们使用MSDN中描述的标准逻辑 – 按[Start]对项目进行sorting,将IncludeRecurrences设置为True,并对日历项目运行Find \ Restrict查询(如http://msdn.microsoft.com/zh-cn/library/office/ aa220093(v = office.11​​).aspx )。 它在我们的testing环境中工作正常。 但是,在我们客户的定期约会环境中,开始和结束date被设置为“主约会”的相应date。 例如,在某个房间的日历中,我们每周都有一个在一月份创build的约会,如果我们在八月份试图find所有的项目,我们就会获得这个周期性约会的4个项目,但是他们的开始和结束date都设置为一月。 但Outlook在相同的日历中显示正确的date…

  2. 非常糟糕,但我们仍然有WebDAV! 我们编写一个简单的testing应用程序,并尝试使用WebDAV从日历中查询所有项目。 当然,我们不会重新发明轮子,只需从文档粘贴代码 – http://msdn.microsoft.com/en-us/library/exchange/aa123570(v=exchg.65).aspx 。 上一个问题解决了,但是下一个问题出现了:它不会返回创build超过大约6个月前的重复项目。 而我无法find一个线索 – 没有任何参数限制“旧”的项目!

哪里不对? 我们错过了重要的东西吗?

技术细节:Exchange 2003,Outlook 2003-2010。 坦白说,如果我们打开cachingExchange模式,第一个错误消失,但我们不能这样做。

var nameSpace = application.GetNamespace("MAPI"); var recepient = nameSpace.CreateRecipient(roomEMail); recepient.Resolve(); var calendar = nameSpace.GetSharedDefaultFolder(recepient, OlDefaultFolders.olFolderCalendar); var filter = string.Format("[Start]<'{1}' AND [End]>'{0}'", dateFrom.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture), dateTo.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture) ); var allItems = calendar.Items; allItems.Sort("[Start]"); allItems.IncludeRecurrences = true; var _item = allItems.Find(filter); while (_item != null) { AppointmentItem item = _item as AppointmentItem; if (item != null) { if (item.Subject != "some const") && (item.ResponseStatus != OlResponseStatus.olResponseDeclined) && (item.MeetingStatus != OlMeetingStatus.olMeetingReceivedAndCanceled && item.MeetingStatus != OlMeetingStatus.olMeetingCanceled)) { // here we copy item to our internal class // we need: Subject, Start, End, Organizer, Recipients, MeetingStatus, AllDayEvent, IsRecurring, RecurrentState, ResponseStatus, GlobalAppointmentID } } _item = allItems.FindNext(); } 

更新使用OutlookSpy的其他研究表明,问题不在我们的代码中 – 当cachingExchange模式closures时,API中的开始\结束date不正确。 但Outlook开发人员意识到这一点,他们以某种方式在日历中显示正确的date! 有谁知道如何?

UPDATE从Outlook的答复支持升级工程师:“基于此我可以证实,这是我们的产品中的问题”