2016-09-08 75 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的層次結構。父文件夾只在您想要獲取的文件夾是其他文件的子文件夾時才起作用,例如收件箱或用戶創建的文件夾,但聽起來不像您。 –

相關問題