Obteniendo los items de una lista a travez del web service lists.asmx

Estuve investigando un poco para explorar una lista o librería desde los web services y me parecio bien hacer una compilacion de los recaudos a tener en cuenta a la hora de trabajar con este servicio. Primero, el metodo que voy a usar es Lists.GetListItems, la documentación oficial en MSDN la pueden encontrar acá:

http://msdn.microsoft.com/en-us/library/lists.lists.getlistitems.aspx

Primero vamos a la invocacion del metodo, nos pide una serie de parametros que debemos usar de la siguiente manera:

Lists.GetListItems(string listName, string viewName, XmlNode query, XmlNode viewFields, string rowLimit, XmlNode queryOptions, string webID)

Podemos ver que tenemos varias opciones, pero nos concentraremos particularmente en 4 de los parametros, dejando WebID, ViewName y rowLimit en null, usando los 3 parametros que debemos pasar en formato XmlNode y listName, que indicará el nombre de la lista.

Los parametros que pasaremos en XmlNode son los siguientes:

Query: Una consulta CAML que filtrará la lista. Para los que no hayan trabajado con CAML pueden pueden generar las consultas con una practica herramientita desarrollada por la gente de u2u: http://www.u2u.be/res/Tools/CamlQueryBuilder.aspx (si usan la herramienta asegurense de ingresar la consulta sin el tag )

ViewFields: Aunque de una forma u otra nos devolverá muchisimos atributos 'obligatorios', aquí especificamos cuales queremos utilizar, especificandolos por ejemplo de la siguiente manera para leer los campos ID y Título, cabe destacar, que debemos utilizar los internal names y no el display name:



QueryOptions: En este parametro, definimos una serie de opciones que nos permitiran hilar un poco mas fino con nuestra consulta como por ejemplo:

NombreCarpeta La consulta devolvera solo los items contenidos en la carpeta especificada. Si usamos el nombre de la lista o DL, obtendremos solo los items de la raíz.

La consulta devolvera todos los items, sin importar en que carpeta se encuentren, ignorando los items de tipo folder.

Entre otros que no voy a explicar en este post.

Una vez que realizamos la llamada al metodo, este nos devuelve un XmlNode, con el resultado de la consulta en el siguiente formato:






observando con detenimiento, cada item es devuelto en un tag z:row, y las columnas de nuestra lista son traidos como atributos del nodo en la forma ows_internalName.

Por ultimo algunas consideraciones para poder traer todos nuestros items. Prestemos atención a las columnas FSObjType, que sera 1 si nuestro item es de tipo Folder, y FileRef si trabajamos con document libraries, nos dara el path completo de nuestro archivo relativo a la DL.

0 comments:

Post a Comment