viernes, 20 de febrero de 2009

¿Crystal Reports o Reporting Services?

Si está evaluando una herramienta de generación de informes para integrarla en una aplicación, o incluso para implementar un sistema empresarial de gestión de informes, Este artículo puede resultarle interesante.
¿Crystal Reports o Reporting Services?
Personalmente yo uso Reporting Services, pero no por decision propia sino porque la empresa nos impuso ese generador de informes, pero luego de un tiempo usandolo te adecuas.
Saludos.

jueves, 12 de febrero de 2009

Maqueteando los datos revueltos por _vti_bin/lists.asmx

Sharepoint nos ofrece acceso a sus datos a traves de Servicios Web, a los cuales podemos acceder a traves del famoso _vti_bin/lists.asmx, asi que desde el inicio del proyecto empece a utilzar estos Servicios Web, entre todos los metodos Web que ofrece hay uno que uso muy seguido GetListItems, que funciona de maravillas, la manera de trabajar con este Metodo Web es facil, haciendo uso de herramientas tales como: U2UCamlCreator podemos ir creando consultas en formato XML. Algo similar a la imagen



lo remarcado en la imagen nos usar como parametros para este Metodo Web.
Por temas de mejorar el diseño hice una DLL llamada MossHelper.dll que enmascara este ServicioWeb y ofrece un metodo llamado MyQueryList(string Myquery, string listGuid, int NumReg, string MyView), que fui armado segun las necesidades, si a alquien ayuda podria adjuntar el codigo de esta dll.
Mando los parametros necesario Myquery, es la primera region del grafico, listGuid es la GUID de la lista o libreria donde deseas consultar, NumReg es el numero de registros que deseas retornar (si deseas devolver todos, mandar 0) MyView, es la segunda region del grafico,
Hasta aqui todo funciona perfecto, pero la data me la devuelve de esta manera:


Inicialmente dije bueno, no importa total alli esta la data que necesitan (y otra data que realmente no se para que sirve, si alguien sabe que es toda esa data agradeceria decirmelo y sobre todo para que me puede servir), pero luego cree un algoritomo que mejore ese esquema XML y solo me muestre la data que pedi, y sin el prefijo "ows_" en todo los campos.
Algo como la siguiente Imagen.



Poco a poco fui haciendo un Algoritmo no optimizado por cierto, pero que funciona, queda en ustedes adecuarlo a su realidad y mejorarlo



Me hubiera gustado poder escribir el codigo, pero siempre hay problemas con las etiquetas de XML.
Bueno lo explico un poco.
Parta esto cree una clase llamada: ClassDatos, con 3 Campos Columna, Valor 1, Valor 2; para este caso el Columna tendra el nombre de la columna a consultar, Valor 1, un valor por defecto en caso que no encuentre el campo o el campo este vacio y Valor 2 el nombre con que deseas ver tu campo.
Hago uso de la funcion que mensione previamente.
Espero sea util, saludos.
El resto es tema revisar el codigo.

Reporting Services: Creando DataSorce y DataSet

Es el primer proyecto donde me he visto en la necesidad utilizar Reporting Services, por las circunstancias usar una fuente de datos XML y para acceder a ella usar WebServices.
Manos a la Obra.
Creamos un proyecto de tipo: Report Server Project, tal como se muestra en la imagen adjunta.



Tendramos una interfaz muy similar a la siguiente.



Tenemos 2 carpetas con los nombres: Shared Data Sources y Reports.
El primero permite crear una fuente de datos, para realizar esto click derecho y elgirla opcion: Add New Data Source; al realizar esto se mostrara la siguiente ventana.



Como usaremos un WebServices, seleccionamos Type XML, en mi caso mi webservices es http://localhost:2366/MasterTables/BPPS/Trend.asmx
Ahora para crear un reporte tenemos 2 opciones hacerlo manualmente o utilizar el Wizard, creo que sera mas util que sea manual, asi aprendemos mas; para ellos click derecho sobre Repots y elegimos la Opcion Add/New Item/ y elegimos Report.
Al realizar esto se mostrara una pantalla como la siguiente.



Aqui vemos 3 Pestañas Data | Layout | Preview:
Data, permite Crear Dataset
Layout, permite armar propiamente el reporte, crear parametros
Preview, nos muestra como va quedando el reporte.
Paso 1: Crear Data Set, click sobre la opcion New Dataset...



Para mi ejemplo, usare un Metodo Web llamado: BuscarEnPresupuesto, el namespace que uso es "http://tempuri.org/" y tiene varios parametros: string PresupuestoName_XML, string IdEquipo, string NroParte, string NroSerie, de los cuales solo el primero es obligatorio, con todos estos datos armamos, una estructura como la siguiente:



Estos nos servira como Query String, los errores mas comunes en este nivel es son por errores de tipo, no olvidar que es "Case Sensitive".
Si todo esta bien , ya deberia poder ver sus datos usando el boton Run [!].
Saludos

Mensajes de Error mas comunes en este nivel
Mensaje 1:

An error occurred while creating a data extension command.
The XmlDP query is invalid.

Razon: Se ha omitido alguna etiqueta, se han cometido errores de tipeo o cambiaron mayusculas por minusculas.

Espero esto les ayude, saludos.

martes, 3 de febrero de 2009

Enviar ampersand(&) en XML / Send ampersand in XML

Hace algunos dias tuve necesitaba mandar una ruta Url con parametros como valor de un nodo XML, similar a como se muestra en la imagen siguiente:

Al intentarlo obtenia un error similar a este:
"System.Xml.XmlException: An error occurred while parsing EntityName" y al parecer no estaba comiento ningun error, pero llege a la conclusion que cada vez que ponia un ampersand como valor del nodo, el webservices fallaba.

Buscando en google descubir que existe una lista de caracteres prohibidos en XML



Es muy comun que utilicemos ampersand en las URLs de los enlaces, por ejemplo para definir variales como esta:
/bpps/historial/Pages/ComponenteHistorial.asmx?NroParte=123&NroSeria=abc
esto es incorrecto la forma correcta seria:
/bpps/historial/Pages/ComponenteHistorial.asmx?NroParte=123&NroSeria=abc

Espero que este les ayude.
Saludos.