Skip to main content

Suscribirse a eventos de cambio empleando un desencadenador de Apex

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Redactar un desencadenador de Apex para suscribirse a eventos de cambio.
  • Genere notificaciones de eventos de cambio realizando actualizaciones en Salesforce.
  • Verificar mensajes de registro de depuración desde el desencadenador en el registro de depuración.
Nota

Nota

¿Es su idioma de aprendizaje español (LATAM)? En esta insignia, las validaciones de los retos prácticos de Trailhead funcionan en inglés. Entre paréntesis se incluyen las traducciones a modo de referencia. En su instancia de Trailhead Playground, asegúrese de (1) cambiar la configuración local a los Estados Unidos, (2) cambiar el idioma a inglés, y (3) copiar y pegar solo los valores en inglés. Siga las instrucciones que figuran aquí.

Consulte la insignia Trailhead en su idioma para obtener más información sobre cómo aprovechar la experiencia de Trailhead en otros idiomas.

Ha visto cómo suscribirse a eventos de cambio utilizando Conector de EMP, una herramienta basada en CometD. Los desencadenadores de Apex son otra forma de suscribirse a eventos de cambio. Aprendamos más sobre ellos.

Desencadenadores de Apex asíncronos para eventos de cambio

Puede suscribirse a eventos de cambio en Lightning Platform empleando desencadenadores de Apex. Los desencadenadores de Apex para eventos de cambio son similares a desencadenadores de Apex para objetos de Salesforce pero tienen algunas diferencias. Como un desencadenador de Apex para objetos de Salesforce, define un desencadenador de evento de cambio en el evento de cambio correspondiente al objeto de Salesforce. Solo se admiten desencadenadores after insert. 

Defina un desencadenador de evento de cambio con la palabra clave after insert en el evento de cambio empleando este formato.

trigger TriggerName on ChangeEventName (after insert) {
}

Este es un ejemplo para el objeto AccountChangeEvent, que es el evento de cambio correspondiente a Cuenta.

trigger MyAccountChangeTrigger on AccountChangeEvent (after insert) {
}

El desencadenador del evento de cambio se activa cuando se recibe uno o un lote de eventos de cambio. A diferencia de los desencadenadores de objetos, los desencadenadores de eventos de cambio se ejecutan de forma asíncrona después de que se complete la transacción de la base de datos. La ejecución asíncrona hace que los desencadenadores de eventos de cambio sean idóneos para el procesamiento de lógica de negocio que utilice muchos recursos manteniendo la lógica basada en las transacciones en el desencadenador del objeto. Desacoplando el procesamiento de los cambios, los desencadenadores de eventos de cambio pueden ayudar a reducir el tiempo de procesamiento de las transacciones.

Los desencadenadores de evento de cambio tienen estas características.

  • Se ejecutan bajo la entidad Proceso automatizado. Como tal, los registros de depuración para el desencadenador se crean por la entidad Proceso automatizado, y los campos del sistema, como CreatedById y OwnerId, hacen referencia al Proceso automatizado.
  • Están sujetos a los límites reguladores síncronos de Apex.
  • Tienen un tamaño de lote máximo de 2.000 mensajes de eventos (el número de elementos en Trigger.New).

Registro de evento de cambio de Apex y campos de encabezado

Debido a que los campos de un mensaje de evento de cambio están definidos estadísticamente, como en cualquier otro tipo de Apex, todos los campos de registros están presentes. A diferencia de los eventos de cambio recibidos en aplicaciones de CometD externas, los mensajes de eventos de cambio pueden contener campos vacíos (nulos). Los campos sin cambios son nulos, del mismo modo que los campos que se establecen explícitamente como nulos en una actualización. 

Para determinar qué campos se modificaron, utilice el campo de encabezado changedFields. Contiene una lista de campos de registros que se cambiaron en una operación de actualización. El desencadenador de ejemplo en esta unidad muestra cómo utilizar le campo changedFields para determinar qué campos se actualizaron o se eliminaron.

Nota

El encabezado de campo changedFields está disponible para desencadenadores de eventos de cambio de Apex guardados utilizando la versión 47.0 o posteriores de la API.

Crear un desencadenador de evento de cambio

Incorporar un desencadenador de evento de cambio es tan sencillo como agregar un desencadenador para un objeto de Salesforce. Utilizando la Developer Console, crea un desencadenador en el evento de cambio asociado con el objeto personalizado Empleado que creó anteriormente. El sistema crea el objeto de evento de cambio, EventoCambio__Empleado, cuando crea un objeto personalizado. 

Nota

Los siguientes pasos requieren que cree el objeto personalizado Employee__c primero. Siga los pasos en la unidad anterior para crear este objeto personalizado. 

Para crear el desencadenador de evento de cambio utilizando la Developer Console:

  1. Haga clic en el menú de acceso rápido ( Menú de acceso rápido).
  2. Haga clic en Developer Console.
  3. En Developer Console, seleccione File | New| Apex Trigger (Archivo | Nuevo | Desencadenador de Apex).
  4. En el campo Nombre, ingrese un nombre para el desencadenador: DesencadenadorCambioEmpleado.
  5. Desde el menú desplegable, seleccione el objeto de evento de cambio para el objeto personalizado Empleado: EventoCambio__Empleado. El desencadenador se crea con la palabra clave after insert.
  6. Sustituya el código predeterminado por el siguiente código.
trigger EmployeeChangeTrigger on Employee__ChangeEvent (after insert) {
  List<Task> tasks = new List<Task>();
  // Iterate through each event message.
  for (Employee__ChangeEvent event : Trigger.New) {
    // Get some event header fields
    EventBus.ChangeEventHeader header = event.ChangeEventHeader;
    System.debug('Received change event for ' +
      header.entityName +
      ' for the ' + header.changeType + ' operation.');
    // For update operations, we can get a list of changed fields
    if (header.changetype == 'UPDATE') {
        System.debug('List of all changed fields:');
        for (String field : header.changedFields) {
            if (null == event.get(field)) {
                System.debug('Deleted field value (set to null): ' + field);
            } else {
                System.debug('Changed field value: ' + field + '. New Value: '
                    + event.get(field));
            }
        }
    }
    // Get record fields and display only if not null.
    System.debug('Some Employee record field values from the change event:');
    if (event.First_Name__c != null) {
      System.debug('First Name: ' + event.First_Name__c);
    }
    if (event.Last_Name__c != null) {
      System.debug('Last Name: ' + event.Last_Name__c);
    }
    if (event.Name != null) {
      System.debug('Name: ' + event.Name);
    }
    if (event.Tenure__c != null) {
      System.debug('Tenure: ' + event.Tenure__c);
    }
    // Create a followup task
    Task tk = new Task();
    tk.Subject = 'Follow up on employee record(s): ' +
    header.recordIds;
    tk.OwnerId = header.CommitUser;
    tasks.add(tk);
  }
  // Insert all tasks in bulk.
  if (tasks.size() > 0) {
    insert tasks;
  }
}

Este desencadenador de evento de cambio itera por cada mensaje de evento de cambio recibido en Trigger.New. Para cada evento, el desencadenador obtiene algunos campos de encabezado. Si la operación es una actualización, el desencadenador también obtiene una lista de campos que se cambiaron accediendo al valor del encabezado changedFields. A continuación, el desencadenador muestra los valores de campos de registros si no son nulos. Finalmente, crea una tarea de seguimiento para nuevos registros de Empleado.

Nota

Desde la interfaz de usuario solo puede crear desencadenadores de eventos de cambio desde Developer Console. Los objetos de eventos de cambio no se enumeran en el Gestor de objetos en Lightning Experience o en Configuración en Salesforce Classic. 

Verificar la ejecución de desencadenadores de eventos de cambio

Verifiquemos ahora manualmente que el desencadenador está funcionando. Para recibir mensajes de eventos en el desencadenador, active primero el objeto en la página Captura de datos de cambio en Configuración. En un paso anterior ya habilitó las notificaciones para Empleado, así que puede omitir ese paso aquí. Debido a que los registros de depuración se crean bajo la entidad Proceso automatizado, habilite los registros de depuración en Configuración para esta entidad con el fin de que se recopilen los registros.

  1. Para abrir Configuración en una nueva ficha, haga clic en el menú de acceso rápido ( Menú de acceso rápido) y luego haga clic en Configuración.
  2. En Configuración, ingrese Registros de depuración en el cuadro Búsqueda rápida y, a continuación, seleccione Registros de depuración.
  3. Haga clic en Nueva.
  4. Para Tipo de entidad rastreada, seleccione Proceso automatizado.
  5. Seleccione el periodo de tiempo para el conjunto de registros. Las fechas de inicio y caducidad toman como valor predeterminado la fecha y la hora actuales. Amplíe la fecha de caducidad haciendo clic en el cuadro de entrada de fecha final, y seleccionando el siguiente día desde el calendario.
  6. Para Nivel de depuración, haga clic en Nuevo nivel de depuración. Ingrese CustomDebugLevel para el nombre, acepte los valores predeterminados.
  7. Haga clic en Guardar.

Deje la página Configuración de registros de depuración abierta, ya que volverá a ella en breve. A continuación, realice algunos cambios en Salesforce para activar el desencadenador de eventos de cambio. Cree un registro Empleado y luego actualícelo.

  1. En una nueva ficha, desde el Iniciador de aplicación ( Iniciador de aplicación), busque y seleccione Empleados.
  2. Haga clic en Nueva.
  3. Rellene los siguientes campos.
    • Nombre de empleado: e-200
    • Apellidos: Smith
    • Nombre: Joseph
    • Tenencia: 1
  4. Haga clic en Guardar.
  5. En la página de detalles del registro de empleado, haga clic en Modificar.
  6. Cambie el campo Nombre a Joe.
  7. Elimine el valor de Tenencia.
  8. Haga clic en Guardar.
  9. Cambie a la ficha Registros de depuración y actualice el navegador.
  10. Para ver los registros de depuración correspondientes a la creación del registro, haga clic en Ver junto al segundo registro de la lista (los registros se ordenan por el más reciente primero). El resultado de las instrucciones de System.debug tiene una apariencia parecida a lo siguiente.
  11. ...|DEBUG|Received change event for Employee__c for the CREATE operation.
    ...|DEBUG|Some Employee record field values from the change event:
    ...|DEBUG|First Name: Joseph
    ...|DEBUG|Last Name: Smith
    ...|DEBUG|Name: e-200
    ...|DEBUG|Tenure: 1.0
  12. Para ver los registros de depuración correspondientes a la actualización del registro, haga clic en Ver junto al primer registro de la lista. El resultado de las instrucciones de System.debug tiene una apariencia parecida a lo siguiente. Debido a que el sistema actualiza el campo LastModifiedDate cuando se actualiza el registro, este campo se enumera como parte de los campos cambiados.
  13. ...|DEBUG|Received change event for Employee__c for the UPDATE operation.
    ...|DEBUG|List of all changed fields:
    ...|DEBUG|Changed field value: LastModifiedDate. New Value: 2019-09-26 20:53:29
    ...|DEBUG|Changed field value: First_Name__c. New Value: Joe
    ...|DEBUG|Deleted field value (set to null): Tenure__c
    ...|DEBUG|Some Employee record field values from the change event:
    ...|DEBUG|First Name: Joe

¡Enhorabuena! Redactó un desencadenador de evento de cambio y verificó que está funcionando correctamente en la interfaz de usuario. En la siguiente unidad, obtiene información acerca de cómo redactar una prueba de Apex para el desencadenador de evento de cambio para automatizar la prueba de su desencadenador.

Recursos

¡Siga aprendiendo gratis!
Regístrese para obtener una cuenta y continuar.
¿Qué hay para usted?
  • Consiga recomendaciones personalizadas para sus objetivos profesionales
  • Practique sus aptitudes con retos prácticos y pruebas
  • Siga y comparta su progreso con empleadores
  • Póngase en contacto para recibir asesoramiento y oportunidades laborales