Assinar um canal de eventos
Objetivos de aprendizagem
Após concluir esta unidade, você estará apto a:
- Habilitar objetos para notificações de evento de alteração na página de captura de dados de evento.
- Use a API Pub/Sub para se inscrever em um canal de evento de alteração.
- Gerar notificações de evento de alteração fazendo atualizações no Salesforce.
Agora que você aprendeu o básico sobre o Change Data Capture, vamos ver na prática gerando algumas alterações no Salesforce e recebendo eventos de alteração. Para esta seção, vamos criar e modificar um registro de funcionário.
Criar o objeto personalizado Funcionário
Antes de podermos começar esse exercício, precisamos definir o objeto personalizado Funcionário. O primeiro passo é criar o objeto personalizado. Você pode concluir as tarefas desta unidade em seu Trailhead Playground pessoal. Para acessar seu Trailhead Playground, clique em sua imagem de perfil no canto superior direito, clique em Hands-on Orgs (Organizações práticas), e clique no nome de usuário da organização que você quer lançar.
- Em Configuração, clique na guia Gerenciador de objetos e selecione Criar > Objeto personalizado.
- Insira os valores a seguir.
- Rótulo:
Employee
(Funcionário) - Rótulo no plural:
Employees
(Funcionários) - (Se disponível, selecione Começa com som de vogal.)
- Nome do objeto:
Employee
(Funcionário) - Nome do registro:
Employee Name
(Nome do funcionário)
- Rótulo:
- Selecione Iniciar o assistente da nova guia personalizada após salvar este objeto personalizado.
- Clique em Save (Salvar).
- Na página Nova guia de objeto personalizado, selecione o estilo Criação no Estilo de guia.
- Clique em Avançar | Avançar | Salvar.
- Clique em Campos e relacionamentos e clique em Novo.
- Siga o assistente para criar estes três campos:
- Tipo de dados: Texto, Rótulo do campo:
Last Name
(Sobrenome), Field Name (Nome do campo):Last_Name
, Length (Tamanho):50
, Required (Obrigatório): Sim
- Tipo de dados: Texto, Rótulo do campo:
First Name
(Nome), Field Name (Nome do campo):First_Name
, Length (Tamanho):50
- Tipo de dados: Número, Rótulo do campo:
Tenure
(Tempo no cargo), Length (Tamanho):18
, Decimal Places (Casas decimais):0
, Field Name (Nome do campo):Tenure
(Tempo no cargo)
- Tipo de dados: Texto, Rótulo do campo:
Habilitar o objeto Funcionário para notificações sobre alterações
Antes de poder receber notificações sobre alterações, você precisa selecionar os objetos desejados. Do contrário, mesmo assinando o canal certo, você não receberá nenhuma notificação. Nesta seção, selecionamos o objeto personalizado Funcionário para receber as alterações do registro Funcionário.
- Em Setup (Configuração), insira
Change Data Capture
(Captura de dados de alteração) na caixa Busca rápida e clique em Change Data Capture (Captura de dados de alteração).
- Em Entidades disponíveis, selecione Employee (Employee__c) e clique na seta >.
- Clique em Save (Salvar).
Inscrever-se usando a API Pub/Sub
Em seguida, mostraremos como gerar e assinar eventos de alteração para registros de funcionários usando um cliente JAVA da API Pub/Sub. Nesta seção, fornecemos as etapas para gerar e receber eventos de alteração para que você possa ver exemplos de eventos de alteração. Você não precisa seguir as etapas para concluir este emblema. Consulte as etapas ao usar a API Pub/Sub para depois se inscrever em eventos de alteração.
Pré-requisitos
- Se você não configurou um intervalo de endereços IP confiáveis para sua organização, precisará de uma chave de segurança que anexará à sua senha. Para saber mais, consulte Redefinir sua chave de segurança e Definir intervalos de IP confiáveis para sua organização.
Etapas
- Para configurar o cliente Java da API Pub/Sub, siga as etapas na Etapa 2: Clone e crie o cliente do Início rápido do Java para API Pub/Sub no Guia do desenvolvedor da API Pub/Sub.
- Na Etapa 3: Configure os parâmetros do cliente, forneça os parâmetros de configuração em
arguments.yaml
.
- Mantenha os valores padrão para
PUBSUB_HOST
ePUBSUB_PORT
.
- Para
LOGIN_URL
, insirahttps://login.salesforce.com
ou sua URL de login do Meu domínio, comohttps://mycompany.my.salesforce.com.
- Obtenha o nome de usuário e a senha da sua organização do Trailhead Playground no aplicativo Playground Starter. Para obter mais informações, consulte Obter seu nome de usuário e senha para o Trailhead Playground do módulo Gerenciamento do Trailhead Playground.
- Em
USERNAME
, insira seu nome de usuário do Trailhead Playground.
- Em
PASSWORD
(Senha), forneça a senha do Trailhead Playground e anexe o token de segurança à sua senha. Para obter um token de segurança, consulte Redefinir seu token de segurança na Ajuda do Salesforce.
- Em
TOPIC
(Tópico), forneça/data/Employee__ChangeEvent
- Defina
PROCESS_CHANGE_EVENT_HEADER_FIELDS
comotrue
(verdadeiro). Esse valor garante que alguns campos, comochangedFields
em ChangeEventHeader estejam expandidos. Para obter mais informações, consulte Considerações sobre desserialização de eventos no Guia do desenvolvedor da API Pub/Sub.
- Salve suas alterações.
- Em uma janela Terminal, navegue até a pasta
java
de nível superior.
- Para assinar eventos de alteração, insira:
./run.sh genericpubsub.Subscribe
Depois de assinar o canal para Employee__c, as alterações feitas nos registros de funcionário ou a criação de novos registros gerarão notificações que a ferramenta enviará para o console.
Criar um registro de funcionário
Vamos fazer algumas alterações no registro para recebermos algumas notificações de eventos. Primeiro, crie um registro de funcionário.
- No App Launcher (Iniciador de aplicativos) (), encontre e selecione Employees (Funcionários).
- Clique em Novo.
- Ajuste os campos a seguir.
- Employee name (Nome do funcionário):
e-100
- Sobrenome:
Smith
- Primeiro nome:
Patricia
- Clique em Save (Salvar).
Ao salvar o registro de funcionário, uma notificação de alteração aparece no console da seguinte forma:
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "CREATE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001b7b1-5ff1-499e-0b32-4b2aff2f6922", "sequenceNumber": 1, "commitTimestamp": 1722538034000, "commitNumber": 1722538034362728400, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": "005ak000004FkWTAA0", "Name": "e-100", "CreatedDate": 1722538034000, "CreatedById": "005ak000004FkWTAA0", "LastModifiedDate": 1722538034000, "LastModifiedById": "005ak000004FkWTAA0", "Last_Name__c": "Smith", "First_Name__c": "Patricia", "Tenure__c": null }
Atualizar um registro de funcionário
Em seguida, vamos atualizar o registro que acabamos de criar adicionando um valor ao campo Tempo no cargo e modificando o nome do funcionário.
- Na página de detalhes do registro de funcionário, clique em Editar.
- Mude o campo First Name (Nome) para
Trish
.
- Em Tenure (Tempo no cargo), insira
3
.
- Clique em Save (Salvar).
A atualização do registro do funcionário gera a mensagem de evento de alteração a seguir. Observe que os campos preenchidos no evento de alteração são apenas os campos novos e modificados do registro e do sistema, além dos campos de cabeçalho. Os campos não modificados estão presentes na mensagem do evento, mas são nulos.
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "UPDATE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001b7b6-4696-a4a3-c6a5-8b65014da623", "sequenceNumber": 1, "commitTimestamp": 1722538057000, "commitNumber": 1722538057223217200, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [ "0x0320" ] }, "OwnerId": null, "Name": null, "CreatedDate": null, "CreatedById": null, "LastModifiedDate": 1722538057000, "LastModifiedById": null, "Last_Name__c": null, "First_Name__c": "Trish", "Tenure__c": 3 }
O campo changeFields
contém os campos que foram alterados. O campo changeFields
é um campo de bitmap que não é legível. Deve ser decodificado primeiro pelo cliente. O cliente assinante decodifica este campo e o imprime após a mensagem do evento de alteração. Neste exemplo, o campo changedFields
contém os dois campos que foram alterados: First_Name__c
e Tenure__c
. Ele também contém o campo do sistema, LastModifiedDate
, que contém o carimbo de data/hora da atualização.
2024-08-01 11:47:37,738 [grpc-default-executor-1] java.lang.Class - ============================ 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ChangedFields 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ============================ 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - LastModifiedDate 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - First_Name__c 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - Tenure__c 2024-08-01 11:47:37,739 [grpc-default-executor-1] java.lang.Class - ============================
Excluir um registro de funcionário
Agora, vejamos o que acontece quando excluímos o registro do funcionário.
- Na página de detalhes de Trish, selecione Excluir no menu suspenso.
- Clique em Excluir no pop-up de confirmação.
A exclusão resulta na mensagem de evento a seguir. Os eventos de alteração de exclusões não incluem nenhum valor para campos de registro ou de sistema. Todos os campos de registro e sistema estão incluídos, mas com valores vazios.
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "DELETE", "changeOrigin": "com/salesforce/api/soap/61.0;client=SfdcInternalAPI/", "transactionKey": "0001045a-a442-5723-cd1f-07e8e39c5c1d", "sequenceNumber": 1, "commitTimestamp": 1722538082000, "commitNumber": 1722538082479947800, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": null, "Name": null, "CreatedDate": null, "CreatedById": null, "LastModifiedDate": null, "LastModifiedById": null, "Last_Name__c": null, "First_Name__c": null, "Tenure__c": null }
Cancelar exclusão de um registro de funcionário
A exclusão de um registro é uma “exclusão reversível” e pode ser restaurada durante determinado período. Vamos restaurar o registro por meio do Apex.
- Clique no menu de acesso rápido () e selecione Developer Console.
- No Developer Console, clique em Depurar e selecione Abrir a janela Executar anônimo.
- Na nova janela, insira o que segue e substitua o ID de espaço reservado pelo valor de ID retornado no campo de cabeçalho recordIds. É possível encontrar o campo
recordIds
na mensagem de evento de alteração recebida após a exclusão do registro, na etapa anterior.
Employee__c record = [SELECT Id,Name FROM Employee__c WHERE Id='ID_Placeholder' ALL ROWS]; undelete record;
- Clique em Executar.
O cancelamento da exclusão resulta na mensagem de evento a seguir. O evento de alteração para um registro com a exclusão cancelada contém campos do registro original excluído.
{ "ChangeEventHeader": { "entityName": "Employee__c", "recordIds": [ "a00ak00000FqAsJAAV" ], "changeType": "UNDELETE", "changeOrigin": "com/salesforce/api/soap/61.0;client=devconsole", "transactionKey": "0001b7d4-927c-6028-fe72-7f28dc5cba83", "sequenceNumber": 1, "commitTimestamp": 1722538187000, "commitNumber": 1722538187363508200, "commitUser": "005ak000004FkWTAA0", "nulledFields": [], "diffFields": [], "changedFields": [] }, "OwnerId": "005ak000004FkWTAA0", "Name": "e-100", "CreatedDate": 1722538034000, "CreatedById": "005ak000004FkWTAA0", "LastModifiedDate": 1722538187000, "LastModifiedById": "005ak000004FkWTAA0", "Last_Name__c": "Smith", "First_Name__c": "Trish", "Tenure__c": 3 }
Recursos
-
Desenvolvedores do Salesforce: Início rápido do Java para a API da Pub/Sub
-
Desenvolvedores do Salesforce: Change Data Capture Developer Guide
-
Site externo: Repositório do GitHub da API Pub/Sub