2017-08-29 26 views
0

我使用.SyncFolderItems從EWS複製。但是,這不包括經常性系列中的虛擬物品。所以我想另外爲特定範圍渲染日曆視圖以獲得所有這些虛擬物品。EWS託管API 2.0 - 渲染包括所有定期約會的CalendarView

如果我使用

CalendarView cView = new CalendarView(start, end, 1000); 
FindItemsResults<Appointment> findAppointmentResults = calendar.FindAppointments(cView); 

不EWS返回所有約會在此範圍內包括重複系列虛擬的約會呢?或者,我是否必須採用描述here的艱難方式並手動枚舉所有項目?

回答

0

對於那些會遇到同樣情況的人。我試過並且已經成功地呈現了這兩種類型的約會。

EWS API日曆視圖自動爲您呈現重複系列。

有趣的部分是如何設置一種方法,以便在系列被刪除的情況下複製和更新數據庫。

  1. 同步你的約會在數據庫中使用SyncFolderItems
  2. 商店AppointmentType(單,ReccuringMaster,發生異常)。
  3. 商店Id.UniqueId在你的數據庫
  4. 商店cleanGlobalObjectId以及每個約會!如何獲得它:

    var cleanGlobalObjectId = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, 0x23, MapiPropertyType.Binary); 
    var psPropSet = new PropertySet(BasePropertySet.FirstClassProperties) { cleanGlobalObjectId }; 
    object calIdVal; 
    ewsAppointment.TryGetProperty(cleanGlobalObjectId, out calIdVal); 
    var syncId = Convert.ToBase64String((byte[])calIdVal); 
    
  5. 要刪除數據庫中的所有的約會,你可以使用syncId你在3到一網打盡。例如:如果RecurringMaster被用戶刪除。刪除引用它的所有行。

  6. 在您同步約會之後,您可以渲染特定範圍的視圖以將這些虛擬約會複製到數據庫中。最簡單的方法是通過syncId刪除全部並再次插入。

    var calendar = CalendarFolder.Bind(service, new FolderId(WellKnownFolderName.Calendar, new Mailbox(informerAccountMailbox.Mailbox)), psPropSet); 
    var cView = new CalendarView(DateTime.Now.AddDays(informerAccountMailbox.DaysBeforeNow*-1), DateTime.Now.AddDays(informerAccountMailbox.DaysFromNow), 1000); 
    var appointments = calendar.FindAppointments(cView); 
    

希望這有助於。

相關問題