Consultando CEP no Salesforce utilizando Flows

Sim, hoje o post vai ser em português! Desde que entrei no programa Platform Champions da Salesforce, só escrevi posts em inglês. Essa semana pensei: por que não escrever em português?

Saudades de uma churrascaria

Então pensei na ideia durante o final de semana prolongado aqui na Holanda (ontem foi dia do rei e feriado por aqui) e resolvi criar uma solução simples para consultar CEP no Salesforce. Sim, eu sei que atualmente existe uma funcionalidade padrão para busca de endereços, mas ela não traz algumas informações específicas que só existem no Brasil e que algumas empresas precisam (código IBGE do endereço, por exemplo) e também só funciona com os campos de endereço padrão.

Para realizar a consulta de CEPs, usei o ViaCEP. Eu já havia utilizado esse serviço anteriormente em um dos meus clientes quando trabalhava no Brasil e ele se mostrou bem confiável para ser utilizado em ambiente produtivo.

Eu criei um repositório com a estrutura básica da integração com o ViaCEP e algumas classes e flows para atualizar o endereço de uma conta, por exemplo. Nesse post vou explicar bem por cima a integração e como utilizar ela com um flow. Nos posts seguintes que vou escrever vou abordar mais assuntos relacionados ao mundo Salesforce, porém ainda utilizando a ideia desse projeto/repositório.

A integração propriamente dita acontece na classe ViaCepConnector. Nessa classe é feito o callout para o endpoint do ViaCep e também o parse dos dados retornados, assim como a tratativa de erros.

Nesse primeiro post, a ideia que tive foi de utilizar um flow para expor as informaçōes para os usuários de forma que seja possível digitar o CEP desejado, obter os dados de endereço e atualizar uma conta, por exemplos. Sim, poderíamos ter feito um LWC para isso, mas hoje em dia a Salesforce investe mais e mais nas funcionalidades dos flows, então para quê customizar se podemos fazer o que precisamos da maneira padrão? ;)

Para expor a consulta de CEP para os flows, precisamos criar um InvocableMethod. Esse tipo de método nos permite não só passar e receber atributos primitivos, mas também atributos construídos com classes Apex, o que no nosso caso é exatamente o que precisamos. Aqui a classe para analisarmos:

Note que defini uma sub-classe para definir o input, que nesse caso é só uma string contendo o CEP. O retorno nesse caso é do tipo ViaCepResponse, que é a mesma classe utilizada para fazer o parse da integração.

Agora precisamos criar o flow que irá chamar esse método. Ele será chamado por uma quick action no layout do objeto Account. Para que isso seja possível, precisamos criar uma variável no flow chamada recordId. Ela receberá o id do registro quando o flow for aberto pelo contexto do registro de Account que o usuário estiver vendo. Abaixo a visão geral do flow:

A primeira tela do flow é utilizada para perguntar o CEP que o usuário deseja buscar:

Depois temos a ação que chamará o nosso InvocableMethod passando como parâmetro o CEP que o usuário acabou de informar. Clique no botão de adicionar e selecione Action:

Busque pela ação que criamos:

E preencha os campos requeridos. O único atributo de entrada do método é o CEP fornecido pelo usuário:

O serviço do ViaCEP retorna um erro quando o CEP consultado não existe e o código da integração expõe esse atributo para que quem esteja consumindo a resposta (um Flow, um LWC, etc) possa lidar com o erro da maneira que desejar. Dessa maneira, temos um decision step no flow que trata o erro e direciona o usuário para o caminho correto:

Decision step
Os dois caminhos a serem seguidos

Veja acima que mostramos uma tela se o CEP nāo for localizado e outra se o mesmo for encontrado. No caso positivo, mostramos as informaçōes retornadas pela integração para que o usuário possa editar algumas delas manualmente, caso necessário. Em seguida temos uma ação para atualizar a conta e por último uma mensagem de sucesso.

Antes de partirmos para a criaçāo da quick action que irá chamar o flow, é sempre importante ressaltar que quando chamamos um método apex, devemos tratar qualquer erro inesperado (ou esperado) que possa ocorrer no método. Para isso, temos o fault conector:

Para criar a quick action, vá para Setup->Object Manager->Account->Buttons, Links and Actions->New

Preencha os campos de maneira a selecionar o flow que você deseja:

Após isso, edite o page layouts onde o botão será utilizado e teste o mesmo abrindo algum registro de Account. Abaixo o resultado final:

Novamente, caso queira dar uma olhada em todo o código utilizado na solução, dê uma olhada no repositório: https://github.com/marcoalmodova/consulta-cep

Caso tenha alguma dúvida ou sugestão, só deixar uma mensagem aqui ou no meu LinkedIn que vou ter prazer em responder! No próximo post vou usar esse mesmo repositório para criar um Lightning Web Component que utilizará a mesma API para consultar CEPs. Fique ligado!

--

--

Lead Salesforce Developer, Lightning Champion, 21x Salesforce Certified.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Marco Almodova

Lead Salesforce Developer, Lightning Champion, 21x Salesforce Certified.