Archivo de la etiqueta: lists.asmx

Lists.asmx, GetListItems y carpetas

Estaba haciendo algunas investigaciones para alguien hoy alrededor del servicio web de list.asmx proporcionado como parte de SharePoint 2010 (y anteriores).  Ella fue capaz de obtener los elementos de lista en la carpeta raíz (incluidos los nombres de las subcarpetas), pero no se pudo obtener elementos en las subcarpetas.  Hice algunos mirando alrededor de la internets y es una cuestión sorprendentemente común.  Todavía, No podía obtener una buena respuesta a la pregunta simple, "si sé la carpeta, Cómo obtener los elementos de la carpeta?”  Para ser honesto, No intente duro todo lo que ya he quería figura esta uno fuera de mi propia durante un tiempo Sonreír.

Para configurar esto, He creado un sitio llamado "Blogging escenarios" y una lista personalizada denominada "Lista personalizada con las subcarpetas".  A continuación, crear carpetas con el nombre:

  • Año 2005
  • Año 2006
  • Año 2007

He añadido algunos elementos a la carpeta "Año 2006".  Esto es lo que parece:

image

Mi amigo no escribir código C# sino más bien mediante Java, por lo que la envoltura SOAP era lo que necesitaba realmente.  Para conseguir, Escribí un poco de jQuery y entonces utilizarse violinista para obtener la conversación real de HTTP.

Aquí es el jQuery pertinente (He copiado el código abajo a continuación si desea copiar y pegar):

image

Su primera clave es incluir tanto un <queryOptions> y <QueryOptions> nodo.  La segunda clave es que el <Carpeta> el nodo es una dirección URL a la que el cliente tiene acceso.

Puede haber otras formas de obtener esto, pero esto funcionó bien para mí cuando usando jQuery.

Aquí es la envoltura SOAP para la anterior:

<soapenv:Xmlns envolvente:soapenv =’http://schemas.xmlsoap.org/SOAP/Envelope/’>                
  <soapenv:Cuerpo>
    <GetListItems xmlns =’
http://schemas.Microsoft.com/SharePoint/SOAP/’>
      <listName>Lista personalizada con las subcarpetas</listName>
      <viewFields>  
        <ViewFields>
          <FieldRef nombre =' título’ />
          <FieldRef nombre ='EncodedAbsUrl’ />
        </ViewFields>
      </viewFields>
      <queryOptions>
        <QueryOptions>
          <Carpeta>
http://demoserver1/blogs Lista personalizada de listas de escenarios con Sub carpetas/año 2006</Carpeta>
        </QueryOptions>
      </queryOptions>
   
</GetListItems>
  </soapenv:Cuerpo>
</soapenv:Envolvente>

Un montón de ejemplos y debate en torno a esto me llevó a creer que todo lo que necesito <QueryOptions> y especifique un nombre de carpeta.  Para mí, Yo necesito a ambos envolverlo dentro <queryOptions> así como especificar una dirección URL completa de la <Carpeta> nodo.

Aquí está el programa de instalación de AJAX jQuery:

$(documento).listo(función() {
       var soapEnv =
           "<soapenv:Xmlns envolvente:soapenv =’http://schemas.xmlsoap.org/SOAP/Envelope/’> \
               <soapenv:Cuerpo> \
                    <GetListItems xmlns =’http://schemas.Microsoft.com/SharePoint/SOAP/’> \
                       <listName>Lista personalizada con las subcarpetas</listName> \
                       <viewFields> \
                           <ViewFields> \
                              <FieldRef nombre =' título’ /> \
                              <FieldRef nombre ='EncodedAbsUrl’ /> \
                          </ViewFields> \
                       </viewFields> \
                       <queryOptions> \
                         <QueryOptions> \
                           <Carpeta>http://demoserver1/Blogging Lista personalizada de listas de escenarios con Sub carpetas/año 2006</Carpeta> \
                         </QueryOptions> \
                       </queryOptions> \
                   </GetListItems> \
               </soapenv:Cuerpo> \
           </soapenv:Envolvente>";

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Lists.asmx, GetList y "valor no puede ser nulo”

Hoy he descubierto que la GetList() método en lists.asmx servicio Web tiene que ser llamado muy cuidadosamente o es propenso a tirar un misterioso "Valor no puede ser nulo" excepción (y que está suponiendo que puede superar el peor mensaje de error genérico, "Excepción de tipo ' Microsoft.SharePoint.SoapServer.SoapServerException’ fue arrojado.")  Específicamente, Me encontré con que no puede ofrecer ningún tipo de prefijo en el método GetList.  El siguiente fragmento de código de jQuery ilustra el punto:

image

Si haces, el servicio web responde con "Valor no puede ser nulo" por esto violinista-proporciona la transcripción HTTP:

<?XML version = "1.0" Encoding = "utf-8"?>
  <jabón:Envolvente
     xmlns:jabón ="
http://schemas.xmlsoap.org/SOAP/Envelope/"    
     xmlns:XSi = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns:XSD ="
http://www.w3.org/2001/XMLSchema">

  <jabón:Cuerpo>
    <jabón:Fallas>
      <faultcode>jabón:Servidor</faultcode>
      <FaultString>
        Excepción de tipo ' Microsoft.SharePoint.SoapServer.SoapServerException’ fue arrojado.
      </FaultString>
      <detalle>
        <ErrorString xmlns ="
http://schemas.Microsoft.com/SharePoint/SOAP/">
Valor no puede ser nulo.
        </ErrorString>
      </detalle>
    </jabón:Fallas>
  </jabón:Cuerpo>
</jabón:Envolvente>

Claro, probablemente no agregar ese prefijo "s0" sobre su propia, pero algunas herramientas son propensas a hacerlo (como Eclipse).

Esto es aún más confuso / frustrante porque otros métodos toleran prefijos.  Por ejemplo, el GetListCollection método no importa si se es prefijo, incluso con prefijos de tonterías como "xyzzy":

image

Este "valor no puede ser nulo" parece bastante común con lists.asmx así que esperemos que esto nos ayudará a alguien fuera en el futuro.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin