3

我們目前正致力於使用Exchange Web服務託管API在我們的產品和Exchange之間創建同步服務。具體而言,我們希望在用戶日曆上同步(按時間表)特定約會。作爲同步的一部分,我們不一定要同步所有的約會,但已經建立了一些複雜的SearchFilters來只返回我們想要的約會。我們的問題是,爲了使用SearchFilters,我們需要使用ExchangeService.FindItems方法,但此方法僅返回重複事件的主復現。我們的其他選擇是使用ExchangeService.FindAppointment,這將爲我們執行Recurrence Expansion,但有新問題,我們只能使用開始日期和結束日期限制結果約會。看看ExchangeService.FindAppointment是如何實現的,我們可以看到它是使用FindItems方法實現的,這使我相信我應該能夠告訴ExchangeService.FindItems方法執行循環擴展。Exchange Web Services託管API:如何通過FindItem方法執行循環擴展?

如何從交換使用複雜的SearchFilter獲取擴展約會列表?

回答

5

剛剛發現這個MSDN上: http://msdn.microsoft.com/en-us/library/hh148195(v=exchg.140).aspx

注意事項搜索日曆約會

日曆約會是搜索的一個特例。某些日曆約會(例如重複約會)可能會有例外和已刪除的事件。爲確保Exchange服務器在搜索日曆文件夾時擴展週期性約會,您需要使用日曆分頁。但是,當您使用日曆分頁時,不能使用任何其他搜索限制。這意味着,例如,如果您想在本月爲特定組織者顯示所有日曆約會,則無法創建基於組織者的搜索過濾器。相反,您可以使用CalendarView類查詢當月的所有約會,然後基於組織者過濾客戶端上的約會。以下示例顯示如何使用日曆視圖在日曆中搜索約會。

0

對於任何使用FindAppointments/CalendarView發現guxiyou解決方案的人都不切實際,我的解決方案如下。在自動同步的情況下,CalendarView尤其不方便,因爲您最好使用「上次修改」過濾器,而不是檢索所有內容並過濾客戶端,這不是非常高效。

我使用了支持過濾器的常規FindItems方法,並且在迭代約會時檢查了AppointmentType,如果是RecurrenceMaster類型,它將查找鏈接的事件並將它們添加到待同步列表中。

下面的方法來隨後得到這些約會的事件。沒有結束日期的循環模式會被忽略,因爲這會使循環無限。除非您限制同步窗口,否則必須以不同方式處理這些重複發生的情況,以便同步。

private IEnumerable<Appointment> GetRecurrentAppointments(Appointment masterAppointment) 
    { 
     Recurrence recurrence = masterAppointment.Recurrence; 

     if (recurrence == null || !recurrence.HasEnd) 
      yield break; 

     for (int i = 1; i <= recurrence.NumberOfOccurrences; i++) 
     { 
      Appointment occurrence = Appointment.BindToOccurrence(ExchangeServiceProxy, masterAppointment.Id, i); 

      yield return occurrence; 
     } 
    } 
相關問題