14

マネージ API を使用して Exchange server2010 で「パブリック フォルダー」とその「サブフォルダー」からすべてのアイテムを取得する方法

rootfolder = Folder.Bind(service,WellKnownFolderName.PublicFoldersRoot);
rootfolder.Load();                                             
foreach (Folder folder in rootfolder.FindFolders(new FolderView(int.MaxValue)))
{
FindItemsResults<Item> findResults = folder.FindItems(iv); 
 foreach (Item item in findResults)

         {
            //get item info;
         } 
}

「これが好きだと、そのサブフォルダーに存在するアイテムを取得できません..パブリック フォルダーは、深いトラバーサル クエリもサポートしていません..パブリック フォルダーのサブフォルダーからアイテムを取得するにはどうすればよいですか???」

4

4 に答える 4

47

すべてのフォルダーを取得するには、次のコードを使用します。

public void GetAllFolders(ExchangeService service, List<Folder> completeListOfFolderIds)
    {
        FolderView folderView = new FolderView(int.MaxValue);
        FindFoldersResults findFolderResults = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, folderView);
        foreach (Folder folder in findFolderResults)
        {
            completeListOfFolderIds.Add(folder);
            FindAllSubFolders(service, folder.Id, completeListOfFolderIds);
        }
    }

private void FindAllSubFolders(ExchangeService service, FolderId parentFolderId, List<Folder> completeListOfFolderIds)
    {
        //search for sub folders
        FolderView folderView = new FolderView(int.MaxValue);
        FindFoldersResults foundFolders = service.FindFolders(parentFolderId, folderView);

        // Add the list to the growing complete list
        completeListOfFolderIds.AddRange(foundFolders);

        // Now recurse
        foreach (Folder folder in foundFolders)
        {
            FindAllSubFolders(service, folder.Id, completeListOfFolderIds);
        }
    }

すべてのアイテムを取得するには:

List<Folder> completeListOfFolderIds = new List<Folder>();
//Fills list with all public folders and subfolders
GetAllFolders(service, completeListOfFolderIds);
foreach(Folder folder in completeListOfFolderIds)
{
ItemView itemView = new ItemView(int.MaxValue);
FindItemsResults<Item> searchResults = service.FindItems(folder.Id, itemView);
//do something with item list    
}

参考までに、FindFolders /FindItems は最初の 1000 個のアイテムのみを返すため、大規模な構造がある場合は、このコードを変更してそれを克服する必要があります。

于 2013-03-07T16:37:31.253 に答える
3

パブリック フォルダ ツリーの再帰的トラバーサルを実行する必要があります。パブリック フォルダーに対して深いトラバーサルを実行することはできません。

于 2012-12-17T16:10:07.283 に答える