2016-09-08 6 views
1

Мне нужно найти имя папки «Архивировано», которое будет на уровне родителя, а не подпапкой, если папка «Архивировано» является подпапкой, я не хочу, чтобы это возвращалось в результирующем наборе. Это то, что я закодировал, но это также возвращает вспомогательные папки.Обмен веб-службой Поиск для имени пользовательской папки

HashMap<String, FolderId> folderIdList = new HashMap<String, FolderId>(); 

    FolderId readFromId = null; //Folder to read emails from- Inbox 
    FolderId moveToId = null; //Folder to move emails to after processing- Archived 

    FolderView view = new FolderView(Integer.MAX_VALUE); 

    view.setPropertySet(new PropertySet(BasePropertySet.IdOnly)); 
    view.getPropertySet().add(FolderSchema.DisplayName); 
    view.setTraversal(FolderTraversal.Deep); 

    try { 

     FindFoldersResults findFolderResults = service.findFolders(new FolderId(WellKnownFolderName.MsgFolderRoot, userMailbox) ,view); 
     //find specific folder 
     for (Folder folder : findFolderResults) { 
      // look for the desired folder name 
      System.out.println(folder.getDisplayName()); 
      if (folder.getDisplayName().equalsIgnoreCase("Inbox")) { 
       //get the id 
       readFromId = folder.getId(); 
      } 
       //add the folder id to map 
       folderIdList.put(UtilConstants.READ_FROM, folder.getId()); 

      } else if (folder.getDisplayName().equalsIgnoreCase("Archived")) { 
       //get the id 
       moveToId = folder.getId(); 
      } 
       //add the folder id to map 
       folderIdList.put(UtilConstants.MOVE_TO, folder.getId()); 
      } 

     } 
     } catch (Exception e) { 
     log.error("Error while getting the folder id's for folders "+readFrom+", "+moveTo+""+e.getMessage()); 
     throw e; 
     } 
    return folderIdList; 

enter image description here

ответ

2

Мне нужно найти имя папки «заархивированный», который будет на уровне материнской

Если это так, вы не должны быть используя глубокий обход, поскольку это вернет все папки в иерархии, а не только те, которые находятся на верхнем уровне. Я также хотел бы предложить вам использовать SearchFilter так он просто возвращает нужную папку, которая упростит ваш код, например

 String folderSearchName = "Archived"; 

     FolderView fvFolderView = new FolderView(1); 
     fvFolderView.Traversal = FolderTraversal.Shallow; 

     SearchFilter fsFolderSearch = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, folderSearchName); 

     FolderId SearchRoot = new FolderId(WellKnownFolderName.MsgFolderRoot,"[email protected]"); 

     FindFoldersResults folderSearchResults = service.FindFolders(SearchRoot, fsFolderSearch, fvFolderView); 
     if (folderSearchResults.Folders.Count == 1) 
     { 
      Console.WriteLine(folderSearchResults.Folders[0].DisplayName); 
     } 
+0

Благодаря Глен, я пытался ваше решение, я получаю 1 результат для «Архивированные», даже Тхо I имеют 3 «архивных» папки, 2 - подпапки. Теперь есть свойство, которое я могу проверить в одной папке, которую я получаю в результате, является только папкой родителя. – Lucky

+0

Я отредактировал мой вопрос, добавил изображение идентификатора папки, идентификатор папки дочерней папки и родительской папки, что такое идентификатор папки родителя, который является общим для всех папок, я думал, если я могу сравнить этот идентификатор родительской папки с архивной папкой Parent id папки. Если Archived является подпапкой, идентификатор папки родителя не будет соответствовать. Или есть другое свойство, которое я могу проверить. Спасибо. – Lucky

+0

Если папка, которую вы хотите получить, находится на уровне корня, то просто использование обхода мелкой шерсти - лучший метод, как я опубликовал. У вас не может быть двух папок с одним и тем же именем на одном уровне с папками, например, у вас может быть два имени архива на уровне MsgfolderRoot. здесь нет общего родителя FolderId, потому что папка почтового ящика - это иерархия, которая думает о Treeview. Родительская папка имеет значение только в том случае, если папка, которую вы хотите получить, является вложенной папкой чего-то еще, например, папки «Входящие» или пользовательской папки, но это не похоже на вас. –