Apex Academy
Módulo 11·Checkpoint·50 min

Checkpoint del Módulo 11

La entrega: abrir la «caja cerrada» que llamaba al ERP y rehacerla bien. Petición con su formato, código de estado comprobado, respuesta leída con moldes, y marcar como enviadas solo las renovaciones que el ERP aceptó.

En Admin esUna carga de Data Loader con su success.csv y su error.csv, pero contra otro sistema

✓ En esta sub-lección

  1. 01Montar una petición POST con cuerpo JSON y su cabecera.
  2. 02Leer una respuesta con listas y objetos anidados.
  3. 03Actuar registro a registro según lo que respondió el otro sistema.

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

¿Qué impide que un reintento se convierta en un bucle infinito?

Durante tres módulos, el código que enviaba las renovaciones al ERP fue una caja cerrada. Ábrela: envía sin decir en qué formato, no mira el código de estado, no lee la respuesta y marca todo como enviado. Y el ERP lleva meses contestando con algo que nadie leía: qué renovaciones aceptó y cuáles rechazó, con su motivo.

PiezaQué hace en la entregaTarea
HttpRequest + HttpPOST con el cuerpo y la cabecera Content-Type.1
getStatusCode()Si no es 200, excepción: no se lee ni se marca nada.1
JSON y moldesLa lista accepted y la lista de objetos rejected.2
Named Credentialcallout:ERP: ni dirección ni clave en el código.3
Callout antes que DMLPrimero la respuesta, después el update.6
  • ERP-100
  • ERP-200
  • ERP-300

Paso 1 de 4

Tres renovaciones pendientes de enviar. Pulsa Reproducir.

Sigue un envío completo: qué sale, qué vuelve y qué renovaciones quedan marcadas con la caja vieja y con la nueva.

Un molde con una lista dentro

Apex
// {"accepted":["ERP-100"],"rejected":[{"erpCode":"ERP-200","reason":"Cliente bloqueado"}]}
public class Rejection {
    public String erpCode;
    public String reason;
}
public class PushResult {
    public List<String> accepted;        // una lista de textos
    public List<Rejection> rejected;     // una lista de objetos, cada uno con su molde
}
Los corchetes del JSON son List en Apex; las llaves, una clase. Un molde puede contener otros, como un objeto con su lista relacionada.

La nutria: ¿Y por qué no un Flow? Aquí está la frontera

Este módulo ha sido honesto con Flow: una llamada sencilla, con su Named Credential y su JSON de forma fija, se hace bien con la acción HTTP Callout. La frontera está en lo que has construido aquí: una tanda de 100 renovaciones en una sola petición, una respuesta que hay que cruzar registro a registro, tu propia API con sus códigos de estado, un sistema SOAP y reintentos con contador. Cuando la integración es eso, es código. Saber dónde está esa frontera es lo que te distingue de quien solo sabe una de las dos cosas.

Lo que viene: el Módulo 12

En la tarea 4 escribiste with sharing sin saber del todo qué hacía. El último módulo va de eso: Apex puede ejecutarse con más poder que el usuario que lo dispara, y asegurarte de que no enseña ni cambia lo que ese usuario no debería tocar es responsabilidad tuya. Es el Módulo 12, y con él se desbloquea el Desafío 2.