none
Confección de Informe y que se descargue cuando se haya elaborado. RRS feed

  • Pregunta

  • Hola:

    Tengo en una página donde toma unos parametros y en función de estos elabora un informe. Y lo que pretendo es que no se quede esperando a que el informe se termine de elaborar, sino que puede seguir navengando por el sitio, y una vez esté el informe se descargue automáticamente. ¿Esto se puede hacer o tiene que esperar a que se termine el informe y se descarge?

    Ahora se queda esperando, ya que lo devuelve mediante un actionresult.

    Un Saludo.

    miércoles, 22 de julio de 2020 12:10

Respuestas

  • Se puede hacer, pero es más complicado de lo que parece.

    En el momento de lanzar el informe, para que comience a generarse, no puedes alojar ese proceso en el mismo hilo que está sirviendo la página, porque ese se destruye en cuanto devuelves el resultado al usuario. Hay que lanzarlo en un proceso aparte; típicamente usarías una cola y tendrías un servicio que vaya procesando los informes encolados de manera independiente a la ejecución de las páginas web. Cuando el servicio termine de generarlo, lo deja en algún sitio desde donde la web pueda recuperarlo.

    Y luego en la web, desde el sitio donde quieras ofrecer la descarga, tienes que consultar al servicio que lo genera a ver si ya lo ha terminado, y en caso de que esté completo ofrecer un enlace para descargar. No recomiendo que inicies la descarga inmediatamente porque puede que esto le pille al usuario haciendo otra cosa y que resulte inoportuna la interrupción en ese momento.

    La forma de hacer cada una de estas partes depende de las tecnologías que tengas a tu disposición; por ejemplo, si usas un servidor SSRS para los informes, éste ya dispone de un servicio que puede generar el informe y dejarlo en una carpeta compartida o enviarlo por email, por lo que no tedrías que construir otro servicio adicional para esto.

    • Marcado como respuesta elturle miércoles, 22 de julio de 2020 16:58
    miércoles, 22 de julio de 2020 12:28
  • hola

    Lo de la descarga automatica lo veo dificil

    Se puede lanzar el reporte en segundo plano, eso se realiza en un thread y continuar navegando, eso seguro

    Ahora que se descargue mientras el usaurio puede estar en culquier parte navegando el sitio, no lo veo como se podria lograr. Lo unico que se me ocurre es que una vez que se termine se envie una notificacion al browser usando SignalR, entonces le mostrarias algun toast con el link de descarga donde se dejaria el archivo generado co el informe para que el usuario pulse y se descargue

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta elturle miércoles, 22 de julio de 2020 16:58
    miércoles, 22 de julio de 2020 13:11

Todas las respuestas

  • Se puede hacer, pero es más complicado de lo que parece.

    En el momento de lanzar el informe, para que comience a generarse, no puedes alojar ese proceso en el mismo hilo que está sirviendo la página, porque ese se destruye en cuanto devuelves el resultado al usuario. Hay que lanzarlo en un proceso aparte; típicamente usarías una cola y tendrías un servicio que vaya procesando los informes encolados de manera independiente a la ejecución de las páginas web. Cuando el servicio termine de generarlo, lo deja en algún sitio desde donde la web pueda recuperarlo.

    Y luego en la web, desde el sitio donde quieras ofrecer la descarga, tienes que consultar al servicio que lo genera a ver si ya lo ha terminado, y en caso de que esté completo ofrecer un enlace para descargar. No recomiendo que inicies la descarga inmediatamente porque puede que esto le pille al usuario haciendo otra cosa y que resulte inoportuna la interrupción en ese momento.

    La forma de hacer cada una de estas partes depende de las tecnologías que tengas a tu disposición; por ejemplo, si usas un servidor SSRS para los informes, éste ya dispone de un servicio que puede generar el informe y dejarlo en una carpeta compartida o enviarlo por email, por lo que no tedrías que construir otro servicio adicional para esto.

    • Marcado como respuesta elturle miércoles, 22 de julio de 2020 16:58
    miércoles, 22 de julio de 2020 12:28
  • hola

    Lo de la descarga automatica lo veo dificil

    Se puede lanzar el reporte en segundo plano, eso se realiza en un thread y continuar navegando, eso seguro

    Ahora que se descargue mientras el usaurio puede estar en culquier parte navegando el sitio, no lo veo como se podria lograr. Lo unico que se me ocurre es que una vez que se termine se envie una notificacion al browser usando SignalR, entonces le mostrarias algun toast con el link de descarga donde se dejaria el archivo generado co el informe para que el usuario pulse y se descargue

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta elturle miércoles, 22 de julio de 2020 16:58
    miércoles, 22 de julio de 2020 13:11
  • Hola elturle, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.  

    Eric Ruiz 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    • Marcado como respuesta elturle miércoles, 22 de julio de 2020 16:58
    • Desmarcado como respuesta elturle miércoles, 22 de julio de 2020 16:58
    miércoles, 22 de julio de 2020 16:25
    Moderador