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

Definir e publicar eventos de plataforma

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:

  • Definir um evento de plataforma.
  • Descrever como mensagens de eventos de plataforma podem ser publicadas no Apex.
  • Usar um método do Apex para publicar um evento.
  • Publicar um evento usando cliques em um processo ou fluxo.
  • Publicar um evento usando API REST por meio da inserção de um sObject.
Observação

Observação

Deseja aprender em português (Brasil)? Comece o desafio em um Trailhead Playground de português (Brasil) e copie e cole os valores de português (Brasil). Se você não passar no desafio em sua organização de português (Brasil), recomendamos que (1) mude o local para os Estados Unidos, (2) mude o idioma para inglês, seguindo as instruções aqui, e (3) clique novamente no botão “Validar o desafio”.

Consulte o emblema Trailhead no seu idioma para saber mais sobre como aproveitar a experiência de Trailhead em outros idiomas.

Definir e publicar eventos de plataforma

Agora que você entende o que são eventos de plataforma e quando eles são usados, vamos pôr a mão na massa e definir um evento de plataforma! Lembra da agência de notícias Cloud News? Vamos criar uma definição de evento de plataforma que retenha os dados de eventos de notícias.

Defina um evento de plataforma chamado Cloud News:

  1. Em Setup (Configuração), digite Platform Events (Eventos de plataforma) na caixa Quick Find (Busca rápida) e, em seguida, selecione Platform Events (Eventos de plataforma).
  2. Na página Platform Events (Eventos de plataforma), clique em New Platform Event (Novo evento de plataforma).
  3. Em Label (Rótulo), digite Cloud News.
  4. Em Plural Label (Rótulo plural), digite Cloud News.
  5. Em Description (Descrição), digite Cloud news events deliver news at your fingertips (Os eventos da Cloud News trazem as notícias até as pontas de seus dedos).
  6. Em Publish Behavior (Comportamento de publicação), mantenha o padrão de Publish Immediately (Publicar imediatamente).
Observação

Para saber mais sobre o comportamento de publicação, consulte Eventos e transações da plataforma.

  1. Clique em Save (Salvar).
  2. Na lista relacionada de Campos e relacionamentos personalizados, clique em Novo.
  3. Selecione Text e clique em Avançar.
  4. Em Field Label/Name (Rótulo/Nome do campo), digite Location (Local).
  5. Em Length (Comprimento), digite 100. Mantenha os padrões para os outros campos e deixe o campo Descrição vazio. Clique em Save (Salvar).
  6. Siga as etapas 7, 8 e 9 para adicionar os próximos dois campos:

    Rótulo/Nome do campo

    Tipo de campo

    Urgente

    Caixa de seleção

    News Content

    Área de texto (longo)

Para o evento da Cloud News que você acaba de definir, você criou campos de vários tipos, como um campo de texto ou uma caixa de seleção. Todos os tipos de campo compatíveis com eventos de plataforma são:

  • Caixa de seleção
  • Data
  • Data/hora
  • Número
  • Texto
  • Área de texto (longo)

Retenção de eventos e campo do sistema de ID de reprodução

O Salesforce armazena eventos de plataforma de grande volume por 72 horas no barramento de eventos. Os eventos de volume padrão que foram definidos antes da versão Spring '19 são armazenados por 24 horas no barramento de eventos. 

Observação

Os eventos recentemente definidos são de alto volume por padrão. Os eventos de volume padrão são os predecessores dos eventos de alto volume eventos e você não pode mais definir tais eventos.

Você pode recuperar eventos armazenados do barramento de eventos usando a API Pub/Sub. Você pode recuperar todos os eventos armazenados ou especificar a ID de reprodução de um evento como a linha de base para a porção recuperada de eventos. Com os acionadores do Apex, você pode retomar um acionador suspenso e coletar os primeiros eventos não processados retidos. Você aprenderá mais tarde neste módulo como gerenciar as assinaturas dos acionadores do Apex.

Embora o Salesforce retenha mensagens de evento temporariamente, você não pode consultá-las por meio de SOQL ou SOSL. Da mesma forma, você não pode usar mensagens de evento na interface do usuário em relatórios, modos de exibição de lista e pesquisa.

A cada mensagem de evento é atribuída uma ID opaca contida no campo ReplayId. O valor do campo ReplayId, preenchido pelo sistema quando o evento é entregue aos assinantes, se refere à posição do evento no fluxo de eventos. Não é garantido que os valores de ID de reprodução sejam contíguos para eventos consecutivos. Um assinante pode armazenar um valor de ID de reprodução e usá-lo em uma nova assinatura para recuperar eventos dentro da janela de retenção. Por exemplo, um assinante pode recuperar eventos perdidos após uma falha de conexão. Os assinantes não podem calcular novas IDs de reprodução, com base em uma ID de reprodução armazenada, para referenciar outros eventos no fluxo.

Sufixo de nome da API

Quando você cria um evento de plataforma, o sistema anexa o sufixo __e para criar o nome da API do evento. Por exemplo, para o evento Cloud News, o nome da API é Cloud_News__e. Utilize o nome da API sempre que se referir ao evento programaticamente, por exemplo, no Apex, API REST ou API Pub/Sub.

Comportamento de publicação de evento de plataforma e transações

Você pode escolher um comportamento de publicação para um evento de plataforma que você definir. O comportamento de publicação especifica quando um evento é publicado: imediatamente após a chamada de publicação ou após a conclusão bem-sucedida da transação.

Comportamento Publicar Imediatamente

Selecione Publish Immediately (Publicar imediatamente) se a publicação do evento não estiver vinculada aos dados da transação. Esta é a opção padrão e a recomendamos para a maioria das implementações. Esta opção publica a mensagem de evento quando a chamada de publicação é executada, independentemente de a transação ser bem-sucedida. Com essa opção, às vezes um assinante pode receber a mensagem do evento antes que os dados sejam confirmados.

Por exemplo, selecione essa opção se o editor e os assinantes forem independentes e se os assinantes não confiarem nos dados enviados pelo editor. Outro exemplo é quando o comportamento de publicação imediata é adequado para um evento usado para fins de registro.

Comportamento Publicar após compromisso

Selecione Publish After Commit (Publicar após confirmação) somente se o assinante exigir dados de transação confirmados quando receber a mensagem de evento. Com esta opção, a mensagem do evento é publicada somente após uma transação ser confirmada com sucesso e não é publicada se a transação falhar.

Considere este exemplo para usar a opção Publish After Commit (Publicar após confirmação): Um processo publica uma mensagem de evento e cria um registro de tarefa, e um segundo processo que é subscrito ao evento é disparado e espera encontrar o registro de tarefa.

Publicar eventos

Se seu aplicativo estiver na Salesforce Platform, você pode publicar eventos usando um método do Apex ou com a ferramenta declarativa Flow Builder. Se o seu aplicativo for externo, você poderá publicar eventos usando as APIs do Salesforce, incluindo a API Pub/Sub e as APIs de dados, como a API REST.

Publicar mensagens de evento usando Apex

Para publicar mensagens de evento, crie uma instância do evento e a transfira para o método EventBus.publish().

O exemplo a seguir cria um evento do tipo Cloud_News__e, o publica e depois verifica se a publicação foi bem-sucedida ou se houve erros. O método EventBus.publish() retorna um objeto Database.SaveResult, que contém o resultado da publicação. Se isSuccess () retornar true, a solicitação de publicação será enfileirada no Salesforce e a mensagem do evento será publicada de forma assíncrona. Se isSuccess() retornar false, a operação de publicação de evento resulta em erros, que são retornados no objeto Database.Error. Este método não gera exceções causadas por uma falha em uma operação de publicação.

Você pode executar o snippet de código do Apex no Developer Console.

  1. No menu de acesso rápido ( Menu de acesso rápido), clique em Developer Console.
  2. Clique em Debug (Depurar) | Open Execute Anonymous Window (Abrir janela Executar anônimo).
  3. Na nova janela, substitua qualquer conteúdo pelo snippet de código e clique em Executar.
    // 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 mais de um evento na mesma chamada, adicione seus eventos a uma lista de eventos e passe a lista para o método EventBus.publish(). O resultado desse método é uma matriz de objetos Database.SaveResult: uma para cada evento publicado. O EventBus.publish() pode publicar alguns eventos passados, mesmo quando os outros eventos não podem ser publicados devido a erros. O método EventBus.publish() não gera exceções causadas por uma falha em uma operação de publicação. Ele tem um comportamento similar ao do método Database.insert() do Apex quando chamado com a opção de sucesso 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());
        }
    }
}

Quando os recursos do sistema se tornam disponíveis, a Salesforce publica os eventos enfileirados na chamada EventBus.publish() de forma assíncrona e armazena-os no barramento de eventos por um período de retenção específico. Na maioria das vezes, você não precisa se preocupar com o resultado final da publicação do evento enfileirado porque a eventual publicação vai ser bem-sucedida. Em casos raros, um erro interno do sistema pode ocorrer e causar falha na publicação assíncrona. Para ter a confirmação do resultado final da publicação do evento, use Retornos de chamada de publicação do Apex. Para obter mais informações, consulte Obter o resultado da publicação assíncrona de eventos da plataforma com Retornos de chamada de publicação do Apex no Guia do desenvolvedor de eventos da plataforma.

Observação

A Salesforce Platform fornece alocações sobre quantos eventos você pode definir em sua organização e quantos eventos você pode publicar em uma hora. Para eventos configurados com o comportamento Publicar após confirmar, cada execução de método é contada como uma instrução DML em relação ao limite de instrução DML do Apex.

Você pode verificar o uso de limite usando o método Limits.getDMLStatements() do Apex. Para eventos configurados com o comportamento Publicar imediatamente, cada execução de método é contada em relação a um limite de publicação de evento separado de 150 chamadas EventBus.publish(). Você pode verificar o uso de limite usando o método Limits.getPublishImmediateDML() do Apex. Para obter mais informações, consulte a seção Recursos. 

Publicar mensagens de evento usando cliques

Para publicar mensagens de evento sem código, use a funcionalidade de criação de registros no Flow Builder. Configure um elemento Criar registros para criar uma instância do evento de plataforma (Cloud_News__e) e, em seguida, defina os valores para o evento. Para definir o valor de um campo booleano, como Urgent__c, use {!$GlobalConstant.True}.

Publicar mensagens de evento usando APIs do Salesforce

Aplicativos externos utilizam uma API para publicar mensagens de eventos de plataforma. Você pode publicar eventos usando a API Pub/Sub ou APIs de dados, como a API SOAP, a API REST ou a API em massa.

Ao usar APIs de dados, você publica eventos da mesma forma que insere sObjects. Assim como com o Apex, a mensagem de evento é publicada de forma assíncrona. Quando você publica um evento e recebe um status de sucesso de true, a solicitação de publicação é enfileirada no Salesforce.

Por exemplo, para o evento Cloud News, você pode publicar notificações de evento inserindo registros Cloud_News__e. O exemplo a seguir cria um evento do tipo Cloud_News__e em API REST.

Ponto de extremidade REST do sObject:

Corpo de solicitação para uma solicitação de POST:

Depois que a mensagem de evento de plataforma é criada, a resposta REST se parece com este resultado.

Você pode usar qualquer ferramenta API REST ou um aplicativo de cliente HTTP para fazer chamadas API REST. Por exemplo, você pode usar o Postman seguindo estas etapas. Se você ainda não usou o Postman, visite o projeto Início rápido: Conectar o Postman ao Salesforce para configurar e obter um fork da coleção de APIs do Salesforce. Saiba mais sobre o Postman na seção Recursos.

Conecte sua organização DE com o Postman.

  1. Faça login em sua organização Trailhead DE.
  2. Abra o aplicativo Postman, selecione um Espaço de trabalho e navegue até seu fork da coleção de APIs do Salesforce.
  3. Na guia Autorização, role até a parte inferior e clique em Obter novo token de acesso.
  4. Clique em Allow (Permitir).
  5. Na caixa de diálogo Gerenciar tokens de acesso, copie a URL de instância para sua área de transferência.
  6. Clique em Usar token.
  7. Na guia Variáveis, na linha _endpoint, na coluna VALOR ATUAL, cole a URL de instância que acabou de copiar e, em seguida, clique em Salvar. Talvez seja necessário fechar o painel de documentação para ver o botão Salvar.
  8. Teste o funcionamento de sua conexão.
    1. Em Coleções, selecione seu fork da coleção de APIs do Salesforce.
    2. Selecione REST para expandir as APIs REST.
    3. Selecione Limites GET e, em seguida, clique em Enviar.
    4. Na janela de resposta, o campo Status deve aparecer como Status: 200 OK. Se não aparecer, repita as etapas para obter um novo token.

Faça uma chamada API REST para publicar notificações de eventos.

  1. Em seu fork da coleção de APIs do Salesforce, clique em REST.
  2. Clique em SObject para expandi-lo.
  3. Clique em Criar POST SObject.
  4. Na guia Params (Parâmetros), em Path Variables (Variáveis de caminho), para SOBJECT_API_NAME , insira Cloud_News__e.
  5. Na guia Body (Corpo), cole os seguintes corpo JSON.
    {
       "Location__c" : "Mountain City",
       "Urgent__c" : true,
       "News_Content__c" : "Lake Road is closed due to mudslides."
    }
  6. Clique em Enviar. A resposta que o Salesforce retorna após publicar o evento tem a seguinte aparência.
    {
      "id" : "e00xx0000000001AAA",
      "success" : true,
      "errors" : [
           {
                "statusCode": "OPERATION ENQUEUED",
                "message": "08ffc869-b9f8-4cff-a4ba-8dff9b3dd6cb",
                "fields": []
           }
       ]
    }

Agora que você já viu como definir e publicar eventos, vamos ver como se inscrever neles!

Recursos

Compartilhe seu feedback do Trailhead usando a Ajuda do Salesforce.

Queremos saber sobre sua experiência com o Trailhead. Agora você pode acessar o novo formulário de feedback, a qualquer momento, no site Ajuda do Salesforce.

Saiba mais Continue compartilhando feedback