Usar o Apex para criar uma chamada a um serviço externo
Projete e teste a automação que envia as informações do usuário do Salesforce ao sistema bancário do funcionário externo. Usando os exemplos fornecidos, crie as variáveis para números de telefone do usuário e combine diferentes números de telefone em um dado. Em seguida, use a ação de serviço externo para criar o usuário.
Edições obrigatórias
| Disponível em: Lightning Experience |
| Disponível em: Edições Enterprise, Performance, Unlimited e Developer |
-
Definir uma credencial nomeada
Para este exemplo simplificado, use credenciais nomeadas "legadas". Em vez de clicar em Novo, selecione Novo legado no menu suspenso ao lado do botão Novo. Para a credencial nomeada que sua organização usa para acessar o sistema bancário, atribua o rótulo Bank. Atribua um URL de espaço reservado, como https://api.example.com. Use example.com, pois você colará o esquema no horário de registro, em vez de usar um URL para apontar uma especificação de API.
Caso você use um URL, o URL da credencial nomeada corresponde ao host declarado da especificação da API e um dos esquemas do protocolo de transferência ou protocolos URL. O URL pode apontar para um ponto de extremidade diferente, desde que hospede o mesmo serviço externo. O caminho de base é adicionado ao URL da credencial nomeada na chamada.
- Registre o serviço externo do sistema bancário do funcionário usando as etapas descritas em Registrar um serviço externo como guia. Use o nome BankService e a credencial nomeada Bank e copie o esquema do "Exemplo de especificação da API de serviços externos 2", encontrado no tópico Esquema da OpenAPI 2.0 de serviços externos.
-
Criar a classe do Apex
BankService:public class BankService { } -
Para armazenar os detalhes do usuário, adicione uma variável de membro:
public class BankService { private ExternalService.BankService_z0User user; } -
Para inicializar um usuário vazio com uma lista de telefones vazia, adicione um método:
public class BankService { private ExternalService.BankService_z0User user; private void setEmptyUser() { if (this.user == null) { this.user = new ExternalService.BankService_z0User(); this.user.phones = new List<ExternalService.BankService_Phone>(); } } } -
Para atribuir o valor de telefone comercial, adicione um método:
public class BankService { private ExternalService.BankService_z0User user; public void setWorkPhone(String phoneNumber) { setEmptyUser(); ExternalService.BankService_Phone phone = new ExternalService.BankService_Phone(); phone.phone = phoneNumber; phone.typeofphone = 'Work'; this.user.phones.add(phone); } private void setEmptyUser() { if (this.user == null) { this.user = new ExternalService.BankService_z0User(); this.user.phones = new List<ExternalService.BankService_Phone>(); } } } -
Para atribuir o valor de telefone celular, adicione um método:
public class BankService { private ExternalService.BankService_z0User user; public void setWorkPhone(String phoneNumber) { setEmptyUser(); ExternalService.BankService_Phone phone = new ExternalService.BankService_Phone(); phone.phone = phoneNumber; phone.typeofphone = 'Work'; this.user.phones.add(phone); } public void setCellPhone(String phoneNumber) { setEmptyUser(); ExternalService.BankService_Phone phone = new ExternalService.BankService_Phone(); phone.phone = phoneNumber; phone.typeofphone = 'Cell'; this.user.phones.add(phone); } private void setEmptyUser() { if (this.user == null) { this.user = new ExternalService.BankService_z0User(); this.user.phones = new List<ExternalService.BankService_Phone>(); } } } -
Para atribuir um usuário, adicione um método:
public class BankService { private ExternalService.BankService_z0User user; public void setUser(Integer userId, String userName) { setEmptyUser(); this.user.id = userId; this.user.name = userName; } public void setWorkPhone(String phoneNumber) { setEmptyUser(); ExternalService.BankService_Phone phone = new ExternalService.BankService_Phone(); phone.phone = phoneNumber; phone.typeofphone = 'Work'; this.user.phones.add(phone); } public void setCellPhone(String phoneNumber) { setEmptyUser(); ExternalService.BankService_Phone phone = new ExternalService.BankService_Phone(); phone.phone = phoneNumber; phone.typeofphone = 'Cell'; this.user.phones.add(phone); } private void setEmptyUser() { if (this.user == null) { this.user = new ExternalService.BankService_z0User(); this.user.phones = new List<ExternalService.BankService_Phone>(); } } } -
Crie uma classe de exceção personalizada, pois você não pode gerar exceções integradas do Apex.
Public class BankServiceException extends Exception{}Para obter mais informações, consulte Criar exceções personalizadas no Guia do desenvolvedor do Apex.
-
Para criar usuários no sistema bancário externo, adicione um método para chamar o BankService externo:
public class BankService { private ExternalService.BankService_z0User user; public void createUser() { if (this.user == null || this.user.id == null) { throw new BankServiceException('Set the user to create first'); } ExternalService.BankService bankService = new ExternalService.BankService(); try { ExternalService.BankService.postUsers_Request request = new ExternalService.BankService.postUsers_Request(); request.z0user = this.user; bankService.postUsers(request); } catch (ExternalService.BankService.postUsers_ResponseException e) { throw new BankServiceException('Couldn\'t create user with ID: ' + this.user.id); } } public void setUser(Integer userId, String userName) { setEmptyUser(); this.user.id = userId; this.user.name = userName; } public void setWorkPhone(String phoneNumber) { setEmptyUser(); ExternalService.BankService_Phone phone = new ExternalService.BankService_Phone(); phone.phone = phoneNumber; phone.typeofphone = 'Work'; this.user.phones.add(phone); } public void setCellPhone(String phoneNumber) { setEmptyUser(); ExternalService.BankService_Phone phone = new ExternalService.BankService_Phone(); phone.phone = phoneNumber; phone.typeofphone = 'Cell'; this.user.phones.add(phone); } private void setEmptyUser() { if (this.user == null) { this.user = new ExternalService.BankService_z0User(); this.user.phones = new List<ExternalService.BankService_Phone>(); } } } -
Abra o console do desenvolvedor e depure chamando o
BankServicecom alguns valores de amostra com um snippet de código em uma classe de execução anônima. Abra os logs de depuração e compare-os com este exemplo de log de chamada:BankService bankService = new BankService(); bankService.setWorkPhone('1234567890'); bankService.setCellPhone('0987654321'); bankService.setUser(1234, 'Maria'); bankService.createUser();

