Skip to main content
Build the future with Agentforce at TDX in San Francisco or on Salesforce+ on March 5–6. Register now.

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

Nota

¿Es su idioma de aprendizaje español (LATAM)? Comience el reto en un Trailhead Playground en español (LATAM) y copie y pegue los valores en español (LATAM). Si no aprueba el reto en su organización en español (LATAM), recomendamos que (1) cambie la configuración local a Estados Unidos, (2) cambie el idioma a inglés (según estas instrucciones) y, luego, (3) haga clic en el botón “Check Challenge” (Comprobar el reto) nuevamente.

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 Setup (Configuración), ingrese Platform Events (Eventos de plataforma) en el cuadro Quick Find (Búsqueda rápida) y, a continuación, seleccione Platform Events (Eventos de plataforma).
  2. En la página Eventos de plataforma, haga clic en Nuevo evento de plataforma.
  3. Para Label (Etiqueta), ingrese Cloud News.
  4. Para Plural Label (Etiqueta plural), ingrese Cloud News.
  5. Para Description (Descripción), ingrese Cloud news events deliver news at your fingertips (Eventos de Cloud News para acceder a las últimas noticias al instante).
  6. Para Publish Behavior (Comportamiento de publicación), mantenga el valor predeterminado de Publish Immediately (Publicar Inmediatamente).
Nota

Para obtener más información sobre el comportamiento de publicación, consulte Eventos de plataforma y transacciones.

  1. Haga clic en Guardar.
  2. En la lista relacionada Relaciones y campos personalizados, haga clic en Nuevo.
  3. Seleccione Texto y haga clic en Siguiente.
  4. Para Field Label/Name (Etiqueta de campo/Nombre de campo), ingrese Location (Ubicación).
  5. Para Length (Longitud), ingrese 100. Mantenga los valores predeterminados de los demás campos y deje el campo Descripción vacío. Haga clic en Guardar.
  6. 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 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.

Transacciones y comportamiento de publicación de un evento de plataforma

Puede elegir un comportamiento de publicación para un evento de plataforma que usted defina. El comportamiento de publicación especifica cuándo se publica un evento, ya sea inmediatamente después de la llamada de publicación o después de que se complete la transacción.

Comportamiento de publicación Publicar inmediatamente

Seleccione Publish Immediately (Publicar inmediatamente) si la publicación del evento no está ligada a los datos de la transacción. Esta es la opción predeterminada y la que recomendamos para la mayoría de las implementaciones. Esta opción publica el mensaje del evento cuando se ejecuta la llamada de publicación, más allá de que la transacción tenga éxito o no. Con esta opción, un suscriptor a veces puede recibir el mensaje del evento antes de que se confirmen los datos.

Por ejemplo, seleccione esta opción si el publicador y los suscriptores son independientes, y los suscriptores no confían en los datos confirmados por el publicador. Otro ejemplo es cuando el comportamiento de publicación inmediata es la opción perfecta para eventos que se utilizan con fines de registro.

Comportamiento de publicación Publicar tras confirmar

Seleccione Publish After Commit (Publicar tras confirmar) solo si el suscriptor requiere confirmar los datos de la transacción cuando recibe el mensaje del evento. Con esta opción, el mensaje del evento se publica solo después de que se confirma correctamente una transacción, pero no se publica si falla la transacción.

Considere este ejemplo para usar la opción Publish After Commit (Publicar tras confirmar): un proceso publica un mensaje de evento y crea un registro de tarea, mientras que un segundo proceso suscrito al evento se activa y espera localizar el registro de la tarea.

Publicar eventos

Si su aplicación se encuentra en Salesforce Platform, 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 isSuccess() devuelve el valor false, la operación de publicación de eventos da 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), haga clic en 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

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

  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), en Path Variables (Variables de ruta), para 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": []
           }
       ]
    }

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

Recursos

Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios