Exchange Web サービス (EWS) マネージ API を使用してフォルダーのパスを指定することにより、パブリック フォルダー内のすべてのフォルダーとサブフォルダーを検索することはできますか?
2 に答える
EWS の 1 レベルの深さのフォルダー内でのみ検索できます。
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;
}
このメソッドGetTopLevelFolder
は、パブリック フォルダー ルート ("WellKnownFolderName.PublicFoldersRoot") の子である最初のフォルダー "sectionA" を取得します。
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);
}
この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);
}
私は Microsoft.Exchange.WebServices マネージ API dll を使用していることに注意してくださいhttps://yourexchangeserver/ews/services.wsdl
。. パスからフォルダーを取得するには、ExchangeService オブジェクトを作成してから、次のように記述します。
GetPublicFolderByPath(service, "subjectA\sectionB\partC\")
これが役に立ったら、賛成票を投じてください:)