Apex Academy
Módulo 9·06·30 min

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 Admin esElegir entre un flow desencadenado, uno programado y uno autolanzado

✓ En esta sub-lección

  1. 01Elegir entre @future, Queueable, Batch y Scheduled según el trabajo.
  2. 02Pasar un @future a Queueable con Database.AllowsCallouts.
  3. 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
@futureAlgo pequeño y suelto tras el guardado, como un callout sencillo.Solo parámetros simples, sin Id de trabajo, no encadena.
QueueableLo mismo, cuando necesitas estado, seguirlo o encadenar pasos.Un solo hijo por execute.
BatchRecorrer muchos registros de un objeto, en tandas.5 en marcha a la vez; hasta 50 millones por trabajo.
ScheduledArrancar 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.

Para cada encargo de Northwind, ¿qué herramienta elegirías?

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.

Apex
// 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

Con franqueza, esto resume el módulo: el camino asíncrono de un flow cubre lo que harías con un @future o un Queueable sencillo, y un flow programado cubre un Scheduled pequeño. Donde Flow no llega es a la escala y al control: el tope diario de 250.000 interviews programadas, encadenar trabajos con estado, elegir el tamaño de las tandas o lanzar un Batch. Si tu caso cabe en Flow, Flow suele ser la mejor opción; si no cabe, ya sabes qué herramienta de Apex usar.