Skip to main content

Usar callouts do Apex e mensagens de saída com a Heroku

Objetivos de aprendizagem

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

  • Enviar callouts do Apex e mensagens de saída para a Heroku.
  • Discutir os casos de uso para callouts do Apex e mensagens de saída.

Callouts para aplicativos Heroku

Às vezes, os eventos no Salesforce precisam ser tratados por um sistema externo devido ao tamanho ou ao tipo de processo em execução. Por exemplo, um usuário no Salesforce carrega uma imagem que precisa ser redimensionada para uso futuro. A Heroku pode receber um evento do Salesforce e realizar alguns processos em resposta. Como opção, o resultado do processo pode ser armazenado no Salesforce usando as APIs REST ou o Heroku Connect.

Diagrama que mostra uma caixa com o Salesforce e um Evento de dados que é acionado ou enviado a partir de uma mensagem de saída. Uma seta sai da caixa e aponta para outra caixa contendo todos os aplicativos hospedados no Heroku

Existem vários métodos para se chamar um aplicativo Heroku com base em um evento no Salesforce: callouts HTTP do Apex, mensagens de saída ou ações HTTP no Flow. Um callout HTTP do Apex faz uma chamada REST a um aplicativo Heroku programaticamente. Uma mensagem de saída é uma ação que realiza uma chamada SOAP de forma declarativa. De qualquer forma, um aplicativo Heroku recebe uma solicitação com a carga de detalhes do evento e realiza a ação.

Acesse as postagens de blog Swagger / OpenAPI + Salesforce = LIKE e Integrações com API simplificadas com serviços externos para obter informações sobre ações HTTP no Flow e em serviços externos.

Callouts com acionadores do Apex

Você pode definir acionadores do Apex em objetos do Salesforce para lidar com qualquer um destes eventos:

  • insert
  • update
  • delete
  • merge
  • upsert
  • undelete

O acionador pode usar um callout do Apex para fazer uma chamada JSON REST a um ponto de extremidade em um aplicativo Heroku. Por exemplo, veja um acionador do Apex que chama um aplicativo Heroku:

 trigger NewContactWebhookTrigger on Contact (after insert) {

  String url = 'https://foo.herokuapp.com/new_contact';

  String content = Webhook.jsonContent(Trigger.new, Trigger.old);

  Webhook.callout(url, content);

} 

A classe do Apex Webhook referenciada é:

 public class Webhook {

  public static String jsonContent(List<Object> triggerNew, List<Object> triggerOld) {

    String newObjects = '[]';

    if (triggerNew != null) {

      newObjects = JSON.serialize(triggerNew);

    }

    String oldObjects = '[]';

    if (triggerOld != null) {

      oldObjects = JSON.serialize(triggerOld);

    }

    String userId = JSON.serialize(UserInfo.getUserId());

    String content = '{"new": ' + newObjects + ', "old": ' + oldObjects + ', "userId": ' + userId + '}';

    return content;

  }

  @future(callout=true) public static void callout(String url, String content) {

    Http h = new Http();

    HttpRequest req = new HttpRequest();

    req.setEndpoint(url);

    req.setMethod('POST');

    req.setHeader('Content-Type', 'application/json');

    req.setBody(content);

    h.send(req);

  }

} 

O método jsonContent usa os dados do acionador e os serializa para JSON. O método callout faz a solicitação HTTP para o Heroku com a carga JSON.

Assim como no caso das mensagens de saída, você pode criar o aplicativo Heroku com qualquer tecnologia REST ou Web de código aberto. Com JavaScript, Node.js e Express, o ponto de extremidade pode ser definido como:

 app.post("/new_contact", function(req, res) {

  // do something with req.body

  res.status(201).end();

});

No manipulador de solicitações, o corpo da solicitação é composto de dados JSON desserializados enviados do acionador do Apex.

Com os acionadores do Apex, você pode usar um tipo de chave pré-compartilhada para autenticar solicitações, evitando a possibilidade de solicitações mal-intencionadas. Você também pode fazer com que a carga inclua uma ID de sessão para permitir que o aplicativo Heroku faça solicitações pela API REST ao Salesforce para buscar ou atualizar dados.

Nota

Para saber mais sobre callouts do Apex, consulte a documentação do Salesforce Como invocar callouts usando o Apex. Acesse a documentação do Heroku Fazer callouts do Apex e de fluxo de trabalho para sua API a fim de saber mais sobre integração do Apex com um serviço externo.

Callouts com mensagens de saída

Com as ações de Mensagem de saída, você define de forma declarativa um callout para um sistema externo e um fluxo acionado por registro para enviar o callout.

Para fazer a chamada de um aplicativo Heroku quando o fluxo for executado, primeiro crie uma ação de Mensagem de saída. Especifique um ponto de extremidade do aplicativo Heroku como a URL do ponto de extremidade.

Captura de tela da caixa de diálogo Configurar mensagem de saída, mostrando a mensagem Novo contato para Heroku

Se você selecionar Send Session ID (Enviar ID da sessão), o aplicativo Heroku poderá usar esse token para fazer chamadas de API REST em nome do usuário. Se você não enviar a ID da sessão, não há como verificar se a solicitação é válida ou de se proteger de chamadas mal-intencionadas para o ponto de extremidade da API de seu aplicativo Heroku.

No lado da Heroku, você pode implantar um manipulador de eventos com qualquer tecnologia REST ou Web de código aberto. Mas como a mensagem está em formato SOAP, você precisará ser capaz de analisar o XML. Por exemplo, com JavaScript, Node.js, Express e a biblioteca express-xml-bodyparser, temos um ponto de extremidade que lida com uma mensagem de saída e analisa a mensagem SOAP.


app.post("/new_contact", function(req, res) { var notification = req.body["soapenv:envelope"]["soapenv:body"][0]["notifications"][0]; var sessionId = notification["sessionid"][0]; var data = {}; if (notification["notification"] !== undefined) { var sobject = notification["notification"][0]["sobject"][0]; Object.keys(sobject).forEach(function(key) { if (key.indexOf("sf:") == 0) { var newKey = key.substr(3); data[newKey] = sobject[key][0]; } }); // do something #awesome with the data and sessionId } res.status(201).end(); });

Neste exemplo, cada vez que um contato é criado, o aplicativo Heroku recebe os detalhes do contato e pode fazer o que quiser com os dados.

Depois de criar a ação de Mensagem de saída, crie o fluxo que a chama. O fluxo pode ser acionado por qualquer objeto do Salesforce, como Contato ou Conta, quando ocorrer uma das seguintes situações:

  • Um registro é criado
  • Um registro é atualizado
  • Um registro é criado ou atualizado
  • Um registro é excluído

Se você acionar o fluxo quando um registro for atualizado, poderá especificar se o fluxo deve ser acionado sempre que o registro for atualizado e atender aos requisitos de condição, ou se ele deve ser acionado somente quando o registro for atualizado para atender aos requisitos de condição.

Nota

Em fluxos acionados por registro, você pode definir condições de entrada que limitam quais registros acionam o fluxo. Use esse recurso para especificar critérios para os quais os registros enviam o callout.

Depois de configurar o elemento de início do fluxo, crie um elemento de Ação. No campo Ação, insira a ação de Mensagem de saída que você criou. Em seguida, dê ao elemento um Rótulo, clique em Concluído e salve seu fluxo. Quando o fluxo executa esse elemento, ele envia o callout definido na ação de Mensagem de saída.

Nota

Os fluxos também podem aguardar uma resposta do Heroku. Para obter mais informações, consulte Elemento do fluxo: Pausar na Ajuda do Salesforce.

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