none
Reportes con Sql server reporting services o Crystal Reports en MVC 3? RRS feed

  • Debate general

  • Hola amigos

    Estoy desarrollando una aplicación en ASP .NET MVC 3 en C# y ahora me toca crear varios reportes, he buscado en la web y no encuentro una forma efectiva de crearlos con Sql server reporting services o Crystal Reports, la pregunta es si alguno de ustedes a logrado integrar alguno de estos generadores de reporte con MVC 3 y como lograron hacerlo?

    Gracias de antemano por la respuesta

    Bendiciones


    CADAVID

    • Tipo cambiado Eder Costa lunes, 29 de octubre de 2012 11:56
    lunes, 9 de abril de 2012 16:54

Todas las respuestas

  • lunes, 9 de abril de 2012 17:59
  • Hola

    los reportes que voy a realizar son de diferentes formas,  pero debo utilizar Sql server reporting services o Crystal Reports, estuve consultabdo mas a fondo y lo que sugieren es agregar paginas webforms dentro de mi proyecto MVC, es esta una buena manera de poder trabajar con estos generadores de reportes en MVC 3?


    CADAVID

    lunes, 9 de abril de 2012 18:59
  • La verdad que nunca tuve ese problema, pero no me parece correcto que mezcles webform con mvc, va desde mi punto de vista, rompes el diseño y la arquitectura con la que estabas trabajando.

    Saludos

    lunes, 9 de abril de 2012 20:48
  • [...] estuve consultabdo mas a fondo y lo que sugieren es agregar paginas webforms dentro de mi proyecto MVC, es esta una buena manera de poder trabajar con estos generadores de reportes en MVC 3?

    Efectivamente, si quieres usar el control ReportViewer o el CrystalReportViewer para que el usuario trabaje interactivamente con los informes, entonces necesitarás añadir una página .aspx a tu aplicación MVC, ya que las vistas de MVC no permiten usar controles de servidor.

    Como alternativa, si únicamente necesitas presentar el informe pero no que sea interactivo, puedes usar el WebServvice de SQL Server Reporting Services para que te devuelva en binario el contenido del informe terminado, en el formato que te interese (por ejemplo, HTML). Después, ese contenido que te ha devuelto el servidor de informes lo sirves como resultado de tu método de acción, y de esa forma aparece en el navegador del usuario sin necesidad de hacer intervenir el ReportViewer.

    martes, 10 de abril de 2012 6:06
  • YO HE LOGRADO LA INTEGRACIÓN FUSIONANDO webforms con MVC de la siguiente manera

    1.-Crea la carpeta Reportes en la raiz de tu proyecto.

    ---[Carpeta de proyecto]

    -------[bin]

    -------[content]

    ------[Reportes]

    -------[etc]

    2.-Ignora el ruteo del mvc para esa carpeta, eso se hace en el archivo Global.asax en el método RegisterRoutes agregando la siguiente linea

      routes.IgnoreRoute("{exclude}/{extnet}/ext.axd");
                routes.IgnoreRoute("Reportes/{resource}.aspx/{*pathInfo}");
                routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
                );

    4.-Dentro de la carpeta reportes creen sus reportes así como las vistas aspx para llamarlos ejemplo Reporte.aspx.

    5.- desde el mvc tendrán que llamar los reportes dentro de iframes como ../Reportes/Reporte.aspx recuerden que el mvc no afecta el enrutamiento de estas vistas por lo que no podrán utilizar urls amigables haciendo uso del mvc para estos reportes

    6.- Suerte

    martes, 10 de abril de 2012 23:47
    miércoles, 30 de mayo de 2012 14:15
  • Estimado CADAVID

    Me sumo a las respuestas de @Alberto y el tip muy bueno de @Carf (lo tenia como iframe pero tienes razon con obtener el HTML con jquery)

    Te comento mi experiencia:

    Tengo aplicaciones terminadas y en curso con MVC y utilizo SSRS (no utilizamos mas en mi empresa Crystal por razones de licenciamiento, escalabilidad, etc)
    TEngo aplicaciones MVC que utilizan

    • OPCION1: Algunas utilizan paginas webforms para el ReportViewer
       (si.. es la unica forma de utilizar el control REportViewer que yo conozca)
      Aqui la utilizamos porque necesitabamos armar nosotros mismos los filtros y pasarlos
      INcluso obtenemos el listado de objetos de nuestra capa de negocios, y se la pasamos directamente al reporte para que renderice
    • OPCION 2: Utilizamos rendeirado por codigo en un ActionResult de MVC exportar a PDF
      Aqui no utilizamos el webcontrol ReportViewer, sino que directamente por codigo en el ActionResult renderizamos el reporte en PDF (como para descargarlo)
      Pero hacemos lo mismo que la opcion 1, obtenemos de nuestra capa de negocios el listado (si es para una grilla) o el objeto que necesitiamos (ejemplo: detalle de un cliente) y se lo pasamos al reporte, y por supuesto como comente lo renderizamos como PDF, excel, etc)
    • OPCION 3: Incrustamos en iframe el reporte directamente
      Aqui es la forma mas sencilla, pero que se lee directamente el reporte del servidor de reportes (idem a lo que te comentan @Alberto y @Carf)
      Hay una opcjn 3.1, que es que se renderice en el servidor pero se lee con el ReportViewer (idem al punto 1) mas que nada por un tema de permisos (pero esto ya es otro tema)

    Te pregunto ahora yo

    • Trabajaste con Crystal Report (en alguna version)?
    • Los reportes seran accesados por todo los usuarios? o tendras niveles de visualizacion (algunos usuarios podran ver unos reportes otros no)
    • Los reportes deben desplegarse en diferentes formatos?
    • Los reportes  deben ejecutarse en algun momento del dia para armarse (porque tardan tiempo en renderizar por lo costoso de obtener los datos)

    Dale una mirada a los beneficios que te da tenerlos en un servidor de reportes (SSRS)

    Espero que te sirvan de ayuda o guia.


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    jueves, 31 de mayo de 2012 1:06
  • Hola,

    Te cuento lo que nosostros hemos hecho en una aplicación MVC3 con reporting services.

    Tenemos una pantalla donde mostramos a la izquierda una especie de treeview con las subcarpetas que cuelgan de una carpeta determinada en Reporting Services. Cuando se hace click en una de las carpetas se muestran a la derecha los informes de esa carpeta. Cuando se pincha sobre el informe se muestra el informe. Para mostrar el informe utilizamos una página WebForms ReportViewerForm.aspx que recibe en la query string la ruta del informe y que utiliza el control ReportViewer.

    Para obtener las carpetas e informes de Reporting Services llamamos a su servicio web.

    Para ejecutar el informe utilizamos las credenciales windows de la aplicación web, es decir, la identidad del Application Pool. Por esa razón, ya que esa cuenta puede ejecutar todos los informes (así está configurado), nosotros manejamos la seguridad de forma personalizada. Cada usuario puede pertenecer a varios roles y cada rol puede tener permiso para ejecutar los informes de ciertas carpetas. Tenemos tablas en nuestra base de datos donde almacenamos esta información. La pantalla que muestra las carpetas, sólo muestra aquellas que el usuario tiene permiso. Y el ReportViewerForm.aspx comprueba que el usuario tiene permiso en la carpeta donde reside el informe, si no lo tiene le redirige a la pantalla "No Autorizado"

    Por otra parte aunque el usuario puede ejecutar el informe, no tiene por qué ver todos los datos que podría mostrar el informe. Por ello casi todos los informes tienen como parámetro oculto el UserId que el ReportViewerForm.apsx establece de forma automática cuando el informe tiene este parámetro. El informe, normalmente hace uso de un procedimiento almacenado que tiene como parámetro el UserId y que filtra los resultados, mostrando sólo la información que está autorizado a ver.

    También tenemos pantallas de administración donde podemos gestionar los permisos de las carpetas, es decir, donde poder asignar los roles que tienen permiso para ejecutar los informes en esas carpetas. Las carpetas pueden heredar los permisos de la carpeta padre o tienen los permisos asignados.

    De esta manera el número de informes que maneja la aplicación es ilimitado. Cualquier empleado con los permisos necesarios en Reporting Services puede crear un nuevo informe utilizando el Report Builder 3.0

    La aplicación también usa otros informes que llamamos integrados y que ponemos en otra carpeta diferente. Estos informes se muestran ya renderizados en formato PDF desde distintos puntos de la aplicación. Para ello utilizamos directamente los servicios web de Reporting Services.

    Saludos


    jueves, 31 de mayo de 2012 10:38
  • Muchas Gracias a todos por quererme ayudar.

    Estoy utilizando VS 2010 y he consultado y no trae el crystal report, ya antes lo había utilizado pero no mucho... 

    Ya instalé el nuevo crystal report pero no se si se puede usar de manera gratuita. Por otra parte es mejor el Reporting Service que el Crystal?

    Saludos


    CADAVID

    jueves, 14 de junio de 2012 21:20
  • ok mi nombre es jose pineda aparentemente es lo que necesito voy a revisarlo pero esto es para hacer reportes en reporting services especificamente porque trate de hacerlo una vez pero me mandaba error al correrlo con reportviewer no se porque
    lunes, 4 de febrero de 2013 15:35
  • no e trabajado con crystal report pero si tengo que hacerlo se hace, todos seran accesados el que define la autorizacion es en el controlador cuando aplico el atributo authorize

    los formatos PDF minimo si se pueden tambien excel y word mejor

    los reportes se ejecutan cada vez que el usuario lo invoque

    Todavia no e podido hacer un reporte efectivo  me podrias explicar como hacer la opcion 2 y la tres no quiero usar reportviewer

    saludos

    jueves, 13 de junio de 2013 13:31