Definir y publicar eventos de plataforma
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Definir un evento de plataforma.
- Describir cómo se pueden publicar mensajes de eventos de plataforma en Apex.
- Usar un método Apex para publicar un evento.
- Publicar un evento empleando clics en un proceso o flujo.
- Publicar un evento con la API de REST mediante la inserción de un sObject.
Definir y publicar eventos de plataforma
Ahora que comprende qué son los eventos de plataforma y cuándo se usan, ¡vamos a ponernos manos a la obra con la definición de un evento de plataforma! ¿Se acuerda de la agencia de noticias Cloud News? Vamos a crear una definición de evento de plataforma que contenga los datos de los eventos de noticias.
Defina un evento de plataforma llamado Cloud News:
- En Configuración, ingrese Eventos de plataforma en el cuadro Búsqueda rápida y, a continuación, seleccione Eventos de plataforma.
- En la página Eventos de plataforma, haga clic en Nuevo evento de plataforma.
- Para Etiqueta, ingrese Cloud News.
- Para Etiqueta plural, ingrese Cloud News.
- Para Descripción, ingrese Eventos de Cloud News para acceder a las últimas noticias al instante.
- Para Comportamiento de publicación, mantenga el valor predeterminado de Publicar tras confirmar.
- Haga clic en Guardar.
- En la lista relacionada Relaciones y campos personalizados, haga clic en Nuevo.
- Seleccione Texto y haga clic en Siguiente.
- Para Etiqueta de campo/Nombre de campo, ingrese Ubicación.
- Para Longitud, ingrese 100. Mantenga los valores predeterminados de los demás campos y deje el campo Descripción vacío. Haga clic en Guardar.
- Realice los pasos 7, 8 y 9 para agregar los dos campos siguientes:
Etiqueta de campo/Nombre de campo |
Tipo de campo |
---|---|
Urgente |
Casilla |
Contenido de noticias |
Área de texto (largo) |
Para el evento Cloud News que acaba de definir, ha creado campos de diversos tipos, como un campo de texto o una casilla. Los tipos de campos compatibles con los eventos de plataforma son los siguientes:
- Casilla
- Fecha
- Fecha/hora
- Número
- Texto
- Área de texto (largo)
Retención de eventos y campo del sistema ReplayId
Salesforce almacena los eventos de plataforma de alto volumen durante 72 horas en el bus de eventos. Los eventos de volumen estándar que se definieron antes de Spring ’19 se almacenan durante 24 horas en el bus de eventos.
Puede recuperar eventos almacenados del bus de eventos utilizando el modelo de publicación y suscripción de la API. Puede recuperar todos los eventos almacenados o bien puede especificar el Id. de reproducción de un evento como la línea base para la parte de eventos recuperada. Con desencadenadores de Apex, puede reanudar un desencadenador suspendido y seleccionar los eventos sin procesar retenidos anteriormente. Descubre más adelante en este módulo cómo gestionar suscripciones de desencadenador de Apex.
Aunque Salesforce conserva mensajes de evento de manera temporal, no puede consultarlos mediante SOQL o SOSL. Del mismo modo, no puede utilizar mensajes de evento en la interfaz de usuario para informes, vistas de lista o búsquedas.
A cada mensaje de evento se le asigna un Id. opaco en el campo ReplayId. El valor de campo ReplayId, que se completa por el sistema cuando se entrega el evento a suscriptores, hace referencia a la posición del evento en la transmisión de eventos. No se garantiza que los valores de Id. de reproducción sean contiguos para los eventos consecutivos. Un suscriptor puede almacenar un valor de Id. de reproducción y usarlo en la renovación de la suscripción para recuperar eventos incluidos en el periodo de retención. Por ejemplo, un suscriptor puede recuperar eventos perdidos después de un error de conexión. Los suscriptores no deben computar los Id. de reproducción nuevos a partir de un Id. de reproducción almacenado para hacer referencia a otros eventos de la transmisión.
Sufijo de nombre de API
Cuando crea un evento de plataforma, el sistema anexa el sufijo __e para crear el nombre de API del evento. Por ejemplo, para el evento Cloud News, el nombre de API es Cloud_News__e. Use el nombre de API siempre que haga referencia al evento de forma programática, como en Apex, la API de REST y el modelo de publicación y suscripción de la API.
Eventos de plataforma y transacciones
Los eventos de plataforma que están definidos con el comportamiento de publicación Publicar tras confirmar son transaccionales y pueden revertirse, pero aquellos definidos con el comportamiento de publicación Publicar inmediatamente no se pueden revertir. Observe las diferencias siguientes en el comportamiento.
Comportamiento de publicación Publicar tras confirmar
Un evento de plataforma definido con el comportamiento Publicar tras confirmar se publica únicamente después de que se confirme correctamente una transacción. Defina un evento con esta opción si los suscriptores dependen de los datos que confirme la transacción de publicación. Por ejemplo, imagine que un proceso publica un mensaje de evento y crea un registro de tarea. A continuación, se desencadena un segundo proceso suscrito a un evento y que espera localizar el registro de la tarea. Otro motivo para seleccionar este comportamiento es cuando no desee que el mensaje de evento se publique si falla la transacción.
Comportamiento de publicación Publicar inmediatamente
Un evento de plataforma definido con el comportamiento Publicar inmediatamente se publica cuando la llamada de publicación se ejecuta. Seleccione esta opción si desea que el mensaje de evento se publique independientemente de si la transacción se realiza correctamente. Seleccione esta opción también si el publicador y los suscriptores son independientes, y los suscriptores no dependen de los datos confirmados por el publicador. Por ejemplo, el comportamiento de publicación inmediata es la opción perfecta para eventos que se utilizan con fines de registro. Con esta opción, un suscriptor puede recibir el mensaje de evento antes de que la transacción del publicador confirme los datos.
Publicar eventos
Si su aplicación se encuentra en la plataforma de Salesforce, puede publicar eventos mediante un método Apex o con la herramienta declarativa Flow Builder. Si tiene una aplicación externa, puede publicar eventos mediante las API de Salesforce, incluido el modelo de publicación y suscripción de la API y las API de datos, como la API de REST.
Publicar mensajes de eventos mediante Apex
Para publicar mensajes de eventos, cree una instancia de un evento y pásela al método EventBus.publish()
.
En el siguiente ejemplo se crea un evento del tipo Cloud_News__e
, se publica y, a continuación, se comprueba si la publicación se ha procesado correctamente o ha generado errores. El método EventBus.publish()
devuelve un objeto Database.SaveResult
, el cual contiene el resultado de la publicación. Si isSuccess()
devuelve true
, la solicitud de publicación se coloca en cola en Salesforce y el mensaje de evento se publica de forma asíncrona. Si If isSuccess()
devuelve false
, la operación de publicación de eventos dio como resultado errores, que se devuelven en el objeto Database.Error
. Este método no devuelve una excepción debido a una operación de publicación incorrecta.
Puede ejecutar el fragmento de código de Apex en Developer Console.
- Desde el menú de acceso rápido (), seleccione Developer Console.
- Haga clic en Debug (Depurar) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
- En la nueva ventana, sustituya todo el contenido por el fragmento de código y haga clic en Execute (Ejecutar).
// Create an instance of the event and store it in the newsEvent variable Cloud_News__e newsEvent = new Cloud_News__e( Location__c='Mountain City', Urgent__c=true, News_Content__c='Lake Road is closed due to mudslides.'); // Call method to publish events Database.SaveResult sr = EventBus.publish(newsEvent); // Inspect publishing result if (sr.isSuccess()) { System.debug('Successfully published event.'); } else { for(Database.Error err : sr.getErrors()) { System.debug('Error returned: ' + err.getStatusCode() + ' - ' + err.getMessage()); } }
Para publicar más de un evento en la misma llamada, agregue los eventos a una lista de eventos y pase la lista al método EventBus.publish()
. El resultado de este método es una matriz de objetos Database.SaveResult
(uno para cada evento publicado). EventBus.publish()
puede publicar algunos eventos que se pasan, incluso cuando otros eventos no pueden publicarse debido a errores. El método EventBus.publish()
no devuelve excepciones provocadas por una operación de publicación incorrecta. Es parecido en su comportamiento al método de Apex Database.insert()
cuando se llama con la opción de éxito parcial.
// List to hold event objects to be published. List<Cloud_News__e> newsEventList = new List<Cloud_News__e>(); // Create event objects. Cloud_News__e newsEvent1 = new Cloud_News__e( Location__c='Mountain City', Urgent__c=true, News_Content__c='Lake Road is closed due to mudslides.'); Cloud_News__e newsEvent2 = new Cloud_News__e( Location__c='Mountain City', Urgent__c=false, News_Content__c='Small incident on Goat Lane causing traffic.'); // Add event objects to the list. newsEventList.add(newsEvent1); newsEventList.add(newsEvent2); // Call method to publish events. List<Database.SaveResult> results = EventBus.publish(newsEventList); // Inspect publishing result for each event for (Database.SaveResult sr : results) { if (sr.isSuccess()) { System.debug('Successfully published event.'); } else { for(Database.Error err : sr.getErrors()) { System.debug('Error returned: ' + err.getStatusCode() + ' - ' + err.getMessage()); } } }
Cuando los recursos del sistema están disponibles, Salesforce publica los eventos en cola de la llamada EventBus.publish()
de forma asíncrona y los almacena en el bus de eventos por un periodo de retención específico. La mayoría de las veces, no debe preocuparse por el resultado final de la publicación de eventos en cola porque la publicación eventual tiene éxito. En casos aislados, puede ocurrir un error del sistema interno y puede provocar un fallo en la publicación asíncrona. Para obtener confirmación del resultado de publicación de eventos final, use las devoluciones de llamada de publicación de Apex. Para obtener más información, consulte Obtener el resultado de la publicación de eventos de plataforma asíncrona mediante las devoluciones de llamada de publicación de Apex en la Guía del desarrollador de eventos de plataforma.
Publicar mensajes de eventos mediante clics
Para publicar mensajes de eventos sin código, use la función de creación de registros en Flow Builder. Configure un elemento Crear registros para crear una instancia del evento de plataforma (Cloud_News__e
) y, a continuación, establezca los valores para el evento. Para establecer el valor del campo Booleano, como por ejemplo Urgent__c
, use {!$GlobalConstant.True}
.
Publicar mensajes de eventos mediante las API de Salesforce
Las aplicaciones externas usan una API para publicar mensajes de eventos de plataforma. Puede publicar eventos usando el modelo de publicación y suscripción de la API o las API de datos, como la API de SOAP, la API de REST o la API masiva.
Cuando usa las API de datos, se publican eventos de la misma forma en que se insertan objetos sObject. Como con Apex, el mensaje de evento se publica de forma asíncrona. Cuando publica un evento y recibe un estado de operación correcta true
, la solicitud de publicación se pone en cola en Salesforce.
Por ejemplo, para el evento Cloud News, puede publicar notificaciones del evento mediante la inserción de registros Cloud_News__e
. En el siguiente ejemplo se crea un evento del tipo Cloud_News__e
en la API de REST.
Extremo REST de sObject:
Cuerpo de una solicitud POST:
Una vez creado el mensaje de evento de plataforma, la respuesta de REST es similar al siguiente resultado.
Puede usar cualquier herramienta de la API de REST o una aplicación cliente HTTP para realizar llamadas de API de REST. Por ejemplo, puede usar Postman mediante los siguientes pasos. Si nunca usó Postman, consulte Inicio rápido: El proyecto Conectar Postman a Salesforce para configurar y bifurcar la recopilación de API de Salesforce. Obtenga más información acerca de Postman en la sección Recursos.
Conecte su organización de DE con Postman.
- Inicie sesión en su organización de DE de Trailhead.
- Abra la aplicación Postman, seleccione un espacio de trabajo y vaya a su bifurcación de la recopilación de API de Salesforce.
- En la ficha Autorización, desplácese a la parte inferior y haga clic en Obtener un nuevo token de acceso.
- Haga clic en Allow (Permitir).
- En el cuadro de diálogo Gestionar los tokens de acceso, copie la URL de ejemplo en su portapapeles.
- Haga clic en Utilizar token.
- En la ficha Variables, en la fila _endpoint de la columna VALOR ACTUAL, pegue la URL de ejemplo que copió y haga clic en Guardar. Puede que necesite cerrar el panel de documentación para ver el botón Guardar.
- Pruebe que su conexión funcione correctamente.
- En Recopilaciones, seleccione la bifurcación de la recopilación de API de Salesforce.
- Seleccione REST para ampliar las API de REST.
- Seleccione los Límites de las GET y haga clic en Enviar.
- En la ventana de respuesta, en el campo Estado debería aparecer Status: 200 OK. Si no aparece, repita los pasos para obtener un nuevo token.
Realice una llamada a la API de REST para publicar notificaciones de eventos.
- En su bifurcación de la recopilación de API de Salesforce, haga clic en REST.
- Haga clic en SObject para ampliar la sección.
- Haga clic en Crear SObject mediante POST.
- En la ficha Params (Parámetros), en Path Variables (Variables de ruta), para
SOBJECT_API_NAME
, escribaCloud_News__e
.
- En la ficha Body (Cuerpo), pegue el siguiente cuerpo JSON.
{ "Location__c" : "Mountain City", "Urgent__c" : true, "News_Content__c" : "Lake Road is closed due to mudslides." }
- Haga clic en Enviar. La respuesta que devuelve Salesforce después de la publicación del evento es similar a la siguiente.
{ "id" : "e00xx0000000001AAA", "success" : true, "errors" : [ { "statusCode": "OPERATION ENQUEUED", "message": "08ffc869-b9f8-4cff-a4ba-8dff9b3dd6cb", "fields": [] } ] }
Ahora que ya sabe cómo se definen y publican eventos, vamos a explicar cómo suscribirse a ellos.
Recursos
-
Guía del desarrollador de eventos de plataforma: Asignaciones de eventos de plataforma
-
Guía del desarrollador de Apex: Límites de ejecución y reguladores
-
Ayuda de Salesforce: Flujos
-
Trailhead: Inicio rápido: Conectar Postman a Salesforce
-
Ayuda externa: Centro de aprendizaje de Postman
-
Documentación de la API de Pub/Sub
-
Guía del desarrollador de la API de REST
-
Guía del desarrollador de la API de SOAP
-
Guía del desarrollador de la API masiva