2012-02-19 51 views
4

每个'listItem'包含项目,如何获取它们?我想了一会儿,但只有失败,SharePoint - 客户端对象模型 - 获取子文件夹项目

的帮助,感谢

的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?! 

      } 

回答

10

我找到了答案,谢谢帮手...... :) Items是我创建的对象。 得到“folderServerRelativeUrl”的价值,你可以从 (string)listItem ["FileRef"]得到它,当你走在文件夹从上面的foreach

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; 
      } 
     } 
+0

这是为什么不为摘要任务和嵌套的文件夹工作吗? – 2014-02-17 13:07:34

1

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

堆栈溢出的人,这是如此伤心,我不能在他的答案下添加评论。我不得不提交这个评论作为答案。如果这可以以不同的方式完成,请帮助我。我不想编辑他的答案。

〜Sharmin

+0

请阅读常见问题解答 - 说明何时可以发表评论。提示:你只错过了一个代表 – kleopatra 2013-01-29 17:29:23

+0

@kleopatra,谢谢你的提示。但我仍然相信,一个普通用户是一个新的用户,他不应该等待获得某些声望才能输入评论。另一位不知道这一点的用户会来看看我的答案,真正的答案在下面。 – user007 2013-01-30 17:39:23

+0

@SharminJose;这是一个UI问题。 UI在那里与用户交互;如果有问题,用户界面应该这样说。对于新用户,“添加评论”按钮应该是可见的,并且一旦点击就显示关于信誉不足的消息。要求每个用户阅读并完全理解常见问题解答是有效的,但是有一些简单的方法可以指导用户,而不是让一万个生气的StackExchange用户一直吠叫“RTF”。 @ kleopatra,我不是在谈论你;你很优雅。 – Naikrovek 2013-02-28 13:50:06

3

另一种方式来获得列表文件夹的所有项目:

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