2017-08-29 1 views
0

Je réplique à partir de EWS en utilisant .SyncFolderItems. Cependant, cela n'inclut pas les éléments virtuels issus de séries récurrentes. Donc, je veux en plus rendre une vue de calendrier pour une gamme spécifique pour obtenir tous ces éléments virtuels.EWS Managed API 2.0 - Rendu CalendarView incluant tous les rendez-vous récurrents

si j'utilise

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

ne EWS retourne tous les rendez-vous dans cette gamme, y compris les rendez-vous virtuels de la série récurrente? Ou dois-je aller à la dure décrit here et énumérer manuellement à tous les articles?

Répondre

0

Pour ceux qui rencontreront la même situation. J'ai essayé et j'ai déjà réussi à rendre les deux types de rendez-vous.

L'affichage du calendrier de l'API EWS rend automatiquement une série récurrente pour vous.

La partie intéressante est comment définir une approche qui permet de répliquer et également mettre à jour votre base de données dans le cas où la série est supprimée.

  1. Synchronisez vos rendez-vous à l'aide SyncFolderItems
  2. magasin AppointmentType (Simple, ReccuringMaster, Présence, Exception) dans votre base de données.
  3. Magasin Id.UniqueId pour chaque rendez-vous dans votre base de données
  4. magasin cleanGlobalObjectId aussi bien! Comment obtenir:

    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. Pour supprimer tous les rendez-vous dans votre base de données, vous pouvez utiliser syncId vous en 3. pour les attraper tous. Exemple: Si le RecurringMaster est supprimé par l'utilisateur. Supprimez toutes les lignes qui s'y réfèrent. Une fois que vous avez synchronisé les rendez-vous, vous pouvez afficher une vue à partir d'une plage spécifique pour répliquer ces rendez-vous virtuels dans votre base de données. L'approche la plus simple est d'enlever tout par syncId et d'insérer tout à nouveau.

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

Hope this helps.