none
automatizar un proceso RRS feed

  • Pregunta

  • Buenos días a todos! A ver si alguno puede orientarme un poco.. he logrado exportar a pdf un listado de tareas diarias que realizan varias personas. A este pdf lo mando por mail todos los días. La pregunta es como puedo hacer para que estos pdf se "manden solos" todos los días a la misma hora? 
    Si alguno conoce como poder automatizar este proceso se lo agradecería. Algún link por donde pueda buscar ayuda! 
    Trabajo en visual basic

    jueves, 6 de diciembre de 2018 1:07

Respuestas

  • Si no quieres programar, usa el Programador de Tareas de Windows. SImplemente toma el código que ya tienes para enviar los PDF y mételo en una aplicación de tipo Consola. Después al Programador de Tareas (Scheduler) le dices que ejecute esa aplicación todos los días a la hora que quieras.

    Desde luego, hay herramientas que ya hacen esto. Si la generación del PDF la haces desde un informe de SSRS, puedes usar las propias herramientas de SSRS para pedirle que ese informe lo envíe en formato PDF todos los días.

    Si no quieres usar el programador de tareas ni ninguna otra herramienta existente, sino que quieres programarlo personalmente, entonces tendrías que hacer un Servicio Windows. Es una de las herramientas que te salen en Visual Studio cuando seleccionas "Nuevo proyecto". En el servicio, hay varias formas de programarlo, pero una muy sencilla es tomar el DateTime.Now y restarlo del día y hora en que quieres enviar el PDF. Eso te devuelve el tiempo que falta. Haces un Sleep que dure ese tiempo, y al final del Sleep envías el correo, y vuelves a hacer el mismo cálculo metiendo el día siguiente. Otra opción es meter en el Servicio un Timer que se dispare cada minuto, y cuando se dispare comparar si la hora actual es la hora deseada y en ese caso enviar el correo.

    • Propuesto como respuesta Pablo Rubio jueves, 6 de diciembre de 2018 15:18
    • Marcado como respuesta Valeria heredia viernes, 7 de diciembre de 2018 20:16
    jueves, 6 de diciembre de 2018 6:56
  • Public Class Form1
    
        Private Hora As String
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Hora = TextBox1.Text
            Timer1.Enabled = True
        End Sub
    
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            If Hora = Date.Now.ToShortTimeString Then
                'Enviar el correo a los destinatarios
            Else
                'Hacer otra cosa
            End If
        End Sub
    
    End Class

    • Propuesto como respuesta Pablo Rubio jueves, 6 de diciembre de 2018 15:18
    • Marcado como respuesta Valeria heredia viernes, 7 de diciembre de 2018 20:16
    jueves, 6 de diciembre de 2018 13:32

Todas las respuestas

  • Si no quieres programar, usa el Programador de Tareas de Windows. SImplemente toma el código que ya tienes para enviar los PDF y mételo en una aplicación de tipo Consola. Después al Programador de Tareas (Scheduler) le dices que ejecute esa aplicación todos los días a la hora que quieras.

    Desde luego, hay herramientas que ya hacen esto. Si la generación del PDF la haces desde un informe de SSRS, puedes usar las propias herramientas de SSRS para pedirle que ese informe lo envíe en formato PDF todos los días.

    Si no quieres usar el programador de tareas ni ninguna otra herramienta existente, sino que quieres programarlo personalmente, entonces tendrías que hacer un Servicio Windows. Es una de las herramientas que te salen en Visual Studio cuando seleccionas "Nuevo proyecto". En el servicio, hay varias formas de programarlo, pero una muy sencilla es tomar el DateTime.Now y restarlo del día y hora en que quieres enviar el PDF. Eso te devuelve el tiempo que falta. Haces un Sleep que dure ese tiempo, y al final del Sleep envías el correo, y vuelves a hacer el mismo cálculo metiendo el día siguiente. Otra opción es meter en el Servicio un Timer que se dispare cada minuto, y cuando se dispare comparar si la hora actual es la hora deseada y en ese caso enviar el correo.

    • Propuesto como respuesta Pablo Rubio jueves, 6 de diciembre de 2018 15:18
    • Marcado como respuesta Valeria heredia viernes, 7 de diciembre de 2018 20:16
    jueves, 6 de diciembre de 2018 6:56
  • Public Class Form1
    
        Private Hora As String
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Hora = TextBox1.Text
            Timer1.Enabled = True
        End Sub
    
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            If Hora = Date.Now.ToShortTimeString Then
                'Enviar el correo a los destinatarios
            Else
                'Hacer otra cosa
            End If
        End Sub
    
    End Class

    • Propuesto como respuesta Pablo Rubio jueves, 6 de diciembre de 2018 15:18
    • Marcado como respuesta Valeria heredia viernes, 7 de diciembre de 2018 20:16
    jueves, 6 de diciembre de 2018 13:32
  • Observacion: Notese que eso no valdra para nada si el Form no esta abierto, o si esta ocupado en ese momento ejecutando otra cosa (con lo que el Timer no se dispara), y no digamos ya si el programa no esta en marcha o si no hay ningun usuario logado en ese momento.

    Por eso yo recomendaba meter el codigo en un Servicio Windows.

    • Propuesto como respuesta Pablo Rubio jueves, 6 de diciembre de 2018 15:18
    jueves, 6 de diciembre de 2018 14:42