2012-02-19 103 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>"; 
相關問題