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.
Ya vio cómo suscribirse a eventos de cambio usando el modelo de publicación y suscripción de la API. 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 2000 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. Los mensajes de evento de cambio de Apex 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.
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.
Para crear el desencadenador de evento de cambio utilizando la Developer Console:
- Haga clic en el menú de acceso rápido ( ).
- Haga clic en Developer Console.
- En Developer Console, seleccione File | New| Apex Trigger (Archivo | Nuevo | Desencadenador de Apex).
- En el campo Nombre, ingrese un nombre para el desencadenador:
EmployeeChangeTrigger
.
- 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
.
- 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.
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.
- Para abrir Configuración en una nueva ficha, haga clic en el menú de acceso rápido ( ) y luego haga clic en Configuración.
- En Setup (Configuración), ingrese
Debug Logs
(Registros de depuración) en el cuadro Quick Find (Búsqueda rápida) y, a continuación, seleccione Debug Logs (Registros de depuración).
- Haga clic en Nueva.
- Para Tipo de entidad rastreada, seleccione Proceso automatizado.
- 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.
- Para Nivel de depuración, haga clic en Nuevo nivel de depuración. Ingrese
CustomDebugLevel
para el nombre, acepte los valores predeterminados.
- 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.
- En una nueva ficha, desde el Iniciador de aplicación ( ), busque y seleccione Empleados.
- Haga clic en Nueva.
- Rellene los siguientes campos.
- Nombre de empleado:
e-200
- Apellidos:
Smith
- Nombre:
Joseph
- Tenencia:
1
- Haga clic en Guardar.
- En la página de detalles del registro de empleado, haga clic en Modificar.
- Cambie el campo First Name (Nombre) a
Joe
.
- Elimine el valor de Tenencia.
- Haga clic en Guardar.
- Cambie a la ficha Registros de depuración y actualice el navegador.
- 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.
...|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
- 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.
...|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
-
Salesforce Developers: Guía del desarrollador de captura de datos de cambio: Suscribirse con desencadenadores de Apex
-
Salesforce Developers: Guía del desarrollador de Apex