2

私は JavaScript を使用して SP Web サービスの GetListItems メソッドを呼び出し、次の CAML を処理しています。

    var CAML = "<Query>"
            + "<ViewAttributes Scope=\"Recursive\" />"
            + "<Where>"
            + "<Or>"
            + "<Eq>"
            + "<FieldRef Name=\"ID\"/>"
            + "<Value Type=\"Counter\">" + id + "</Value>"
            + "</Eq>"
            + "<Eq>"
            + "<FieldRef Name=\"ParentFolderId\" />"
            + "<Value Type=\"Integer\">" + id + "</Value>"
            + "</Eq>"
            + "</Or>"
            + "</Where>"
            + "</Query>";

    var fieldinfo = "<ViewFields><FieldRef Name='Title' /><FieldRef Name='Body' /><FieldRef Name='CorrectBodyToShow' /><FieldRef Name='Created' /><FieldRef Name='Author' /><FieldRef Name='Editor' /><FieldRef Name='PersonalImage' /><FieldRef Name='DiscussionLastUpdated' /></ViewFields>"

そして、トップ レベルのアイテム、ディスカッション タイプのアイテムのみが返されます。1 の ParentFolderId に関連する 2 つのメッセージ タイプ アイテムがありますが、返されません。

余談ですが、U2U ツールで CAML を実行すると、スレッド全体 (1 つのディスカッションと 2 つのメッセージ) が返されます。

4

3 に答える 3

1

再帰機能は、Web サービスのビュー オプション オブジェクトではなく、クエリ オプション オブジェクトの一部です。

于 2010-02-27T02:57:11.897 に答える
0

クエリ caml ではなく、SPQuery オブジェクトで recusion を設定する必要があるという予感があります。たとえば、次のようになります。

qry.ExpandRecurrence = true

しかし、私は間違っているかもしれません:) 一部のソートも常に機能するとは限らないことがわかりました。

于 2010-02-26T21:27:28.527 に答える
0

Scope=Recursive というプロパティを設定する必要があります。これは CAML で行いましたが、間違った場所で行いました。

オブジェクトモデルを使用している場合は、使用します

query.ViewAttributes = "Scope=\"Recursive\"";

ただし、Web サービスを使用しています。あなたの例では、ViewAttributesをQueryノードの子として配置しましたが、これは正しくありません。

GetListItemsのqueryOptions パラメータの一部である必要があります

したがって、上記のコードに加えて、

   var queryOptions = "<QueryOptions>" +
                         "<ViewAttributes Scope='Recursive' />" +
                      "</QueryOptions>";

次に、JavaScriptラッパー内で、次のように呼び出します(注-これは明らかにそのままでは機能しませんが、アイデアは得られます)

listService.GetListItems("List_Name", null,
                         CAML, fieldinfo , null, 
                         queryOptions, null);
于 2010-02-27T20:30:51.940 に答える