Apex Academy

Desafío 2

Suite de Automatización de Operaciones de Ventas

Trigger handler con excepciones propias, Batch de re-scoring, callout asíncrono, tests reales y seguridad aplicada.

Bloqueado

Completa el módulo requisito para desbloquear este desafío. · Módulo 12: Seguridad

La nutria: Antes de empezar: ¿te acuerdas?

¿Qué significa que tu código sea «bulk-safe»?

Operaciones de Ventas quiere cerrar el círculo: que las Opportunities se puntúen solas cada noche, que el CRM avise a un sistema externo cuando una oportunidad grande cambia de fase, y que nada de esto se salte los permisos del usuario que lo dispara.

Este desafío junta todo el curso en una sola entrega: los cuatro componentes se evalúan por separado, pero la retroalimentación mira el conjunto. Si el Batch es eficiente pero el test no comprueba nada, no está terminado.

La nutria: Cómo lo harías con clics

Con clics lo habrías repartido en varias herramientas: una regla de validación con PRIORVALUE(StageName) para frenar los saltos de fase, un Scheduled Flow nocturno para puntuar las oportunidades, una acción HTTP Callout en un flow para avisar al sistema externo y la Field-Level Security para que nadie escriba donde no debe. El que no aguanta es el Scheduled Flow: cada registro es una interview, y hay un máximo diario de 250.000 interviews (o 200 por licencia de usuario, si es mayor), así que una cartera de un millón de oportunidades no cabe en una noche. Un Batch procesa millones en tandas. Aquí cada pieza es un componente, y te acompaño en todos: la excepción es tu mensaje de validación, el Batch es tu Scheduled Flow sin ese techo, el callout asíncrono es tu HTTP Callout y el test es la prueba que Salesforce exige antes de dejarte desplegar.

Lo que vas a construir

  • 1

    Handler con excepciones propias

    OpportunityStageHandler.cls

    Valida la transición de fase y lanza una excepción personalizada cuando es inválida.

  • 2

    Batch de re-scoring

    OpportunityRescoreBatch.cls

    Implementa Database.Batchable<sObject> con start, execute y finish.

  • 3

    Notificación asíncrona con callout

    StageNotifier.cls

    Un método @future(callout=true) o una clase Queueable que implemente Database.AllowsCallouts.

  • 4

    Clase de test

    SalesOpsAutomationTest.cls

    Anotada con @isTest y con datos creados en el test, no consultados de la org.

Criterios de evaluación

  • ¿El Batch procesaría 5 millones de Opportunities sin tocar los límites, o solo las 200 de tu prueba?
  • Si mañana desactivan el sistema externo, ¿qué ve el usuario? ¿Un error críptico o nada en absoluto?
  • Tus tests, ¿fallarían si alguien borrara la línea que calcula la puntuación? Si no, no están probando nada.
  • La seguridad, ¿está aplicada o declarada? with sharing protege registros; FLS protege campos. Son dos cosas distintas.
Volver al inicio