簡體   English   中英

Exchange Web服務托管API:如何通過FindItem方法執行重復擴展?

[英]Exchange Web Services Managed API: How can I perform Recurrence Expansion through the FindItem Method?

我們目前正在使用Exchange Web服務托管API在我們的產品和Exchange之間創建同步服務。 具體來說,我們希望在用戶日歷上來回同步(按時間表)特定的約會。 作為同步的一部分,我們不一定要同步所有約會,但已經構建了一些復雜的SearchFilters以僅返回我們想要的約會。 我們的問題是,為了使用SearchFilters,我們需要使用ExchangeService.FindItems方法,但此方法僅返回重復事件的主重復。 我們的另一個選擇是使用ExchangeService.FindAppointment,這將為我們執行Recurrence Expansion,但是有一個新問題,我們只能使用開始和結束日期限制結果約會。 看看如何實現ExchangeService.FindAppointment,我們可以看到它是使用FindItems方法實現的,這讓我相信我應該能夠告訴ExchangeService.FindItems方法進行重復擴展。

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

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

搜索日歷約會的注意事項

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

對於任何發現使用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;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM