2016-09-08 57 views
1

我需要找到文件夹名称“Archived”,它位于父级别,而不是SUBFOLDER,如果文件夹“Archived”是子文件夹,我不希望它返回在结果集中。这是我编码的内容,但是这也会返回子文件夹。Exchange Web Service搜索自定义文件夹名称

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分的结果为“存档”,甚至尽管我有3个“存档”文件夹,2个是子文件夹。现在有一个属性,我可以检查一个文件夹,我回来的结果是只有一个父文件夹。 – Lucky

+0

我编辑了我的问题,添加了文件夹ID,子文件夹计数和父文件夹ID的图片,这是所有文件夹通用的父文件夹ID,我在想如果我可以将此父文件夹ID与归档文件夹父母文件夹ID,如果存档是一个子文件夹,父文件夹ID将不匹配。还是有我可以检查的另一个属性。 谢谢。 – Lucky

+0

如果你想得到的文件夹在根目录层,那么只需使用浅层遍历就是我发布的最好的方法。不能在同一文件夹级别使用同一名称的两个文件夹,例如,可以在MsgfolderRoot级别存档两个文件夹名称。这里没有常见的父FolderId,因为邮箱文件夹是Treeview的层次结构。父文件夹只在您想要获取的文件夹是其他文件的子文件夹时才起作用,例如收件箱或用户创建的文件夹,但听起来不像您。 –

相关问题