Мне нужно найти имя папки «Архивировано», которое будет на уровне родителя, а не подпапкой, если папка «Архивировано» является подпапкой, я не хочу, чтобы это возвращалось в результирующем наборе. Это то, что я закодировал, но это также возвращает вспомогательные папки.Обмен веб-службой Поиск для имени пользовательской папки
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;
Благодаря Глен, я пытался ваше решение, я получаю 1 результат для «Архивированные», даже Тхо I имеют 3 «архивных» папки, 2 - подпапки. Теперь есть свойство, которое я могу проверить в одной папке, которую я получаю в результате, является только папкой родителя. – Lucky
Я отредактировал мой вопрос, добавил изображение идентификатора папки, идентификатор папки дочерней папки и родительской папки, что такое идентификатор папки родителя, который является общим для всех папок, я думал, если я могу сравнить этот идентификатор родительской папки с архивной папкой Parent id папки. Если Archived является подпапкой, идентификатор папки родителя не будет соответствовать. Или есть другое свойство, которое я могу проверить. Спасибо. – Lucky
Если папка, которую вы хотите получить, находится на уровне корня, то просто использование обхода мелкой шерсти - лучший метод, как я опубликовал. У вас не может быть двух папок с одним и тем же именем на одном уровне с папками, например, у вас может быть два имени архива на уровне MsgfolderRoot. здесь нет общего родителя FolderId, потому что папка почтового ящика - это иерархия, которая думает о Treeview. Родительская папка имеет значение только в том случае, если папка, которую вы хотите получить, является вложенной папкой чего-то еще, например, папки «Входящие» или пользовательской папки, но это не похоже на вас. –