jueves, 13 de diciembre de 2007

Consumiendo WebServices MOSS: _vti_bin/lists.asmx

A muchos de nosotros necesitamos acceder a los datos que estan contenidos en las listas de Sharepoint(MOSS), existen algunas dll que nos permiten acceder a estos datos como por ejemplo SharePoint.dll, en la red existe mucha informacion acerca de esta dll y su uso, pero en esta ocasion, implementaremos la misma solucion pero usando los WebServices propios del Sharepoint.
Que podemos hacer con este M Web: UpdateListItems, que el nombre no nos engañe, no solo podemos actualizar sino ademas crear y eliminar, de manera incluyente.
Para poder utilizarlo primero debemos saber como es que recibe datos este webService.

Segun esto, este metodo tiene 2 parametros: listName del tipo string y updates del tipo xmlNode. ListName se refiere al N o Id de la lista a la que queremos acceder.
Y updates es un nodo que contiene todas las operaciones que realizaremos.
algo muy similar a la siguiente estrucuta.



La forma en que construyamos este xmlnode queda a nuetro criterio. solo debemos tener cuidado en los siguientes
Method ID="1" Cmd="New", indica el ID del metodo y el Comando que se usara, el ID es importante porque en el resultado de la consulta nos dira si existio error y en que metodo, esto es muy util para hacer seguiemiento de errores y el comando indica si se realizara una creacion, modificacion o eliminacion.
Personalmente uso estas 2 funciones para armar mi batch xmlNode, pero lo uso solo para hacer inserciones y de un solo registro, ustedes podrian modificarlo a sus necesidades:

XmlDocument CreateProjectBatch()
{
XmlDocument batchXml = new XmlDocument();
XmlElement rootNode = batchXml.CreateElement("Batch");
XmlAttribute attribute;
attribute = batchXml.CreateAttribute("OnError");
attribute.InnerText = "Continue";
rootNode.Attributes.Append(attribute);
batchXml.AppendChild(rootNode);
return batchXml;
}
private XmlDocument BatchUpdateProject(XmlDocument batchXml,List MisDatos)//
{
XmlElement methodNode = batchXml.CreateElement("Method");
XmlAttribute attribute;
attribute = batchXml.CreateAttribute("ID");
attribute.InnerText = "1"; (batchXml.DocumentElement.ChildNodes.Count + 1).ToString();
methodNode.Attributes.Append(attribute);
attribute = batchXml.CreateAttribute("Cmd");
attribute.InnerText = "New";
methodNode.Attributes.Append(attribute);
for (int i = 0; i < innerxml =" methodNode.InnerXml">" + MisDatos[i].Valor1 + "";
}
batchXml.DocumentElement.AppendChild(methodNode);
return batchXml;
}

Para finalizar este corto post, dejare un ejemplo de como usamos todo este conocimiento:
Primero creo una referencia web, apuntando a la raiz del site donde estan las listas: en mi caso la llamo: SiteRaiz.
Luego creo una clase que me servira para poder armar la estructura
ClassDatos que utilizamos en las funciones anteriores.

public class ClassDatos
{
public ClassDatos(string Cln, string Vlr)
{
Columna = Cln;
Valor = Vlr;
}
private string Columna;

public string Columna1
{
get { return Columna; }
set { Columna = value; }
}
private string Valor;

public string Valor1
{
get { return Valor; }
set { Valor = value; }
}
}
Ahora si la funcion principal:

public XmlNode InsertarDatos()//
{
List Array = new List(1);
Array.Add(new ClassDatos("Title", "Mi Titulo"));//ustedes deben poner mas datos Columna - Valor
XmlDocument NewBatch = CreateProjectBatch();
NewBatch = BatchUpdateProject(NewBatch,Array);
SiteRaiz.Lists xlistService = null;
xlistService = new SiteRaiz.Lists();
xlistService.Url = KeySite;
xlistService.Credentials = new System.Net.NetworkCredential("demo", "demo123456", "Midominio");
xlistService.PreAuthenticate = true;
XmlNode returnInfo = xlistService.UpdateListItems(listGuid, NewBatch.DocumentElement);
}

No Olviden que toda la informacion sobre el estado de las acciones realizadas estan almacenadan en
returnInfo , seria bueno que revisen esa data.
Antes que olvide, esto siempre los Blogger nos olvidamos de poner:

Se usaron para este ejemplo las siguientes USING
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Collections.Generic;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Xml;
using System.Xml.XPath;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using System.Net.Security;
using System.Security.Authentication;


1 comentario:

Anónimo dijo...
Este comentario ha sido eliminado por un administrador del blog.