Apex Academy
Módulo 9·03·30 min

Queueable Apex

Un Queueable es una clase que se mete en la cola. A diferencia de @future, puede guardar estado, recibir registros, devolverte un Id para seguirlo y encolar el siguiente paso cuando termina.

En Admin esUn flow que al terminar se lanza a sí mismo para la siguiente tanda

✓ En esta sub-lección

  1. 01Escribir una clase que implemente Queueable y encolarla con System.enqueueJob.
  2. 02Encadenar trabajos: que cada uno procese una tanda y encole el siguiente.
  3. 03Seguir un trabajo por su Id en AsyncApexJob.

La nutria: ¿Te acuerdas? · Repaso de la lección 2

Un @future ha terminado de avisar al ERP y quieres lanzar un segundo paso. ¿Puede llamar a otro @future?

Las 300.000 renovaciones de la migración ya están en Salesforce, en un objeto de preparación, ERP_Renewal__c, esperando a convertirse en oportunidades. El importador del Módulo 8 sabe convertirlas, pero de 300.000 en una transacción, no. Hay que trocear: 200 por trabajo, y que cada trabajo lance el siguiente.

Una interfaz, un método

Apex
public class RenewalMigrationJob implements Queueable {
    public void execute(QueueableContext ctx) {
        // lo que hay que hacer, en su propia transacción asíncrona
    }
}

Id jobId = System.enqueueJob(new RenewalMigrationJob());   // a la cola
Es la interfaz del Módulo 5: un contrato con un solo método, execute. Salesforce lo llama cuando le toca el turno.

Como es un objeto, un Queueable puede tener atributos y constructor: puedes pasarle una lista de registros, un contador o la fase del proceso. Y System.enqueueJob te devuelve un Id: con él consultas AsyncApexJob (Status, NumberOfErrors) o lo ves en Setup → Apex Jobs. Con @future no tenías ni lo uno ni lo otro.

Encadenar: el trabajo que se relanza

Dentro de execute puedes encolar otro trabajo, uno solo. Esa es la llave de la migración: cada trabajo consulta las siguientes 200 filas sin procesar, las procesa y, si ha llenado la tanda, se encola de nuevo. Cuando una tanda sale incompleta, ya no quedan más y la cadena se detiene sola.

LA CADENA · CADA ESLABÓN, UNA TRANSACCIÓN

  1. #1 · 200
  2. #2 · 200
  3. #3 · 200
  4. #4 · 200
  5. #5 · 100

filas procesadas

0

pendientes

900

Paso 1 de 6

Cada trabajo toma 200 filas y, si ha llenado la tanda, se encola otra vez. Pulsa Reproducir.

Elige cuántas filas hay que migrar y sigue la cadena: cada eslabón es una transacción nueva, con su presupuesto a cero.

La nutria: ¿Y por qué no un Flow? Porque un flow no se relanza a sí mismo

Lo más parecido en Flow es un flow programado sobre ERP_Renewal__c, que crea una interview por fila. Con su máximo de 250.000 interviews al día (o 200 por licencia, si es mayor), la migración necesitaba dos días, y ese cupo diario es de toda la org: lo gastaba también cualquier otro flow programado. Y un flow no puede, al terminar, lanzarse a sí mismo para la siguiente tanda con lo que sabe. La cadena de Queueables empieza la siguiente tanda en cuanto acaba la anterior.