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
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.