26 de junio de 2011

Planificar tareas

Artículo original: Scheduling Tasks
http://doughennig.blogspot.com/2007/04/scheduling-tasks.html
Autor: Doug Hennig
Traducido por: Ana María Bisbé York

Stonefield Query tiene hace algunos años un planificador de informes. Nosotros simplemente empleamos el Planificador de tareas de Windows para ejecutar Stonefield Query, con el nombre de los informes a ejecutar y dónde enviar las salidas como parámetros, según el plan deseado. Para comunicarnos con el Planificador de Tareas, utilizamos el TaskScheduler.DLL, escrito por Mark Pryor. Parece que el sitio de donde lo descargué ya no está activo, por lo que está incluido en la descarga que mencionaré luego.

Sin embargo, después de actualizar a Windows Vista, descubrí que no trabajaba el planificador. Investigando este problema, descubrí que Windows Vista incluye Planificador de Tareas 2.0, donde la DLL fue escrita para soportar el Planificador de Tareas 1.0, que tiene una interfaz completamente diferente. Por tanto, volvemos al pasado, a la pizarra de dibujo.

Afortunadamente, la documentación de MSDN sobre el Planificador de Tareas 2.0 tenía toneladas de detalles y muchos ejemplos escritos en VBScript, que son fácilmente convertibles a VFP. Debido a que aun necesito utilizar el Planificador de Tareas 1.0, con XP y los sistemas anteriores, decidí crear una clase base TaskScheduler y a partir de ella, unas subclases XP y Vista.

No voy a mostrar el código para estas clases porque es muy largo (se puede descargar desde la página Technical Papers de mi sitio Web); pero he aquí algunos ejemplos sobre lo fácil que son de utilizar estas clases para planificar tareas. Estos ejemplos corren en Vista, en su lugar, emplee XPTaskScheduler para Windows XP o anterior.
* Crear una tarea que se ejecute cada día a las 3:00 AM.

loSchedule = createobject('VistaTaskScheduler')
with loSchedule
  .TaskName = 'Nombre de mi tarea'
  .UserName = 'Nombre de usuario de Windows'
  .Password = 'Contraseña de Windows'
  .StartTime = {^2007-04-26 03:00:00}
  .EXEName = 'Ruta completa del EXE'
  .EXEParameters = 'Todos los parámetros a pasar'
  .ScheduleType = 1 && diario
  if not .CreateTask()
    messagebox(.ErrorMessage)
  endif not .CreateTask()
endwith

* Crear una tarea  que se ejecute Martes, Jueves y Sábados a las 3:00 AM
* cada dos semanas.

loSchedule = createobject('VistaTaskScheduler')
with loSchedule
  .TaskName = 'Nombre de mi tarea'
  .UserName = 'Nombre de usuario de Windows'
  .Password = 'Contraseña de Windows'
  .StartTime = {^2007-04-26 03:00:00}
  .EXEName = 'Ruta completa del EXE'
  .EXEParameters = 'Todos los parámetros a pasar'
  .ScheduleType = 2 && semanal
  .Interval = 2
  store .T. to .DaysOfWeek[3], .DaysOfWeek[5], .DaysOfWeek[7]
  if not .CreateTask()
    messagebox(.ErrorMessage)
  endif not .CreateTask()
endwith

* Crear una tarea mensual que corra los días 1ro y 15 de cada mes a las 3:00 AM

loSchedule = createobject('VistaTaskScheduler')
with loSchedule
  .TaskName = 'Nombre de mi tarea'
  .UserName = 'Nombre de usuario de Windows'
  .Password = 'Contraseña de Windows'
  .StartTime = {^2007-04-26 03:00:00}
  .EXEName = 'Ruta completa del EXE'
  .EXEParameters = 'Todos los parámetros a pasar'
  .ScheduleType = 3
  store .T. to .DaysOfMonth[1], .DaysOfMonth[15]
  .MonthsOfYear = .T. && inicializa los 12 elementos de la matriz en .T.
  if not .CreateTask()
    messagebox(.ErrorMessage)
  endif not .CreateTask()
endwith

No hay comentarios. :

Publicar un comentario