2016-08-07 52 views
7

我有下面的代碼:通過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. 我實際上與我想查詢的內容混淆。這件事情,這在下面進一步描述,

因此,您已將電子郵件郵寄到房間郵箱中。每封電子郵件都會嵌入日曆,通常使用一些base64編碼。該日曆具有特定的模式 - 我們只對您在VEVENTS(即BEGIN:VEVENT和END:VEVENT)之間找到的數據感興趣。這裏的問題是有時可能有多個VEVENTS。那麼交換如何真正做到這一點?它是否貫穿所有的VEVENTS,符合標準;如果匹配成功,是否返回「電子郵件」(日曆附加/嵌入)?或者它是一些其他的機制?

因此我不確定我在上面的代碼中寫的語義。所以請告知。

回答

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); 

}