SharePoint - 客户端对象模型 - 获取子文件夹项

时间:2012-02-19 15:09:35

标签: sharepoint-2010 client-object-model

每个'listItem'都包含项目,如何获取它们?我正在尝试一段时间,但只是失败了,

帮助,谢谢

camlQuery来自网上的一些测试和示例,没有帮助(有很多变化)

            ClientContext clientContext =  new ClientContext("http://xxx.xxx.com");
            List list = clientContext.Web.Lists.GetById(new Guid("{F91A0F26-2826-4B3B-AF30-ED7DE4494C7B}"));
            clientContext.Load(list);

            clientContext.ExecuteQuery();
            CamlQuery camlQuery = new CamlQuery();
            camlQuery.ViewXml = @"<queryOptions><QueryOptions><ViewAttributes Scope='RecursiveAll'/><Folder></Folder></QueryOptions></queryOptions>";
            ListItemCollection listItems = list.GetItems(camlQuery);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();

            foreach (ListItem listItem in listItems)
            {
              each lisItem has children/items , how to get them?!

            }

3 个答案:

答案 0 :(得分:10)

我找到了答案,谢谢助手...... :) Items是我创建的对象。 要获取“folderServerRelativeUrl”值,您可以从中获取它 当你从foreach上面查看文件夹时(string)listItem ["FileRef"]

  public Items GetFolderItems(string folderServerRelativeUrl, List list, ClientContext clientContext)
        {
            try
            {
                var result = new Items();  <-- my class
                var query = new CamlQuery();

                query.FolderServerRelativeUrl = folderServerRelativeUrl;

                query.ViewXml = "<View Scope=\"RecursiveAll\"> " +
                    "<Query>" +
                    "<Where>" +
                                "<Eq>" +
                                    "<FieldRef Name=\"FileDirRef\" />" +
                                    "<Value Type=\"Text\">" + folderServerRelativeUrl + "</Value>" +
                                 "</Eq>" +
                    "</Where>" +
                    "</Query>" +
                    "</View>";

                var folderItems = list.GetItems(query);
                clientContext.Load(folderItems);
                clientContext.ExecuteQuery();

                foreach (ListItem item in folderItems)
                {
                    // item[ "..." ];
                }

                return result;
            }
            catch (Exception)
            {
                return null;
            }
        }

答案 1 :(得分:3)

获取列表文件夹的所有项目的另一种方法:

camlQuery.ViewXml = @"<View Scope='RecursiveAll'>
                         <Query>
                            <Where>
                                <Eq>
                                   <FieldRef Name='FSObjType' />
                                   <Value Type='int'>0</Value>
                                 </Eq>
                             </Where>
                          </Query>
                       </View>";

答案 2 :(得分:1)

谢谢你的回答。只是为了让您知道folderServerRelativeUrl变量应该来自根Url(http://server除外)。我确实在documentcenter中有一个名为“Vendors”的列表。也就是说,siteUrl是http://server/documentcenter,列表名称是Vendors。我必须传递“/ documentcenter / Vendors / ...”作为我的folderServerRelativeUrl。但那没关系。我仍然感激你。

Stack Overflow人员,很难过,我无法在他的回答下添加评论。我不得不提交这个评论作为答案。如果可以以不同的方式完成,请帮助我。我不想编辑他的答案。

〜Sharmin