use*_*567 4 c# api exchange-server web-services managed
是否可以通过使用Exchange Web服务(EWS)托管Api提供文件夹的路径来搜索公用文件夹中的所有文件夹和文件夹?
ono*_*012 10
您只能在EWS上的一个级别的文件夹中进行搜索,以便:
PublicFoldersRoot\subjectA\sectionB\PARTC \
我会搜索"subjectA"文件夹,然后一旦我有了FolderId,然后我会搜索"sectionB"文件夹,依此类推,直到找到我需要的东西.
该方法GetPublicFolderByPath采用路径"subjectA\sectonB\partC \"并将路径拆分为文件夹名称数组,然后递归查找每个文件夹.
public Folder GetPublicFolderByPath(ExchangeService service, String ewsFolderPath)
{
String[] folders = ewsFolderPath.Split('\');
Folder parentFolderId = null;
Folder actualFolder = null;
for (int i = 0; i < folders.Count(); i++)
{
if (0 == i)
{
parentFolderId = GetTopLevelFolder(service, folders[i]);// for first first loop public folder root is the parent
actualFolder = parentFolderId; //in case folders[] is only one long
}
else
{
actualFolder = GetFolder(service, parentFolderId.Id, folders[i]);
parentFolderId = actualFolder;
}
}
return actualFolder;
}
Run Code Online (Sandbox Code Playgroud)
该方法GetTopLevelFolder获取第一个文件夹"sectionA",它是公用文件夹root的子项"WellKnownFolderName.PublicFoldersRoot".
private Folder GetTopLevelFolder(ExchangeService service, String folderName)
{
FolderView folderView = new FolderView(int.MaxValue);
FindFoldersResults findFolderResults = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, folderView);
foreach (Folder folder in findFolderResults)
{
if (folderName.Equals(folder.DisplayName, StringComparison.InvariantCultureIgnoreCase))
{
return folder;
}
}
throw new Exception("Top Level Folder not found: " + folderName);
}
Run Code Online (Sandbox Code Playgroud)
该GetFolder方法采用父FolderId并搜索所有子文件夹以查找名称提供的匹配项,并返回您请求的子FolderId.
private Folder GetFolder(ExchangeService service, FolderId ParentFolderId, String folderName)
{
FolderView folderView = new FolderView(int.MaxValue);
FindFoldersResults findFolderResults = service.FindFolders(ParentFolderId, folderView);
foreach (Folder folder in findFolderResults)
{
if (folderName.Equals(folder.DisplayName, StringComparison.InvariantCultureIgnoreCase))
{
return folder;
}
}
throw new Exception("Folder not found: " + folderName);
}
Run Code Online (Sandbox Code Playgroud)
请注意,我使用的是Microsoft.Exchange.WebServices托管API dll,类似的想法https://yourexchangeserver/ews/services.wsdl.要从路径获取文件夹,请使用createService对象然后编写:
GetPublicFolderByPath(service, "subjectA\sectionB\partC\")
如果这对你有帮助,请向上投票:)