Checkpoint del Módulo 9
La entrega: la sincronización nocturna con el ERP. Un programador que despierta a las 2:00, un Batch que envía las renovaciones pendientes tanda a tanda y cuenta los resultados, y un Queueable que manda el resumen al terminar.
✓ En esta sub-lección
- 01Combinar Scheduled, Batch y Queueable en un solo proceso.
- 02Hacer callouts desde un Batch con Database.AllowsCallouts.
- 03Contar resultados entre tandas y lanzar el siguiente paso desde finish.
La nutria: ¿Te acuerdas? · Repaso de la lección 6
En un mismo execute tienes que llamar al ERP y guardar. ¿En qué orden?
Seis tareas preparando piezas. La última pide juntarlas: cada noche laborable, todas las renovaciones que el ERP todavía no tiene se le envían por tandas, cada una se marca como enviada, y al terminar el ERP recibe un resumen de cuántas entraron y cuántas fallaron.
| Pieza | Qué hace en la entrega | Tarea |
|---|---|---|
| Scheduled | Despierta a las 2:00 y lanza el Batch. | 5 |
| Batch + Stateful | Recorre las pendientes en tandas y cuenta resultados. | 4 |
| Database.AllowsCallouts | Deja al Batch llamar al ERP en cada tanda. | 6 |
| Queueable desde finish | Envía el resumen cuando no quedan tandas. | 3 y 6 |
| Database.update(…, false) | Una renovación que no se puede guardar no frena a las demás. | Módulo 8 |
synced
0
failed
0
para mañana
0
Paso 1 de 9
Una noche laborable cualquiera: 500 renovaciones que el ERP aún no tiene. Pulsa Reproducir.
Dos decisiones merecen atención. El tamaño de tanda es 100, no 200: cada tanda hace una llamada con todas sus renovaciones, y el ERP acepta como mucho 100 por petición. Y el callout va antes del Database.update, por la regla de la tarea 6. Si el ERP falla, la excepción deshace solo esa tanda, que seguirá pendiente (ERP_Synced__c = false) y entrará la noche siguiente.
La nutria: ¿Y por qué no un Flow? Porque son tres flows que no se hablan
Lo que viene: el Módulo 10
Todo este módulo ha supuesto que el código funciona. ¿Cómo lo demuestras antes de desplegarlo? Con tests. Y el asíncrono tiene truco: Test.startTest() y Test.stopTest() hacen que los trabajos encolados se ejecuten al momento, para poder comprobar su resultado. Es el Módulo 10, y sin él nada de esto llega a producción.