Skip to main content

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

Nota

El reto práctico para esta insignia está localizado al japonés, español (LATAM) y portugués (Brasil). Para cambiar el idioma de su Trailhead Playground, siga estas instrucciones. Puede que la localización esté desactualizada. Si no aprueba el reto con las instrucciones localizadas, cambie el idioma a inglés y la configuración local a Estados Unidos, y vuelva a intentarlo.

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

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:

  1. En Configuración, ingrese Eventos de plataforma en el cuadro Búsqueda rápida y, a continuación, seleccione Eventos de plataforma.
  2. En la página Eventos de plataforma, haga clic en Nuevo evento de plataforma.
  3. Para Etiqueta, ingrese Cloud News.
  4. Para Etiqueta plural, ingrese Cloud News.
  5. Para Descripción, ingrese Eventos de Cloud News para acceder a las últimas noticias al instante.
  6. Para Comportamiento de publicación, mantenga el valor predeterminado de Publicar tras confirmar.
  7. Haga clic en Guardar.
  8. En la lista relacionada Relaciones y campos personalizados, haga clic en Nuevo.
  9. Seleccione Texto y haga clic en Siguiente.
  10. Para Etiqueta de campo/Nombre de campo, ingrese Ubicación.
  11. 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.
  12. 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. 

Nota

Los eventos recién definidos son de alto volumen de forma predeterminada. Los eventos de volumen estándar son los predecesores de eventos de alto volumen, y ya no puede definir dichos eventos.

Puede recuperar eventos almacenados del bus de eventos utilizando clientes de API de CometD o del 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. Solo puede recuperar eventos anteriores si se suscribe en CometD y usa una opción de ReplayId. Explicaremos el proceso de suscripción a eventos en la siguiente unidad.

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 por ejemplo en Apex, la API de REST y la API para compañías.

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 su aplicación es una aplicación externa, puede publicar eventos mediante las API de Salesforce.

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.

  1. Desde el menú de acceso rápido (Menú de acceso rápido), seleccione Developer Console.
  2. Haga clic en Debug (Depurar) | Open Execute Anonymous Window (Abrir ventana de ejecución anónima).
  3. 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.

Nota

La plataforma de Salesforce proporciona asignaciones para el número de eventos que puede definir en su organización y el número de eventos que puede publicar por hora. Para eventos configurados con el comportamiento Publicar tras confirmar, cada ejecución d método cuenta como una declaración DML en el límite de declaraciones DML de Apex. Puede comprobar el uso de límites utilizando el método de Apex Limits.getDMLStatements(). Para eventos configurados con el comportamiento Publicar inmediatamente, cada ejecución de método cuenta en un límite de publicación de eventos separado de 150 llamadas EventBus.publish(). Puede comprobar el uso de límites utilizando el método de Apex Limits.getPublishImmediateDML(). Para obtener más información, consulte la sección Recursos. 

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. Para publicar eventos, cree registros de su evento del mismo modo que inserta sObjects. Puede utilizar las API de Salesforce para crear mensajes de eventos de plataforma, como la API de SOAP, la API de REST o la API masiva. 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.

  1. Inicie sesión en su organización de DE de Trailhead.
  2. Abra la aplicación Postman, seleccione un espacio de trabajo y vaya a su bifurcación de la recopilación de API de Salesforce.
  3. En la ficha Autorización, desplácese a la parte inferior y haga clic en Obtener un nuevo token de acceso.
  4. Haga clic en Allow (Permitir).
  5. En el cuadro de diálogo Gestionar los tokens de acceso, copie la URL de ejemplo en su portapapeles.
  6. Haga clic en Utilizar token.
  7. 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.
  8. Pruebe que su conexión funcione correctamente.
    1. En Recopilaciones, seleccione la bifurcación de la recopilación de API de Salesforce.
    2. Seleccione REST para ampliar las API de REST.
    3. Seleccione los Límites de las GET y haga clic en Enviar.
    4. 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.

  1. En su bifurcación de la recopilación de API de Salesforce, haga clic en REST.
  2. Haga clic en SObject para ampliar la sección.
  3. Haga clic en Crear SObject mediante POST.
  4. En la ficha Params (Parámetros), dentro de Path Variables (Variables de ruta), en SOBJECT_API_NAME, escriba Cloud_News__e.
  5. 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."
    }
  6. 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": []
           }
       ]
    }

Una alternativa es publicar un evento en la API de SOAP mediante la llamada create() o bien en la API masiva mediante trabajos por lotes. También puede utilizar el modelo de publicación y suscripción de la API para publicar mensajes de eventos, lo que puede ser útil si también utiliza el mismo modelo para suscribirse a los mensajes de eventos. Para obtener más información, consulte la Documentación del modelo de publicación y suscripción de la API.

Ahora que ya sabe cómo se definen y publican eventos, vamos a explicar cómo suscribirse a ellos.

¡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