Última actualización el 15 de junio de 2023 por Rakesh Gupta
Gran idea o pregunta duradera:
- ¿Cómo se puede utilizar el método System.schedule() para programar un trabajo de Apex Batch?
Objetivos:
Después de leer este blog, podrá:
- Configurar trabajo programado a través de la configuración de Salesforce
- Comprender la función y el significado del método System.schedule().
- Aprenda paso a paso cómo programar un trabajo de Apex Batch utilizando el método System.schedule().
- Explore ejemplos prácticos y casos de uso donde se puede implementar el método System.schedule().
- y mucho más
👉 En el pasado escribí algunos artículos sobre Apex . ¿Por qué no echarles un vistazo mientras estás en ello?
- Calcular la cobertura general del código en Salesforce
- Comprobar si una cadena es nula, vacía o en blanco en Apex
- Establecer fecha de creación para sObject de clase de prueba en Apex
Isabella Stewart trabaja como administradora de Salesforce en Gurukul On Cloud (GoC). Aunque es relativamente nueva en la programación de Apex, está ansiosa por explorar diferentes métodos para programar clases por lotes en Salesforce y ampliar su conocimiento en esta área.
¿Qué es un trabajo programado?
En Salesforce, un trabajo programado se refiere a una función que permite a los administradores y desarrolladores programar la ejecución automática de clases de Batch en momentos o intervalos específicos.
Los trabajos programados en Salesforce generalmente se usan para realizar varias acciones, como actualizaciones de datos, procesamiento de registros, envío de notificaciones por correo electrónico, generación de archivos PDF e integración con sistemas externos. Pueden ser particularmente útiles para tareas que deben realizarse a intervalos regulares, como por hora, día, semana o mes.
👉 Para programar una clase de Apex para que se ejecute a intervalos regulares, primero escriba una clase de Apex que implemente la interfaz Schedulable proporcionada por Salesforce.
la clase global ScheduleAccountSync implementa Programable { ejecución de vacío global (Contexto programable SC) { AccounSync ASync = new AccounSync(); } }
Enfoque de Campeón de Automatización (I-do):
Para crear un trabajo programado en Salesforce, puede usar Apex Scheduler a través de la configuración de Salesforce o el método System.schedule desde Developer Console (Ejecutar anónimo).
Programar trabajos con el programador de Apex
- Haga clic en Configuración .
- En el cuadro Búsqueda rápida, escriba Clases de Apex .
- Seleccione Clases de Apex y luego haga clic en Programar Apex .
- Ingrese la siguiente informacion:
- Nombre : Sincronizar cuenta con SAP
- Clase de Apex : ScheduleAccountSync
- Frecuencia : Para configurar como un trabajo diario, elija la opción Semanal y luego seleccione todos los días de la semana.
- Inicio : la fecha y la hora en que comenzó la iteración más reciente del trabajo programado.
- Fin : la fecha y la hora en que el trabajo terminó o terminará.
- Hora de inicio preferida : la fecha y la hora en que está programada la ejecución del trabajo
- Haga clic en Guardar .
👉 Puede monitorear el progreso del trabajo en la página Todos los trabajos programados .
Una limitación clave de Apex Scheduler radica en su incapacidad para ejecutar una tarea cada pocos minutos, cada seis horas o en días específicos, como el primer lunes o el último día hábil del mes. Para abordar esto, podemos utilizar el método System.schedule a través de la consola del desarrollador, que permite escenarios de programación más complejos.
Programar trabajos usando el método System.Schedule
Cuando una clase se implementa con la interfaz Schedulable , se puede usar el método System.schedule para ejecutarla. En particular, el programador opera a nivel del sistema, lo que garantiza que todas las clases se ejecuten independientemente de los permisos de los usuarios individuales.
El método System.schedule toma tres parámetros: el nombre del trabajo, una expresión que indica la hora y la fecha programadas para la ejecución del trabajo y el nombre de la clase. La estructura de la expresión cron es la siguiente:
Segundos Minutos Horas Día_de_mes Mes Día_de_semana Opcional_año
Los siguientes son los valores de la expresión:
Nombre | Valores | Caracteres especiales |
---|---|---|
Segundos | 0–59 | Ninguno |
Minutos | 0–59 | Ninguno |
Horas | 0–23 | , – * / |
Dia del mes | 1–31 | , – * ? / LW |
Mes | 1–12 o lo siguiente:
|
, – * / |
Día de la semana | 1–7 o lo siguiente:
|
, – * ? / L # |
año_opcional | nulo o 1970–2099 | , – * / |
Lea esta guía para desarrolladores de Salesforce para obtener más información sobre el método System.Schedule. No es posible actualizar los trabajos programados. Debe eliminar el trabajo existente y luego programarlo nuevamente.
Por ejemplo, si desea ejecutar la clase de Apex ScheduledAccountSync cada hora, específicamente cinco minutos después de cada hora, ejecute la siguiente declaración a través de Ejecutar de forma anónima en Developer Console.
System.schedule('AccountSyncJob', '0 5 * * * ?', new ScheduleAccountSync()); //AccountSyncJob = Nombre del trabajo //0 5 * * * ? = Expresión cron //ScheduleAccountSync = Clase de Apex con interfaz programable
También puede usar CronMaker , una aplicación simple que lo ayuda a crear expresiones cron para su escenario.
Aquí hay varios ejemplos que ilustran cómo utilizar la expresión cron.
Programe un trabajo para ejecutar cada seis horas de lunes a viernes
Para programar un trabajo para que se ejecute cada seis horas de lunes a viernes, ejecute la siguiente expresión cron:
System.schedule('AccountSyncJobWeekDayPerSixHour', '0 0 0,6,12,18 ? * MON-FRI', new ScheduleAccountSync());
Programar un trabajo para que se ejecute cada cuatro horas diariamente
Para programar un trabajo para que se ejecute cada cuatro horas diariamente, ejecute la siguiente expresión cron:
System.schedule('AccountSyncJobEveryFourHour', '0 0 0/4 * * ? *', new ScheduleAccountSync());
Programe un trabajo que se ejecute cada hora diariamente
Para programar un trabajo que se ejecuta cada hora a lo largo de cada día, utilice la siguiente expresión cron:
System.schedule('AccountSyncJobEveryHour', '0 0 0/1 * * ? *', new ScheduleAccountSync());
Programe un trabajo para que se ejecute cada 30 minutos diariamente
Para programar un trabajo que se ejecuta cada media hora todos los días, utilice la siguiente expresión cron:
System.schedule('AccountSyncJob0', '0 0 * * * ? *', new ScheduleAccountSync()); System.schedule('AccountSyncJob30', '0 30 * * * ? *', new ScheduleAccountSync());
Programe un trabajo para que se ejecute una vez al día a las 10:00 p. m.
Para programar un trabajo que se ejecute una vez al día a las 22:00, utilice la siguiente expresión cron:
System.schedule('AccountSyncJobOnceInADay', '0 0 22 * * ?', new ScheduleAccountSync());
Programe un trabajo para ejecutar el viernes y el sábado a las 11:00 p. m.
Para programar un trabajo que se ejecute los viernes y sábados a las 11:00 p. m., utilice la siguiente expresión cron:
System.schedule('AccountSyncJobVie-Sat', '0 0 23 ? * FRI,SAT *', new ScheduleAccountSync());
Programe un trabajo para ejecutar el viernes a las 11:00 p. m.
Para programar un trabajo que se ejecute el viernes a las 11:00 a. m., utilice la siguiente expresión cron:
System.schedule('AccountSyncJobFriOnly', '0 0 23 ? * VIE *', new ScheduleAccountSync());
Programe un trabajo para ejecutar el primer día de cada año a la 01:00 a. m.
Para programar un trabajo que se ejecuta el primer día de cada año, utilice la siguiente expresión cron:
System.schedule('AccountSyncJob-1er día del año', '0 0 1 1 1 ? *', new ScheduleAccountSync());
Programe un trabajo para ejecutar el último día de cada mes a la 01:00 a. m.
Para programar un trabajo que se ejecute el último día de cada mes, utilice la siguiente expresión cron:
System.schedule('AccountSyncJob-Último día del mes', '0 0 1 L * ? *', new ScheduleAccountSync());
Programe un trabajo para ejecutar el último viernes de cada mes a la 01:00 a. m.
Para programar un trabajo que se ejecute el último viernes de cada mes, utilice la siguiente expresión cron:
System.schedule('AccountSyncJob-Last Friday', '0 0 1 ? * 6L *', new ScheduleAccountSync());
Programe un trabajo para que se ejecute cada día 15 del mes a las 12:01 a. m.
Para programar un trabajo que se ejecute cada día 15 del mes, utilice la siguiente expresión cron:
System.schedule('AccountSyncJob-Every 15th', '0 1 0 15 * ? *', new ScheduleAccountSync());
Programe un trabajo para ejecutar el primer y tercer domingo de cada mes a las 2:00 a. m.
Para programar un trabajo que se ejecute el primer y tercer domingo de cada mes, utilice la siguiente expresión cron:
System.schedule('AccountSyncJob-1st Sunday', '0 0 2 ? 1/1 SUN#1 *', new ScheduleAccountSync()); System.schedule('AccountSyncJob-3rd Sunday', '0 0 2 ? 1/1 SUN#3 *', new ScheduleAccountSync());
Prueba de concepto
Evaluación formativa:
¡Quiero saber de ti!
¿Qué es una cosa que aprendiste de esta publicación? ¿Cómo imagina aplicar este nuevo conocimiento en el mundo real? Siéntase libre de compartir en los comentarios a continuación.
…
Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2023/06/15/mastering-the-art-of-scheduling-batch-class-in-apex/