4

Exchange Web サービス (EWS) マネージ API を使用してフォルダーのパスを指定することにより、パブリック フォルダー内のすべてのフォルダーとサブフォルダーを検索することはできますか?

4

2 に答える 2

10

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\")

これが役に立ったら、賛成票を投じてください:)

于 2013-03-07T16:23:26.050 に答える