通过ews托管api查询日历项目的正确方法?

时间:2016-08-07 12:48:32

标签: email calendar exchange-server-2010 ews-managed-api

我已获得以下代码:

var startProp = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, "DTSTART", MapiPropertyType.String);
var endProp = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, "DTEND", MapiPropertyType.String);

var cond1 = new SearchFilter.IsEqualTo(startProp, StartDate);
var cond2 = new SearchFilter.IsEqualTo(endProp, EndDate);
var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, cond1, cond2);
var items = svc.FindItems(WellKnownFolderName.Calendar, filter, view);

我正在尝试在交换室邮箱上运行此查询。 (然而,这在上面的代码中并不明显)。它可能具有确切的开始/结束时间的预留。因此,如果有一个预订符合该标准,我应该至少获得一个项目。

背景:想到会议室,人们试图阻止会议。在交换时,这只是另一个邮箱,类似于用户邮箱。因此,在成功预订时,此邮箱会收到一封包含日历详细信息的电子邮件(iCalendar格式(*.ics)。

我被困在两个不同的位置......

  1. items不要在上面的代码中返回任何内容。 TotalCount为零。也许我在api做错了。我无法理解这一点。

  2. 我实际上对我要查询的内容感到困惑。在这件事上我不理解交换决议。这将在下面进一步描述。

  3. 因此,您已通过电子邮件发送房间邮箱中的项目。每封电子邮件都嵌入了日历,通常带有一些base64编码。日历有一个特定的模式 - 我们只对您在VEVENTS之间找到的数据感兴趣(即BEGIN:VEVENT和END:VEVENT)。这里的问题是有时会有多个VEVENTS。那么交换真的如何呢?它是否贯穿所有VEVENTS,符合标准;如果它成功匹配,它是否会返回"电子邮件" (附日历/嵌入日历)?或者是其他一些机制?

    因此,我不确定上面代码中写的语义。所以请就此提出建议。

1 个答案:

答案 0 :(得分:1)

找到第一部分的答案:

static void Find(DateTime Start, DateTime End, ExchangeService svc)
{
    var filter1 = new SearchFilter.IsGreaterThanOrEqualTo(MeetingRequestSchema.Start, Start);
    var filter2 = new SearchFilter.IsLessThanOrEqualTo(MeetingRequestSchema.End, End);
    var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, filter1, filter2);
    var vw = new ItemView(99);
    var items = svc.FindItems(WellKnownFolderName.Calendar, filter, vw);

    Console.WriteLine("Count: {0}", items.TotalCount);

}