Comment obtenir tous les éléments des dossiers et des sous-dossiers de PublicFolders à l’aide de l’API gérée EWS

Comment récupérer tous les éléments des “dossiers publics” et de ses “sous-dossiers” dans Exchange Server2010 en utilisant l’API gérée ???

rootfolder = Folder.Bind(service,WellKnownFolderName.PublicFoldersRoot); rootfolder.Load(); foreach (Folder folder in rootfolder.FindFolders(new FolderView(int.MaxValue))) { FindItemsResults findResults = folder.FindItems(iv); foreach (Item item in findResults) { //get item info; } } 

“Si j’aime bien cela, je ne reçois pas les éléments présents dans les sous-dossiers de celui-ci..Les dossiers publics ne prennent pas en charge les requêtes de traversée en profondeur aussi .. Comment puis-je obtenir des éléments des sous-dossiers des dossiers publics ???”

Pour obtenir tous les dossiers, utilisez le code ci-dessous:

 public void GetAllFolders(ExchangeService service, List completeListOfFolderIds) { FolderView folderView = new FolderView(int.MaxValue); FindFoldersResults findFolderResults = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, folderView); foreach (Folder folder in findFolderResults) { completeListOfFolderIds.Add(folder); FindAllSubFolders(service, folder.Id, completeListOfFolderIds); } } private void FindAllSubFolders(ExchangeService service, FolderId parentFolderId, List completeListOfFolderIds) { //search for sub folders FolderView folderView = new FolderView(int.MaxValue); FindFoldersResults foundFolders = service.FindFolders(parentFolderId, folderView); // Add the list to the growing complete list completeListOfFolderIds.AddRange(foundFolders); // Now recurse foreach (Folder folder in foundFolders) { FindAllSubFolders(service, folder.Id, completeListOfFolderIds); } } 

Pour obtenir tous les articles:

 List completeListOfFolderIds = new List(); //Fills list with all public folders and subfolders GetAllFolders(service, completeListOfFolderIds); foreach(Folder folder in completeListOfFolderIds) { ItemView itemView = new ItemView(int.MaxValue); FindItemsResults searchResults = service.FindItems(folder.Id, itemView); //do something with item list } 

Vous devez effectuer une traversée récursive de l’arborescence des dossiers publics. Vous ne pouvez pas effectuer une traversée profonde sur des dossiers publics.

 public IEnumerable FindItemsInSubfolders(FolderId root, SearchFilter itemsFilter) { foreach (Folder folder in service.FindFolders(root, new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep })) foreach(Item item in service.FindItems(folder.Id, itemsFilter, new ItemView(int.MaxValue))) yield return item; foreach (Item item in service.FindItems(root, itemsFilter, new ItemView(int.MaxValue))) yield return item; }