来自JavaScript的CAML从SharePoint留言板检索所有项目

来自JavaScript的CAML从SharePoint留言板检索所有项目,javascript,sharepoint,caml,messageboard,Javascript,Sharepoint,Caml,Messageboard,我正在使用JavaScript调用SP webservice的GetListItems方法,并提交以下CAML: var CAML = "<Query>" + "<ViewAttributes Scope=\"Recursive\" />" + "<Where>" + "<Or>" + "<Eq>" + "&l

我正在使用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>"
var CAML=“”
+ ""
+ ""
+ ""
+ ""
+ ""
+“”+id+“”
+ ""
+ ""
+ ""
+“”+id+“”
+ ""
+ ""
+ ""
+ "";
var fieldinfo=“”
我只收到顶级项目返回…讨论类型项目。有2个消息类型项与1的ParentFolderId相关,但不会返回


另外,如果我在U2U工具中运行CAML,它会返回整个线程…一个讨论和两条消息。

我有一个预感,您需要在SPQuery对象中设置递归,而不是在查询CAML中,例如:

qry.ExpandRecurrence = true

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

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

您需要设置一个名为Scope=recursive的属性。你在你的车里做的,但是在错误的地方

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

但是,您正在使用web服务。在您的示例中,您将视图属性作为查询节点的子节点-但这是不正确的

它应该是的查询选项参数的一部分

因此,除了上面的代码之外,您还需要

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

我想你已经了解了……一位以前的顾问创建了一个javascript包装器,我们正在调用它将CAML放入SOAP信封中,你知道在哪里设置ExpandRecurrence吗?不知道为什么需要SOAP。您是否可以在服务器上粘贴aspx而不是使用web服务?如果是这样的话,您可以在其中使用SPQuery对象。如果没有,那么你可以在js中编写递归功能。哦,这篇博文中有一条评论可能会有所帮助:认为你走错了方向-ExpandRecurrences与事件列表(如日历列表)和重复事件有关,不是文件夹,因为包装器正在将所有内容滚动到一个SOAP信封中,并将其交给web服务。我是否应该在SOAP正文中添加新的查询选项作为根级别节点?我认为是这样的。在调用.GetListItems web服务时,queryoptions是一个单独的参数,它将放在SOAP请求中的某个位置,但我以前从未处理过原始SOAP请求(VS为您处理所有管道),因此不能完全确定。您依赖的是解决方案!它在根目录下是一个单独的节点……我缺少的部分是,它们的查询选项需要“双重包装”才能像查询节点一样工作。谢谢你,瑞安!
listService.GetListItems("List_Name", null,
                         CAML, fieldinfo , null, 
                         queryOptions, null);