Ya hemos visto como configurar un control XML. Ahora vamos a darle un poco de dinamismo.
Vamos a mostrar datos sacado de una base de datos.
Tenemos una tabla de empleados. Así mismo, como quiero que varios clientes puedan consultar la lista, voy a proporcionarles un Web Service que va a dar un XML con la lista de empleados. Así, cada uno podrá customizar como mostrar unos datos.
Esto es, vamos a proporcionar un Web Service que va a proporcionar a lo usuarios un XML con la lista. Luego, cada usuario tendrá un XSLT que mostrará lo que le interese, y como le interese.
Paso 1: La query
Mmmm queremos una query que nos devuelva un XML. En esta web tenéis varias formas de lograr ese output. Nos quedamos con la siguiente:
SELECT (CAST(( SELECT '
( SELECT EmpleadoId,
RTRIM([EmpleadoNm]) AS Nombre
,RTRIM([EmpleadoSNm])AS Apellidos
,RTRIM([EmpleadoAge]) AS Edad
,RTRIM([EmpleadoSabiduria])AS Sabiduria
FROM [TestingDB].[dbo].[Empleados]
FOR XML PATH('Empleado')) +
(SELECT '
AS XML))
Bien, ya tenemos la lista de empleados, cada uno de ellos con el tag Empleado.
Ahora, a por el web service. Vamos a hacer que nos devuelva un XmlDocument (System.Xml). Esto permitirá al cliente manipularlo antes de darlo a la capa de presentación.
El Web Service sería así:
[WebMethod]
public XmlDocument GetEmpleados()
{
XmlDocument doc = new XmlDocument();
SqlConnection connection = new SqlConnection(@"Data Source=localhost\sqlexpress;Initial Catalog=TestingDB;Integrated Security=SSPI;");
SqlCommand command = new SqlCommand();
command.CommandText = "GetEmpleados";
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Connection = connection;
connection.Open();
XmlReader reader = command.ExecuteXmlReader();
while (reader.Read())
{
doc.InnerXml = reader.ReadOuterXml();
}
reader.Close();
connection.Close();
return doc;
}
Ahora, ¡a consumir el web service!
Creamos un site y añadimos la referencia web. Añadimos un control XML, solo con ID y Runat=”Server”, nada más.
Vamos a usar un fichero cualquiera de transformación.
En la página, vamos a recogerlo con forma de XmlNode.
El codigo en el Load, sería:
protected void Page_Load(object sender, EventArgs e)
{
EmpleadosWS.Service servicioEmpleados = new EmpleadosWS.Service();
XmlNode node = (XmlNode )servicioEmpleados.GetEmpleados();
xmlViewer.DocumentContent = node.OuterXml;
xmlViewer.TransformSource = "~/App_Data/Transformador.xslt";
xmlViewer.DataBind();
}
No olvideis el DataBind!!!!!
Un saludo
Nota: es muy posible que se pueda hacer más optimizado... sobre todo la query. Cualquiera que quiera sugerir como hacer o mejorarlo, por favor, hagálo :-) .... y gracias
No hay comentarios.:
Publicar un comentario