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:
- Diminuição do número de APIs consumidas
- A notificação de atualização pode estar informando mais de um client que esteja monitorando
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:
- Criar o objeto ou usar um existente, veja como fazer clicando aqui
- Criar o Tópico, veja como fazer clicando aqui
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”:
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”:
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”:
Este fluxo implementa tecnicamente as chamadas com o Streaming API e converte as respostas entre JSON/XML.
O fluxo “Create MSG XML/JSON”:
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:
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).
Brilliant post Jeronimo!
Thanks!