Elegir la herramienta correcta
Cuatro herramientas asíncronas, cuatro trabajos distintos. Hoy aprendes a elegir, y a cambiar de herramienta cuando la elegida se queda corta: el @future de la tarea 2 pasa a Queueable.
✓ En esta sub-lección
- 01Elegir entre @future, Queueable, Batch y Scheduled según el trabajo.
- 02Pasar un @future a Queueable con Database.AllowsCallouts.
- 03Hacer el callout antes que el DML en la misma transacción.
La nutria: ¿Te acuerdas? · Repaso de la lección 5
¿Qué significa '0 0 2 ? * MON-FRI'?
El ERP ha pedido algo nuevo: saber qué renovaciones ya recibió. El @future de la tarea 2 envía, pero no te da un Id para seguirlo ni sabe encadenar un segundo paso. Es buen momento para poner las cuatro herramientas una al lado de otra.
| Herramienta | Úsala para… | Su límite a recordar |
|---|---|---|
| @future | Algo pequeño y suelto tras el guardado, como un callout sencillo. | Solo parámetros simples, sin Id de trabajo, no encadena. |
| Queueable | Lo mismo, cuando necesitas estado, seguirlo o encadenar pasos. | Un solo hijo por execute. |
| Batch | Recorrer muchos registros de un objeto, en tandas. | 5 en marcha a la vez; hasta 50 millones por trabajo. |
| Scheduled | Arrancar algo a una hora, normalmente un Batch o un Queueable. | 100 programados a la vez; sin callouts directos. |
NORTHWIND PIDE… ·aciertos 0/0
Avisar al ERP de cada renovación nueva, sin más.
Paso 1 de 6
Elige la herramienta asíncrona.
De @future a Queueable
Salesforce recomienda Queueable frente a @future para trabajo nuevo: hace lo mismo y más. El cambio es mecánico: los parámetros del método pasan a ser atributos que recibe el constructor, el cuerpo pasa a execute, y callout=true se convierte en una segunda interfaz, Database.AllowsCallouts.
// Antes
@future(callout=true)
public static void notifyRenewals(Set<Id> renewalIds) { … }
// Después
public class ErpSyncJob implements Queueable, Database.AllowsCallouts {
private Set<Id> renewalIds;
public ErpSyncJob(Set<Id> renewalIds) { this.renewalIds = renewalIds; }
public void execute(QueueableContext ctx) { … }
}La nutria: ¿Y por qué no un Flow? El mapa completo