SharePoint List.getListItems WebService для рекурсивного возврата содержимого подпапок - PullRequest
10 голосов
/ 15 июня 2011

Я звоню на веб-сервис lists.asmx из CXF . Следующий вызов мыла не возвращает файлы из подпапок списка. Возвращает 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>

Есть какие-нибудь подсказки о том, как получить файлы из папки 1, папки 3 и подпапки 1, включенные в результат? Если веб-сервис Lists не может это сделать, есть ли альтернативный сервис / метод?

Дополнительная информация: Есть еще один веб-сервис, SiteData (_vti_bin/sitedata.asmx). Он имеет аналогичный метод (getListItems) и возвращает все файлы только с именем списка и без дополнительных параметров. Проблема в том, что я не мог понять, как / где указать параметр Paging, так как элемента ввода queryOptions НЕТ, как в списках, НЕТ вебсервис.

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

Ответы [ 2 ]

14 голосов
/ 15 июня 2011

Можно получить содержимое списка рекурсивно, используя <ViewAttributes Scope="RecursiveAll"/> elment. В моем мыльном конверте есть ошибка 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. Хотел бы я найти это несколько недель назад.

3 голосов
/ 15 июня 2011

Вы должны рекурсивно позвонить в службу, чтобы получить все элементы в подпапках. У меня нет возможности сделать это OOTB. Вместо этого вы всегда можете написать свой собственный веб-сервис SharePoint для достижения этой цели.

  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
...