2011-06-15 12 views
10

Llamo al servicio web lists.asmx desde CXF. La siguiente llamada no devuelve archivos de sub carpetas de la lista. Devuelve carpeta1, carpeta2 y file1.pdfSharePoint List.getListItems WebService para devolver los contenidos de la subcarpeta, recursivamente

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

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

Alguna pista sobre cómo obtener archivos desde carpeta1, carpeta3 y sub-carpeta1 incluidos en el resultado ?. Si el servicio web de listas no puede hacerlo, ¿hay algún servicio/método alternativo?

Información adicional: Hay otro webservice, SiteData (_vti_bin/sitedata.asmx). Tiene un método similar (getListItems) y devuelve todos los archivos con solo el nombre de la lista y sin parámetros adicionales. El problema es que no pude averiguar cómo/dónde especificar el parámetro Paging, ya que NO hay elemento de entrada queryOptions como en las listas servicio web.

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

Respuesta

13

Es posible obtener los contenidos de la lista de forma recursiva, utilizando <ViewAttributes Scope="RecursiveAll"/> Elment. Hay un error silly en mi sobre de jabón. El elemento queryOptions no tiene espacio de nombres. Lo arreglé en el siguiente texto.

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

Por cierto, hay una gran herramienta, U2U CAML Builder para construir SharePoint CAML. Desearía haberlo encontrado hace unas semanas.

+0

recibo el código de respuesta: 400, mensaje de respuesta: solicitud incorrecta, cuando agrego ** líneas soap1: ** ... ¿me falta algo? –

3

Debe llamar de manera recursiva al servicio para obtener todos los elementos dentro de las subcarpetas. No hay una opción para hacerlo OOTB. En su lugar, siempre puede escribir su servicio web personalizado de SharePoint para lograr esto.

  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
+0

Gracias. El problema está en el sobre de jabón de arriba. –

Cuestiones relacionadas