Scheduled Apex
Una clase Schedulable se ejecuta sola, cuando dice una expresión cron: a las 2:00 de lunes a viernes, el último día del mes o cuando necesites. Casi siempre, lo que hace es lanzar un Batch o un Queueable.
✓ En esta sub-lección
- 01Escribir una clase Schedulable que lance un Batch.
- 02Leer y escribir una expresión cron.
- 03Programarla con System.schedule y encontrarla en Setup.
La nutria: ¿Te acuerdas? · Repaso de la lección 4
¿Qué línea lanza el Batch de la migración en tandas de 200?
La migración ya es un Batch, pero cada mañana alguien del equipo abre Execute Anonymous y lo lanza a mano. El día que esa persona se va de vacaciones, la migración se para. Northwind quiere que arranque sola, de noche, cuando nadie usa la org.
Una interfaz más, un execute más
public class RenewalMigrationScheduler implements Schedulable {
public void execute(SchedulableContext sc) {
Database.executeBatch(new RenewalMigrationBatch(), 200); // lo pesado, en el Batch
}
}
System.schedule('Migración ERP · noches laborables', '0 0 2 ? * MON-FRI', new RenewalMigrationScheduler());El Schedulable es solo el despertador: su execute debería hacer poco y lanzar el trabajo de verdad, normalmente un Batch o un Queueable. Así lo pesado corre con sus propias tandas y su propio presupuesto. Si además necesitas llamar a otro sistema, tampoco se hace aquí directamente: se lanza un @future(callout=true) o un Queueable que lo haga.
La expresión cron: siete posiciones
Una se lee de izquierda a derecha: segundos, minutos, horas, día del mes, mes, día de la semana y, opcional, año. El asterisco significa «todos». Y una regla de Salesforce: día del mes y día de la semana no pueden ir los dos fijados; en uno de ellos va un interrogante, «me da igual».
¿A QUÉ HORA?
¿QUÉ DÍAS?
0
segundos
0
minutos
2
horas
?
día del mes
*
mes
MON-FRI
día de la semana
System.schedule('…', '0 0 2 ? * MON-FRI', new RenewalMigrationScheduler());A las 2:00, de lunes a viernes. Fijas el día de la semana, así que el día del mes lleva ?.
La nutria: ¿Y por qué no un Flow? Porque un flow programado no lanza tu Batch