EWS - Accéder à tous les calendriers partagés

EWS - Accéder à tous les calendriers partagés


Source : Stack Overflow [office365]

Par « calendriers partagés », faites-vous référence aux calendriers sous le noeud « Autres calendriers » dans Outlook ?

Si c’est le cas, ces éléments sont des NavLinks stockés dans le dossier Common Views d’une boîte aux lettres qui se trouve sous le NonIPMSubtree (racine), voir http://msdn.microsoft.com/en-us/library/ee157359(v=exchg.80).aspx. Vous pouvez utiliser EWS pour obtenir les NavLinks d’une boîte aux lettres et utiliser la propriété étendue PidTagWlinkAddressBookEID pour obtenir l’adresse X500 de la boîte aux lettres à laquelle ces liens font référence, puis utiliser Resolve Name pour résoudre cela en adresse SMTP. Ensuite, il vous suffit de vous lier à ce dossier, par exemple :

     static Dictionary<string, Folder> GetSharedCalendarFolders(ExchangeService service, String mbMailboxname)
    {
        Dictionary<String, Folder> rtList = new System.Collections.Generic.Dictionary<string, Folder>();

        FolderId rfRootFolderid = new FolderId(WellKnownFolderName.Root, mbMailboxname);
        FolderView fvFolderView = new FolderView(1000);
        SearchFilter sfSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Common Views");
        FindFoldersResults ffoldres = service.FindFolders(rfRootFolderid, sfSearchFilter, fvFolderView);
        if (ffoldres.Folders.Count == 1)
        {

            PropertySet psPropset = new PropertySet(BasePropertySet.FirstClassProperties);
            ExtendedPropertyDefinition PidTagWlinkAddressBookEID = new ExtendedPropertyDefinition(0x6854, MapiPropertyType.Binary);
            ExtendedPropertyDefinition PidTagWlinkGroupName = new ExtendedPropertyDefinition(0x6851, MapiPropertyType.String);

            psPropset.Add(PidTagWlinkAddressBookEID);
            ItemView iv = new ItemView(1000);
            iv.PropertySet = psPropset;
            iv.Traversal = ItemTraversal.Associated;

            SearchFilter cntSearch = new SearchFilter.IsEqualTo(PidTagWlinkGroupName, "Other Calendars");
            // Can also find this using PidTagWlinkType = wblSharedFolder


*(Réponse tronquée)*