SharePoint List.getListItems Web Service以递归方式返回子文件夹内容

时间:2011-06-15 00:53:21

标签: web-services sharepoint sharepoint-2010 sharepoint-api

我从CXF调用lists.asmx webservice。 以下soap调用不会返回列表子文件夹中的文件。它返回folder1,folder2和file1.pdf

Shared Documents
  folder1
     file2.docx
     file3.pdf
  folder2
     sub-folder1
        file5.pdf
     file4.pdf
  file1.pdf

SOAP调用

POST /_vti_bin/lists.asmx HTTP/1.1 Accept-Encoding: gzip,deflate

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap1="http://schemas.microsoft.com/sharepoint/soap/">
   <soap:Header/>
   <soap:Body>
      <soap1:GetListItems>
         <soap1:listName>Shared Documents</soap1:listName>
       <queryOptions> 
        <QueryOptions> 
           <IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns>
           <ViewAttributes Scope="RecursiveAll"/>
           <DateInUtc>TRUE</DateInUtc>               
        </QueryOptions>
      </queryOptions> 
      </soap1:GetListItems>
   </soap:Body>
</soap:Envelope>

有关如何从结果中包含的folder1,folder3和sub-folder1获取文件的任何线索? 如果列表Web服务无法执行此操作,是否有替代服务/方法?

其他信息: 还有另一个Web服务SiteData (_vti_bin/sitedata.asmx)。它有一个类似的方法(getListItems)并返回所有文件只有列表名称而没有其他参数。问题是我无法弄清楚如何/在何处指定Paging参数,因为列表中没有任何queryOptions输入元素web服务。

 <soap1:strListName>?</soap1:strListName>
 <soap1:strQuery>?</soap1:strQuery>
 <soap1:strViewFields>?</soap1:strViewFields>
 <soap1:uRowLimit>?</soap1:uRowLimit>

2 个答案:

答案 0 :(得分:14)

可以使用<ViewAttributes Scope="RecursiveAll"/>元素递归获取列表内容。 我的肥皂信封中有silly个错误。 queryOptions元素没有命名空间。我修正了以下文字。

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap1="http://schemas.microsoft.com/sharepoint/soap/">
   <soap:Header/>
   <soap:Body>
      <soap1:GetListItems>
         <soap1:listName>Shared Documents</soap1:listName>
       <**soap1:**queryOptions> 
        <QueryOptions> 
           <IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns>
           <ViewAttributes Scope="RecursiveAll"/>
           <DateInUtc>TRUE</DateInUtc>               
        </QueryOptions>
      </**soap1:**queryOptions> 
      </soap1:GetListItems>
   </soap:Body>
</soap:Envelope>

顺便说一下,有一个很棒的工具,U2U CAML Builder来构建SharePoint CAML。我希望几个星期前我找到了。

答案 1 :(得分:3)

您必须递归调用服务以获取子文件夹中的所有项目。我没有选择这样做OOTB。相反,您始终可以编写自定义SharePoint Web服务来完成此任务。

  1. http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/16a2d993-2f5e-4242-8e5a-451a78c064a3
  2. http://blogs.msdn.com/b/karthick/archive/2006/03/27/562245.aspx