2017-08-29 14 views
0

.SyncFolderItemsを使用してEWSからレプリケートします。ただし、これには定期的なシリーズの仮想アイテムは含まれません。そこで、特定の範囲のカレンダービューをレンダリングして、これらの仮想アイテムもすべて取得する必要があります。EWS Managed API 2.0 - すべての定期的な予定を含むCalendarViewをレンダリングする

私は

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

を使用する場合EWSは、定期的なシリーズから仮想の予定を含めて、この範囲内のすべての予定を返していますか?または、私はhereと記載された厳しい方法を実行し、手動ですべてのアイテムに列挙しなければならないのですか?

答えて

0

同じ状況に遭遇する人のために。私は両方のタイプの予定をレンダリングしようとしました。

EWS APIのカレンダービューでは、自動的に繰り返しシリーズがレンダリングされます。

興味深いのは、シリーズが削除された場合にデータベースを複製して更新する方法を設定する方法です。データベースにSyncFolderItems

  • ストアAppointmentType(シングル、ReccuringMaster、発生、例外)を使用して

    1. 同期の予定。
    2. 、データベース内の各予定の
    3. ストアId.UniqueId
    4. ストアにもcleanGlobalObjectId!それを取得する方法:あなたはそれらすべてをキャッチするために3で取得syncIdを使用することができます

      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. は、データベース内のすべての予定を削除します。例: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); 
      

    この情報がお役に立てば幸いです。

  • 関連する問題