Exchange Web 服务搜索自定义文件夹名称
Exchange Web Service Search for Custom folder name
我需要找到名为 "Archived" 的文件夹,该文件夹位于父级,而不是子文件夹。如果 "Archived" 文件夹是一个子文件夹,我不希望它在结果集中出现 return。这是我编写的代码,但这 return 也是子文件夹。
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) {
System.out.println(folder.getDisplayName());
// look for the desired folder name
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();
} else {
// 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;
图像转录:
Folder Name - Archived
Folder Id - AAMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMmI4M2ZkNzVhMgAuAAAAAAAoHfw6vz/jR685bS6+CozVAQBBPVBF5/AsS73+rEIOWaRMAAARBHT4AAA=
Child Folder Count - 1
Parent Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDAAAAA==
------------------------------------------------------------------------------------------
Folder Name - Inbox
Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDAAAAA==
Child Folder Count - 0
Parent Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBCAAAAA==
------------------------------------------------------------------------------------------
Folder Name - Calendar
Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDQAAAA==
Child Folder Count - 0
Parent Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDAAAAA==
------------------------------------------------------------------------------------------
Folder Name - Contacts
Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDgAAAA==
Child Folder Count - 7
Parent Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDAAAAA==
I need to find the folder name "Archived" which will be at the Parent level
如果是这种情况,您不应该使用深度遍历,因为这将 return 层次结构中的所有文件夹,而不仅仅是顶层的文件夹。我还建议您使用 SearchFilter
,这样它只是 return 您想要的文件夹,这将简化您的代码,例如:
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, "user@domain.com");
FindFoldersResults folderSearchResults = service.FindFolders(SearchRoot, fsFolderSearch, fvFolderView);
if (folderSearchResults.Folders.Count == 1)
{
Console.WriteLine(folderSearchResults.Folders[0].DisplayName);
}
我需要找到名为 "Archived" 的文件夹,该文件夹位于父级,而不是子文件夹。如果 "Archived" 文件夹是一个子文件夹,我不希望它在结果集中出现 return。这是我编写的代码,但这 return 也是子文件夹。
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) {
System.out.println(folder.getDisplayName());
// look for the desired folder name
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();
} else {
// 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;
图像转录:
Folder Name - Archived
Folder Id - AAMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMmI4M2ZkNzVhMgAuAAAAAAAoHfw6vz/jR685bS6+CozVAQBBPVBF5/AsS73+rEIOWaRMAAARBHT4AAA=
Child Folder Count - 1
Parent Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDAAAAA==
------------------------------------------------------------------------------------------
Folder Name - Inbox
Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDAAAAA==
Child Folder Count - 0
Parent Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBCAAAAA==
------------------------------------------------------------------------------------------
Folder Name - Calendar
Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDQAAAA==
Child Folder Count - 0
Parent Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDAAAAA==
------------------------------------------------------------------------------------------
Folder Name - Contacts
Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDgAAAA==
Child Folder Count - 7
Parent Folder Id - AQMkADJlZDRmYmRiLWUzMmEtNGMzOC1hMWQ4LWUyMgBiODNmZDc1YTIALgAAAygd/Dq/P+NHrzltLr4KjNUBAEE9UEXn8CxLv6sQg5ZpEwAAAIBDAAAAA==
I need to find the folder name "Archived" which will be at the Parent level
如果是这种情况,您不应该使用深度遍历,因为这将 return 层次结构中的所有文件夹,而不仅仅是顶层的文件夹。我还建议您使用 SearchFilter
,这样它只是 return 您想要的文件夹,这将简化您的代码,例如:
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, "user@domain.com");
FindFoldersResults folderSearchResults = service.FindFolders(SearchRoot, fsFolderSearch, fvFolderView);
if (folderSearchResults.Folders.Count == 1)
{
Console.WriteLine(folderSearchResults.Folders[0].DisplayName);
}