none
Como convertir un Archivo rdl a un formato .rdlc desde codigo? RRS feed

  • Pregunta

  • Soy nuevo en esto tiene una semana de que salí de practicante de la universidad y desconozco estos profundos temas , espero y me puedan ayudar 

    Necesito crear muchos reportes en Reporting Builder y almacenarlos en carpetas esta parte ya quedo,

    y después los necesito poder cargar en el control reportViewer. para poder haceder  de manera local a el informe mediante aplicaciones windows o web.

    sin hacer uso del servidor de reportes.

    haca es donde surge el problema porque Reporting Builder crea archivos reporte.rdl y reportViewer maneja la extencion reporte.rdlc

    entonces necesito obtener la ruta del reporte fisico.rdl  convertirlo en tiempo de ejecución y cargarlo en el control reportviewer. sin tener que hacer uso del servidor de reportes.

    sábado, 7 de julio de 2012 17:43

Respuestas

  • Tanto el rdl como el rdlc son ficheros xml que usan el mismo esquema. Hay pequeñas diferencias, en el sentido de que el rdl define en su interior la consulta que proporciona los datos, mientras que el rdlc no lleva esa información puesto que los datos se los tiene que suministrar al informe el propio programa cliente.

    Lo más sencillo es que crees un ejemplo de cada uno de ellos (el .rdl con BIDS o RB y el .rdlc con VS), y compares su contenido abriéndolos con un editor de texto. Fíjate en las diferencias: sobra un elemento en el rdl y (posiblemente, dependiendo de la versión) discrepa el espacio de nombres definido al principio del archivo. Escribe un programa que haga esos cambios accediendo al XML, y renombra el .rdl a .rdlc, y con eso deberías poder lograr tu objetivo.

    domingo, 8 de julio de 2012 6:23
    Moderador

Todas las respuestas

  • Tanto el rdl como el rdlc son ficheros xml que usan el mismo esquema. Hay pequeñas diferencias, en el sentido de que el rdl define en su interior la consulta que proporciona los datos, mientras que el rdlc no lleva esa información puesto que los datos se los tiene que suministrar al informe el propio programa cliente.

    Lo más sencillo es que crees un ejemplo de cada uno de ellos (el .rdl con BIDS o RB y el .rdlc con VS), y compares su contenido abriéndolos con un editor de texto. Fíjate en las diferencias: sobra un elemento en el rdl y (posiblemente, dependiendo de la versión) discrepa el espacio de nombres definido al principio del archivo. Escribe un programa que haga esos cambios accediendo al XML, y renombra el .rdl a .rdlc, y con eso deberías poder lograr tu objetivo.

    domingo, 8 de julio de 2012 6:23
    Moderador
  • Hola, vi este comentario. Tengo un software que tiene varios informes .rdlc pero ahora me piden colocarlo en un servidor de informes es decir que sean .rdl... Solo es renombrar los archivos o tengo que volver a hacerlos, son muchos.

    Gracias por su atención.


    Armando

    miércoles, 15 de abril de 2020 7:00
  • No, no es tan sencillo hacer la conversión. Hay una diferencia fundamental entre los rdl y los rdlc: Los rdlc no contienen datos, sino que el programa que los llama es el que lee desde la base de datos, mete los datos en un dataset, y luego le pasa el dataset al rdlc. En cambio, los rdl no son llamados desde un programa, sino que los procesa directamente el servidor SSRS. Esto implica que no existe un código que les pase los datos, por lo que el rdl tiene que contener toda la información necesaria para conectarse al servidor de base de datos y extraer la información que va a presentar en el informe.

    En consecuencia, convertir un rdl en rdlc implica añadir en su interior toda esta información de conexión a base de datos y sentencias select que extraigan desde la base de datos la información del informe. Esto puede ser relativamente sencillo si tus informs son muy simples y únicamente presentan información que se pueda obtener mediante una select de una o varias tablas. Pero puede ser difícil o incluso imposible si tu programa estaba rellenando los datasets mediante bucles de código y luego pasando dicha información al rdlc.

    Por lo demás, el diseño visual del informe sí que es igual en los rdl y rdlc. Por dentro, estos ficheros son XML, y podrías copiar de uno al otro el bloque relevante de XML (el que tiene el diseño), respetando las cabeceras e insertando las nuevas partes de XML que traen información de la base de datos. Si esto hay que hacerlo con muchos informes, con un poco de esfuerzo podrías escribir un programa que lea el XML y lo convierta automáticamente, salvo la parte de insertar las sentencias SQL que seguramente tendrás que añadirlas a mano sobre los archivos modificados.

    miércoles, 15 de abril de 2020 7:12
    Moderador
  • Gracias por la atención. Todos los rdlc trabajan con proc almacenados, ninguno rellena el dataset con codigo.

    en el dataset estan los proc almacenados. Esto facilitaria la tarea ?


    Armando

    miércoles, 15 de abril de 2020 7:18
  • Gracias por la atención. Todos los rdlc trabajan con proc almacenados, ninguno rellena el dataset con codigo.

    No es posible. En el .rdlc no existe ninguna manera de ejecutar el procedimiento almacenado. Necesariamente tienes que tener algo de código que llame al procedimiento almacenado y guarde el resultado en un DataSet para pasarle después ese DataSet de .Net al DataSet del .rdlc (ojo, no confundirlos, aunque los dos se llamen "DataSet" son objetos distintos).

    Ahora bien, donde yo decía que al construir el .rdl tendrás que meter dentro la "sentencia SQL", desde luego que no tiene por qué ser una auténtica sentencia, puede perfectamente ser una llamada al procedimiento almacenado. Esto facilita las cosas, pero no te evita tener que modificar manualmente el .rdl para meterle el procedimiento almacenado que le corresponda y conectarlo con el DataSet que deba recibir esos datos. Esto no va a ocurrir automáticamente porque dentro del .rdlc no existe ninguna indicación de cuál es el procedimiento almacenado que sirve para cargarlo (eso está fuera del .rdlc, en el programa donde está definido el DataSet -- mientras que en el .rdl tiene que estar dentro, por eso tienes que añadirlo).

    miércoles, 15 de abril de 2020 11:42
    Moderador