如何从共享点列表中获取所有文件夹AND项?

时间:2011-10-31 11:16:28

标签: c# sharepoint-2010 caml

我有一个包含文件夹和项目的列表。文件夹是基于文件夹的特定内容类型,但具有属性。

文件夹可以包含子文件夹和子项。子文件夹可以包含子子文件夹等。我已经设法使用这种方式获取所有项目和文件夹:

    void TraverseList(SPList list)
    {
        Trace.WriteLine("Traversing list: " + list.Title);
        Trace.WriteLine("Base type: " + list.BaseType.ToString());
        TraverseListFolder(list.RootFolder);
    }

    void TraverseListFolder(SPFolder folder)
    {
        SPQuery qry = new SPQuery();
        qry.Folder = folder;
        Trace.WriteLine("Foldername: " + folder.Name);
        SPWeb web = null;

        try
        {
            web = folder.ParentWeb;
            SPListItemCollection ic = web.Lists[folder.ParentListId].GetItems(qry);

            foreach (SPListItem subitem in ic)
            {
                SPFieldLookupValue temp = new SPFieldLookupValue(subitem["TargetPage"].ToString());
                Trace.WriteLine("TargetPage: " + temp);
                Trace.WriteLine("ItemName: " + subitem.Name);
                if (subitem.Folder != null)
                {
                    TraverseListFolder(subitem.Folder);
                }
            }
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message);
            throw;
        }
        finally
        {
            if (web != null)
            {
                web.Dispose();
            }
        }
    }

此解决方案中的问题是我必须为每个文件夹发送一个新查询,这在列表增长时会变得不正确。有没有办法通过一次调用获得整个列表,而不会丢失文件夹/项目结构?

感谢您阅读本文!

编辑:不要求使用CAML。但是我忘记了一个限制:由于客户的限制,我无法使用网络服务。

2 个答案:

答案 0 :(得分:6)

获取根并使用

qry.ViewAttributes = "Scope='RecursiveAll'";

另请参阅:Query to get all items in a list including items in the sub folders in SharePoint

并且:http://www.ktskumar.com/blog/2009/07/retrieve-all-folders-from-list/

HTH 亚历

答案 1 :(得分:-1)

query.ViewAttributes="Scope='RecursiveAll'";