2

我正在使用 JavaScript 调用 SP webservice 的 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>"

而且我只收到顶级项目……讨论类型项目。有 2 个消息类型项与 1 的 ParentFolderId 相关,但它们不会被返回。

顺便说一句,如果我在 U2U 工具中运行 CAML,它确实会返回整个线程……一个讨论和两个消息。

4

3 回答 3

1

递归功能是查询选项对象的一部分,而不是 Web 服务中的视图选项对象

于 2010-02-27T02:57:11.897 回答
0

我有一种预感,您需要在 SPQuery 对象中设置 recusion,而不是在查询 caml 中,例如:

qry.ExpandRecurrence = true

但我可能是错的 :) 我发现某些排序也并不总是有效。

于 2010-02-26T21:27:28.527 回答
0

您需要设置一个名为 Scope=Recursive 的属性。您已在 CAML 中执行此操作,但在错误的位置。

如果您使用的是对象模型,那么您将使用

query.ViewAttributes = "Scope=\"递归\"";

但是,您正在使用 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 回答