小编Bol*_*ick的帖子

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

我们正在编写一个MS Outlook插件.为了满足我们的业务逻辑,它应检查某些日期之间的所有约会.从日历中检索所有项目时遇到了一些问题.我们尝试了两种选择:

  1. Outlook API.我们使用MSDN中描述的标准逻辑 - 按[开始]对项目进行排序,设置IncludeRecurrencesTrue日历项目并在此处运行Find\Restrict查询.它在我们的测试环境中工作正常.但是,在我们客户的环境中:对于定期约会,开始和结束日期设置为"主约会"的相应日期.例如,在某个房间的日历中,我们有一个在1月创建的每周约会,如果我们试图在8月找到所有项目,我们会获得此定期约会的四个项目,但其开始和结束日期设置为1月.但Outlook在同一日历中显示正确的日期...

  2. 很糟糕,但我们还有WebDAV!我们编写一个简单的测试应用程序,并尝试使用WebDAV查询日历中的所有项目.当然,我们没有重新发明轮子,只是粘贴了文档中的代码.之前的问题已经解决,但下一个问题出现了:它不会返回大约六个月前创建的重复项目.我没有线索 - 没有限制'旧'项目的参数!

怎么了?我们缺少重要的东西吗?

技术细节:Exchange 2003,Outlook 2003-2010.坦率地说,如果我们打开缓存Exchange模式,第一个错误就会消失,但我们不能这样做.

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 …
Run Code Online (Sandbox Code Playgroud)

outlook exchange-server webdav outlook-object-model

79
推荐指数
1
解决办法
5858
查看次数