Integração com a “Streaming API” do Salesforce usando o Magic xpi

image000

Neste post vamos falar sobre um tema muito utilizado em integrações que é o monitoramento de atualizações de objetos no Salesforce.

É claro que com esse enunciado você já deve estar imaginando que se trata simplesmente de usar o componente Salesforce do Magic xpi na área de trigger, e é claro que esta é uma alternativa, mas vamos falar de outra alternativa que é usando a alternativa de Streaming API do Salesforce.

O Streaming API do Salesforce é outra forma de receber atualização de objeto do Salesforce, pois envolve uma arquitetura muito semelhante ao Publish e Subscribe do Magic xpi. Este esquema traz alguns benefícios tais como:

Tecnicamente falando, a comunicação com o Streaming API do Salesforce é feita via HTTP com comunicação em formato JSON de acordo com o protocolo Bayeux, essa comunicação deve ser em long-pooling e envolve solicitações e respostas de operações seguindo uma sequência:

  • Login

Faz o login para obter um SessionId que será usado em todas requisições para o Salesforce, este SessionId deve ser enviado no cabeçalho Authorization: Bearer SessionId na requisição HTTP

  • Handshake

Esta operação é para começar a comunicação com o Streaming API, nesta requisição e nas demais se deve enviar Cookie: BAYEUX_BROWSER=ID onde este ID deve ser único e será usado em todas chamadas.

Retornando erro deve-se reiniciar o processo.

Retornando sucesso, receberá um clientId que deverá ser enviado em todas as mensagens das próximas operações, receberá também um cookie sfdc-stream que deverá ser enviado nas próximas operações juntamente com o cookie anteriormente definido

  • Connect

Esta operação é para efetivar a conexão ou após realizar o subscribe que manterá o monitoramento. Sempre que receber alguma resposta de término do long-pooling ou de alguma notificação deve-se refazer esta conexão

  • Subscribe

Esta operação é para se inscrever no canal de comunicação definido pelo tópico

  • Unsubscribe

Esta operação é para se cancelar a inscrição no canal de comunicação definido pelo tópico

  • Disconnect

Esta operação é para desconectar

Nota: Retornando erro em qualquer operação, deve-se reiniciar o processo.

Preparando o ambiente do Streaming API no Salesforce

Para prosseguir no teste com o Magic xpi é necessário primeiramente:

Nota: Os objetos e tópicos criados neste post foram exatamente conforme os documentos dos links.

Integrando com o Magic xpi

Clique aqui e baixe o projeto feito em Magic xpi 4.0a que implementa esta comunicação. Ao baixar, extraia o zip para o caminho home do Magic xpi . A extração colocará o projeto na pasta projects, além de instalar um componente necessário para facilitar a gravação/leitura de formato JSON. Este é o mesmo componente, já foi comentado neste outro post, apenas adaptado para este cenário.


 O fluxo “Test Salesforce Streaming API”:

image001

Note que os números em vermelho implementam as sequências comentadas anteriormente.

Neste fluxo será necessário preencher a variável F.PushTopic ou a variável de ambiente SALESFORCE_STREAMING_API_TOPIC seguindo o padrão /topic/<NomeDoTopico>, onde <NomeDoTopico> é o nome do tópico criado anteriormente.


O fluxo “Login in Salesforce”:

image003

Este fluxo faz o login no Salesforce, que é 1ª operação da sequencia comentada anteriormente.

Neste fluxo será necessário preencher as variáveis (F.UserName, F.Password e F.EndpointURL) ou as varáveis de ambiente (SALESFORCE_LOGIN_USR, SALESFORCE_LOGIN_PWD e SALESFORCE_LOGIN_URL) que servirão para fazer o login no Salesforce passando o usuário, senha e URL respectivamente.


O fluxo “Call Salesforce Streaming API”:

image005

Este fluxo implementa tecnicamente as chamadas com o Streaming API e converte as respostas entre JSON/XML.


O fluxo “Create MSG XML/JSON”:

image007

Este fluxo monta as mensagens em formato JSON/XML, que serão usadas no fluxo comentado anteriormente.


Executando o projeto

Veja abaixo a execução de cada operação da sequencia seguida do recebimento de uma atualização de objeto:

image009

Lembre-se que o projeto necessitará de uma thread exclusiva para o monitoramento do Streaming API pois esta tecnologia requer um long-pooling HTTP. Basicamente, haverá um Business Process dedicado só a esta comunicação, integrado ao restante do projeto de integração. Ou também, é possível criar um projeto dedicado só a esta parte, que comunique-se com os demais projetos de integração (usando webService SOAP por exemplo).

Jeronimo Alberto da Costa – Analista Desenvolvedor / Project Designer / Salesforce Expert – Magic Software Brasil
Jeronimo Alberto da Costa – Analista Desenvolvedor / Project Designer / Salesforce Expert – Magic Software Brasil

2 comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *