Actualizando Listas de WSS V3.0 con el Webservice Lists.asmx
Los Windows SharePoint Services 3 (WSS) y por lo tanto el Office SharePoint Server 2007 (MOSS) exponen una serie de WebServices mediante los cuales se puede interactuar con los datos, configuración, etc. De hecho, estos WebServices ya estaban disponibles desde versiones anteriores.
El WebService de listas (Lists.asmx) expone los métodos para crear, actualizar o borrar ítems de una lista, y prácticamente todas las operaciones administrativas en cuanto a listas se refiere. Por ejemplo, es posible actualizar valores de una columna en un ítem ya existente. Para esto, es necesario construir un segmento XML que actuará como batch y es donde incluiremos los comandos a ejecutar. Así, si queremos por ejemplo actualizar un ítem en una lista llamada “Empleados”, usamos el método UpdateListItems:
-
listService.Url = "http://[server]/_vti_bin/Lists.asmx";
-
//comando:
-
string strBatch = "<method ID='1' Cmd='Update'>" +
-
"<field Name='ID'>" + IdEnLaLista + "</field>" +
-
"<field Name='Estado'>Salio</field></method>";
-
System.Xml.XmlElement elBatch = xmlDoc.CreateElement("Batch");
-
elBatch.SetAttribute("OnError", "Continue");
-
elBatch.SetAttribute("ListVersion", "1");
-
elBatch.InnerXml = strBatch;
-
XmlNode ndReturn = listService.UpdateListItems("Empleados", elBatch);
-
<p>
En la primera línea del batch se indica el comando a ejecutar. En el caso anterior fue “Update”, pero también se puede eliminar y crear. Para eso esta línea cambiaría de la siguiente manera:
Para un ítem Nuevo (El id de item es simplemente “New”):
-
"<method ID='1' Cmd='New'>" +
-
"<field Name='ID'>New</field>"
Para eliminar un item:
-
“<method ID=’1’ Cmd=’Delete’>” +
-
“<field Name=’ID’>4</field>”
Es posible también enviar varios comandos en un solo roundtrip. Para esto, simplemente creamos más nodos Method con el atributo ID correspondiente en el XML del batch:
-
string strBatch = "<method ID='1' Cmd='Update'>" +
-
"<field Name='ID'>" + IdEnLaLista + "</field>" +
-
"<field Name='Estado'>Salio</field></method>" +
-
"<method ID='2' Cmd='Update'>" +
-
"<field Name='ID'>" + Id2EnLaLista + "</field>" +
-
"<field Name='Estado'>Salio</field></method>";
Un detalle que se puede presentar, es que el nombre de alguna columna contenga espacios, por ejemplo “Observaciones del Empleado”. En este caso, los espacios deben ser substituidos con “_x0020_”:
-
string strBatch = "<method ID='1' Cmd='Update'>" +
-
"<field Name='ID'>" + IdEnLaLista + "</field>" +
-
"<field Name='Observaciones_x0020_del _x0020_Empleado'>Me parece perfecto.</field></method>";
En todos los casos, el Web Service Lists envía de regreso una respuesta en un XML con un nodo Result por cada comando enviado en el batch:
-
<results xmlns="http://schemas.microsoft.com/sharepoint/soap/">
-
<result ID="1,Update">
-
<errorCode>0x00000000</errorCode>
-
<z:row ows_ID="4" ows_Title="Title">
-
…
-
</result>
-
</results>
Si el ErrorCode=0x00000000 significa que ese commando se ejecutó exitosamente. El nodo z:row contiene los nuevos valores del ítem en el caso de actualización o creación.
Y listo, es todo lo que se necesita para interactuar con las listas de WSS 3 a través del Web Service de Listas. Personalmente me ha sido de gran utilidad para crear interfaces personalizadas con AJAX que tienen como origen de datos listas de WSS.