Exchange Web服务 - 读取子文件夹

时间:2013-02-15 03:44:10

标签: c# webdav exchangewebservices

我使用Microsoft的Exchange Web Services(EWS)。

我的代码是这样的:

ExchangeService server = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

我使用此代码获取文件夹:

Folder rootfolder = Folder.Bind(server, WellKnownFolderName.MsgFolderRoot);

Exchange Server上我的文件夹的结构是:

Inbox
|
|
Folder1
|
|_Sub_Folder1
| |
| |_Sub_Sub_Folder1
|   |
|   |_Sub_Sub_Sub_Folder1
|
|_Sub_Folder2
| |
| |_Sub_Sub_Folder1
|
Folder2
|
|_Sub_Folder1
|
|_Sub_Folder2

当我使用上面提到的功能时,我只收到主要文件夹:

InboxFolder1Folder2

我希望收到SubFolders ...然后我想从SubFolders获取商品。

例如:

Folder1
|
|_Sub_Folder1
| |
| |_Sub_Sub_Folder1
|   |
|   |_Sub_Sub_Sub_Folder1 -> I want to get these items

你能帮助我并提供一些代码示例吗?我应该使用什么功能?

我试图使用:

FindFoldersResults findFoldersResults2 = folder.FindFolders(new FolderView(100));

但是,当我收到例如文件夹:InboxFolder1Folder2并且我看了ChildFolderCount时,我没有收到subfolders个。 2 - >我收到了0点数。

有什么问题?我需要从subfolders阅读这些项目。

2 个答案:

答案 0 :(得分:0)

我认为你有2个问题。 第一个:“如何获取子文件夹”,第二个“为什么ChildFolderCoun = 0”。

第二个问题的答案非常简单。您必须调用folder.Load()并提供包含FolderSchema.ChildFolderCount属性定义的属性集。

您的第一个问题的答案是,您必须在重复循环中为每个文件夹调用FindFolders()。至少我没有找到一个参数或类似的东西告诉FindFolders-Method包含所有子文件夹。

希望能帮到你......

答案 1 :(得分:0)

您正在寻找验证文件夹是否存在的方法。您可以使用以下方法。它递归搜索每个子文件夹。更改FolderView的Traversal属性以进行深度/浅层搜索。

FolderId subfolderInfo;
// Call Method
bool folderExist = isFolderExist(exchange, "Folder1", out subfolderInfo);

//Implementation 

private bool isFolderExist(ExchangeService exchange, string subFolder, out FolderId subfolderInfo)
        {
            try
            {
                FolderView view = new FolderView(100);
                view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
                view.PropertySet.Add(FolderSchema.DisplayName);
                view.Traversal = FolderTraversal.Deep;
                FindFoldersResults findFolderResults = exchange.FindFolders(WellKnownFolderName.Root, view);
                foreach (Folder folder in findFolderResults)
                {
                    if (folder.DisplayName == subFolder)
                    {                        
                        subfolderInfo = folder.Id;
                        return true;
                    }
                }
            }
            catch (Exception Ex)
            {
               ...
            }          
            subfolderInfo = null;
            return false;
        }