Subscripciones en Reporting Services

Una de las características que me parece más interesante de Reporting Services es el sistema de subcripciones que posee.


De manera muy sencilla se pueden crear subscripciones a informes y por ejemplo, hacer que de forma automática el informe se genere por correo electrónico.


Me parece una característica muy interesante a la que le encuentro un montón de aplicaciones en la vida real. Por ejemplo, para mandar el típico informe ejecutivo que quieren recibir «los jefes» de forma periódico, para ver cuatro grafiquitos….Bueno, seguro que se os ocurren a vosotros muchos más..


Mediante la herramienta de administración del servidor de reportes se puede crear estas subscripciones. Una vez que tenemos nuestros informes publicados en nuestro servidor, podemos crear subscripciones a través de la interfaz web. Dentro de la subscripción podemos definir sus propiedades, como cuándo se debe generar o en qué formato. Por ejemplo, podemos querer que todos los días a las 00:00h se genere un informe en formato PDF y se guarde en disco o se mande por correo electrónico a nuestro jefe.



 


Pero si queremos integrarlo en nuestra aplicación también podemos. Desde código también es muy sencillo poder realizar cualquier de las operaciones que se hace desde la herramienta de administración. Reporting Services exporta servicios web que permite realizar cualquier de las operaciones que se nos puedan ocurrir.


Si queremos utilizarlo desde nuestra aplicación sólo tendremos que añadir una referencia web a http://<servidor>/reportserver/reportservice2005.asmx.



 


Una vez que hecho esto lo demás es coser y cantar. Sólo es necesario usar uno de los métodos que nos proporciona el servicio web.


public string CreateSubscription (
  string Report,
                ExtensionSettings ExtensionSettings,
                string Description,
                string EventType,
                string MatchData,
  ParameterValue[] Parameters


Además de este método, exporta numerosos métodos para hacer cualquier operación que se os ocurra sobre el servidor de reportes; crear una programación, listar subscripciones, crear una, borrarla, listar los reportes, obtener los parámetros que soporta un reporte etc,…practicamente cualquier cosa que se puede hacer desde la herramienta administrativa.


 


 

De momento se queda así, ya lo cambiaremos más adelante.

¿Cuántas veces habréis dicho o habréis oido esta frase en alguno de los proyectos en los que habéis trabajado ?  «De momento se queda así, ya lo cambiaremos más adelante».


Debo reconocer que yo mismo he utilizado esta frase…..y también debo reconocer que luego nunca  ( o casi nunca ) lo he cambiado….porque no nos engañemos, luego casi nunca se cambia. 


Hace unos días, revisando un producto en el que he trabajado, me daba cuenta de varias cosas que habíamos hecho de manera «temporal» y que ahí seguían, tres años despues.


Una cosa debemos tener claro; si no tenemos tiempo durante el desarrollo..¿ cuándo lo tendremos ?  ¿Una vez hayamos terminado el desarrollo vamos a deshacer los cambios temporales y vamos a mejorarlos? No lo creo.


Una vez se termina el desarrollo siempre priorizamos otras tareas….por ejemplo, si estamos en fase de certificación del producto vamos a considerar más importantes las incidencias que tengamos con el fin de tener una versión final lo antes posible.


Si estamos en fase de mantenimiento, seguramente prioricemos las incidencias de los clientes o si no tenemos incidencias, intentaremos no modificar nada de lo que ya funciona, para evitar fastidiar nada. Además hay que tener en cuenta que una vez entregado el producto y al cliente le va bien, seguramente estaremos empezando con algún otro proyecto que haga que no podamos dedicar tiempo al que acabamos de terminar.


Por estos motivos, considero que debemos tener cuidado con esta frase y evitarla lo máximo posible, intentanto afrontar estos cambios lo antes posible en la fase de desarrollo.


Si aún así, por algún motivo debéis hacer algo temporal y no hay otra alternativa, por ejemplo para una demo intermedia, una vez que termine esa demo afrontad los cambios sin demorarlos en el tiempo, porque si se demoran, no se hacen.

¿Necesito un Report Server?

Una pregunta con la que me he encontrado ya en varias ocasiones es si es necesario tener un Report Server para poder usar informes en una aplicación .NET.


La respuesta es sencilla; no.


Visual Studio dispone de un control llamado ReportViewer que permite visualizar informes en dos modos; en modo local y en modo servidor. El modo local permite carga un fichero RDL desde un recurso local de la aplicación, sin necesidad de instalar ningún servidor adicional. El modo servidor permite acceder a un informe que se encuentre en un servidor de reportes y ser visualizado en la aplicación.


Sencillo….pero ¿ cuál debo usar ? ¿ Cuál es mejor ? Pues depende, ya que cada método tiene sus ventajas e inconvenientes.


Report Server


Ventajas




  • Rendimiento. El servidor de reportes tienes características interesantes desde el punto de vista de rendimiento, como es el cacheado de informes y la posibilidad de generar snapshots de informes generados previamente.


  • Escalabilidad. Es muy fácil de escalar añadiendo más servidores.


  • Administración. Se pueden administrar todos los aspectos relacionados con los informes; subscripciones, envío automático de informes, gestión de la seguridad….

Inconvenientes:




  • Mayores costes de despliegue. Hay que disponer de al menos un servidor adicional, implica mayores costes de administración, mayores coste de licencias etc…

Modo local


Ventajas




  • Simplicidad. No necesita una infraestructura adicional de servidores. El despliegue es más simple. Sólo hay que distribuir los ficheros RDL junto con la aplicación.


  • Reducción del coste. No hay costes adicionales en licencias ni en hardware.

Inconvenientes




  • Menor rendimiento. No se pueden usar las características de cacheo o de generación de snapshots.


  • Menor flexibilidad. No hay subscripciones, no hay posibilidad de administración centralizada..