2012-02-19 44 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」の値を取得するためにあなたは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

を?? –

1

上からフォルダの上に行くとき、あなたは (string)listItem ["FileRef"]からそれを得ることができ、この偉大な答えをいただき、ありがとうございます。 folderServerRelativeUrl変数がルートURL(http://serverを除く)からのものであることを通知するだけです。私はドキュメントセンターの中に "ベンダー"という名前のリストを持っていました。つまり、siteUrlはhttp://server/documentcenterで、リスト名はVendorsです。私は "/ documentcenter/Vendors/..."をfolderServerRelativeUrlとして渡さなければなりませんでした。しかしそれはOKです。私はまだあなたに感謝しています。

私は彼の答えの下にコメントを追加することができなかったので、とても悲しいです。私は答えとしてこのコメントを提出しなければならなかった。これが別のやり方でできたら助けてください。私は彼の答えを編集したくない。

〜Sharmin

+0

faqを読んでください - それはあなたがコメントすることができるときを説明します。ヒント:あなたはただ一つの担当者がいないだけです – kleopatra

+0

@kleopatra、ヒントのためにありがとう。しかし、私はまだstackoverflowへの新しいユーザーである共通のユーザーがコメントを入力するいくつかの評判を得るために待つべきではないと考えています。これを認識していない別のユーザーが来て、私の答えを見てみましょう。 – user007

+0

@SharminJose;それはUIの問題です。 UIは、ユーザーとのインターフェースにあります。問題が発生した場合は、UIはそうする必要があります。新規ユーザーの場合は、「コメントを追加」ボタンが表示され、一度クリックすると評判が不十分である旨のメッセージが表示されます。すべてのユーザーによくある質問を読んで十分に理解するように尋ねるのは有効ですが、1万人の怒っているStackExchangeユーザーが常に「RTF」を吠えるのではなく、そこを誘導する簡単な方法があります。 @kleopatra、私はあなたについて話していません。あなたはかなり優雅でした。 – Naikrovek

3

リストフォルダのすべてのアイテムを取得する別の方法:これはサマリータスクとネストされたフォルダのために働くされていない理由

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