Introdução ao Apex
Objetivos de aprendizagem
Após concluir esta unidade, você estará apto a:
- Descrever os principais recursos da linguagem de programação do Apex.
- Salvar uma classe do Apex e métodos de chamada com Apex anônimo.
- Usar o Developer Console para inspecionar registros de depuração.
Antes de começar
Estamos empolgados em acompanhá-lo em sua aventura Apex. Embora este módulo cubra informações básicas sobre a linguagem de programação, ele também aprofunda a questão, rapidamente. Se este módulo for sua primeira exposição ao Apex, recomendamos que você passe primeiro por Início rápido: projeto Apex. Mas depois volte, estaremos esperando por você!
O que é o Apex?
Apex é uma linguagem de programação que usa sintaxe similar à do Java e funciona como procedimentos armazenados no banco de dados. O Apex permite que os desenvolvedores adicionem lógica de negócios a eventos do sistema, tais como cliques em botões, atualizações de registros relacionados e páginas do Visualforce.
Como linguagem, o Apex é:
- Hospedado – O Apex é salvo, compilado e executado no servidor, que é a Lightning Platform.
- Orientado por objetos — O Apex é compatível com classes, interfaces e herança.
- Altamente tipificado — O Apex valida as referências aos objetos no momento da compilação.
- Consciente dos multilocatários — Como o Apex é executado em uma plataforma multilocatário, ele protege rigorosamente contra códigos sem controle através da imposição de limites, que impede o código de monopolizar recursos compartilhados.
- Integrado ao banco de dados — Ele acessa e manipula registros diretamente. O Apex proporciona acesso direto aos registros e seus campos, e oferece instruções e linguagens de consulta para manipular tais registros.
- Concentrado nos dados — O Apex oferece acesso transacional ao banco de dados, permitindo que você reverta operações.
- Fácil de usar — O Apex se baseia em linguagens Java conhecidas.
- Fácil de testar — O Apex oferece suporte integrado à criação, execução e cobertura de código de testes de unidade. Para garantir que todos os códigos personalizados do Apex funcionam como esperado, o Salesforce executa todos os testes de unidade antes de qualquer atualização da plataforma.
- Compatível com versões — É possível salvar códigos personalizados do Apex referentes a diversas versões da API.
Destaques da linguagem Apex
Assim como outras linguagens de programação orientadas por objeto, o Apex é compatível com estas construções de linguagem, entre outras:
- Classes, interfaces, propriedades e coleções (listas, mapas e conjuntos).
- Notação de objeto e matriz.
- Expressões, variáveis e constantes.
- Instruções condicionais (if-then-else) e instruções de fluxo de controle (loops for e loops while).
Ao contrário das outras linguagens de programação orientadas por objeto, o Apex é compatível com:
- Desenvolvimento na nuvem, pois o Apex é armazenado, compilado e executado na nuvem.
- Acionadores, que são semelhantes aos acionadores dos sistemas de banco de dados.
- Instruções de banco de dados, que permitem fazer chamadas diretas para o banco de dados e consultar linguagens a fim de consultar e pesquisar dados.
- Transações e reversões.
- O modificador de acesso
global
, que é mais permissivo do que o modificadorpublic
(público) e permite o acesso entre namespaces e aplicativos.
- Versões do código personalizado.
Além disso, o Apex é uma linguagem que não diferencia maiúsculas de minúsculas.
Ferramentas de desenvolvimento
Você também pode programar e depurar o Apex no computador cliente utilizando Extensões do Salesforce para Visual Studio Code. Consulte Extensões do Salesforce para Visual Studio Code.
Também é possível programar Apex e acessar informações de depuração diretamente no navegador por meio da interface de usuário do Salesforce. Abra o Developer Console em Seu nome ou no menu de acesso rápido ().
Visão geral dos tipos de dados
O Apex dá suporte a vários tipos de dados, inclusive um tipo de dados específico do Salesforce, o sObject.
O Apex dá suporte aos seguintes tipos de dados.
- Números primitivos, como números inteiros, duplos, longos, data, data/hora, string, ID, booleano e outros.
- Um sObject, seja um sObject geral ou específico, como uma Conta, um Contato ou MyCustomObject__c (você aprenderá mais sobre sObjects em outra unidade).
- Uma coleção, incluindo:
- Uma lista de números primitivos, sObjects, objetos definidos pelo usuário, objetos criados de classes do Apex ou coleções
- Um conjunto de números primitivos, sObjects, objetos definidos pelo usuário, objetos criados de classes do Apex ou coleções
- Um mapa de um número primitivo para um número primitivo, sObject ou coleção
- Uma lista tipificada de valores, também conhecida como enum
- Classes do Apex definidas pelo usuário
- Classes do Apex fornecidas pelo sistema
Coleções do Apex: Lista
As listas contêm uma coleção ordenada de dados do mesmo tipo.
As duas declarações a seguir são equivalentes. A variável colors
é declarada usando a sintaxe List.
List<String> colors = new List<String>();
Como alternativa, a variável colors
(cores) pode ser declarada usando a notação de matriz.
String[] colors = new List<String>();
Cultive coleções conforme necessário usando o método List.add()
para adicionar novos elementos. Você pode usar a notação da matriz de colchetes para referenciar elementos existentes na coleção por índice. No entanto, você não pode usar a notação de matriz de colchetes para adicionar mais elementos.
Este exemplo mostra como adicionar elementos a uma lista, quando você cria uma e, em seguida, usar o método add()
para adicionar mais elementos.
// Create a list and add elements to it in one step List<String> colors = new List<String> { 'red', 'green', 'blue' }; // Add elements to a list after it has been created List<String> moreColors = new List<String>(); moreColors.add('orange'); moreColors.add('purple');
Os elementos de lista podem ser lidos com a especificação de um índice entre colchetes, conhecido como notação de matriz. Além disso, você pode usar o método get()
para ler um elemento de lista. Este exemplo é baseado nas listas criadas no exemplo anterior e mostra como ler elementos de lista usando um desses métodos. O exemplo também mostra como iterar sobre elementos da lista.
// Get elements from a list String color1 = moreColors.get(0); String color2 = moreColors[0]; System.assertEquals(color1, color2); // Iterate over a list to read elements System.debug('Print out the colors in moreColors:'); for(String color : moreColors) { // Write value to the debug log System.debug(color); }
Classes do Apex
Uma das vantagens das classes do Apex é a reutilização do código. Os métodos de classe podem ser chamados por acionadores e outras classes. O tutorial a seguir orienta você no processo de salvar uma classe de exemplo na organização, usando esta classe para enviar emails e inspecionar os registros de depuração.
Salvar uma classe do Apex
Salve a classe EmailManager
em sua organização:
- Abra o Developer Console em Seu nome ou no menu de acesso rápido ().
- No Developer Console, clique em Arquivo | Novo | Classe do Apex, insira EmailManager como nome da classe e, em seguida, clique em OK.
- Substitua o corpo de classe padrão pelo exemplo de classe
EmailManager
.
A classeEmailManager
tem um método público (sendMail()
) que envia emails e usa métodos de envio de mensagens incorporados da biblioteca de classes do Apex. Além disso, essa classe tem um método auxiliar privado (inspectResults()
) que não pode ser chamado externamente por ser privado, mas é utilizado apenas dentro da classe. Esse método auxiliar inspeciona os resultados da chamada de envio de email e é chamado porsendMail()
.public class EmailManager { // Public method public void sendMail(String address, String subject, String body) { // Create an email message object Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new String[] {address}; mail.setToAddresses(toAddresses); mail.setSubject(subject); mail.setPlainTextBody(body); // Pass this email message to the built-in sendEmail method // of the Messaging class Messaging.SendEmailResult[] results = Messaging.sendEmail( new Messaging.SingleEmailMessage[] { mail }); // Call a helper method to inspect the returned results inspectResults(results); } // Helper method private static Boolean inspectResults(Messaging.SendEmailResult[] results) { Boolean sendResult = true; // sendEmail returns a list of result objects. // Iterate through the list to inspect results. // In this class, the methods send only one email, // so we should have only one result. for (Messaging.SendEmailResult res : results) { if (res.isSuccess()) { System.debug('Email sent successfully'); } else { sendResult = false; System.debug('The following errors occurred: ' + res.getErrors()); } } return sendResult; } }
- Clique em File (Arquivo) | Save (Salvar) para salvar sua classe.
OBSERVAÇÃO: Se seu código não estiver sintaticamente correto, um erro aparece na guia Problemas. Você pode usar os detalhes do erro para corrigir seu código.
Chamar um método para enviar um email
Vamos invocar o método público. Vamos usar a execução do Apex anônimo para fazer isso. O Apex anônimo permite executar linhas de código instantaneamente e é uma maneira prática de invocar o Apex, especialmente para testar a funcionalidade. São gerados resultados de registro de depuração, como em qualquer outra execução do Apex.
- No Developer Console, clique em Depurar | Abrir a janela Executar anônimo.
- Na janela exibida, insira o seguinte. Substitua ‘Seu endereço de email’ pelo seu endereço de email.
EmailManager em = new EmailManager(); em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
- Clique em Execute (Executar).
Você deve receber um email em sua caixa de entrada. Verifique seu email!
Ver registros de depuração
Os registros de depuração são úteis para depurar seu código. Quando os métodos do Apex são executados, as chamadas são registradas no registro de depuração. Além disso, você pode gravar suas próprias mensagens de depuração no registro para ajudar na depuração do código no caso de existirem erros. O método auxiliar inspectResults()
, chamado por sendMail()
, grava mensagens no registro usando o método System.debug()
para indicar se a operação de envio de emails foi bem-sucedida ou apresentou erros. Você pode procurar estas mensagens no registro de depuração que foi gerado ao executar o método.
- No Developer Console, clique na guia Logs (Registros) e clique duas vezes no registro mais recente da lista.
- Selecione Debug Only (Depurar apenas) para filtrar o log, de modo que apenas as linhas de log das instruções
System.debug()
sejam exibidas.
Você verá a seguinte mensagem na exibição filtrada do registro, partindo do princípio de que o email tenha sido enviado sem erros.
DEBUG|Email sent successfully
Chamar um método estático
Como o método sendMail()
em nossa classe não acessa variáveis membro da classe, não é necessário que ele seja um método de instância. Vamos alterá-lo para método estático adicionando a palavra-chave static
a sua declaração. Os métodos estáticos são mais fáceis de chamar do que os métodos de instância porque eles não precisam ser chamados em uma instância da classe, mas são chamados diretamente no nome da classe.
- No Developer Console, localize a guia aberta da classe
EmailManager
e modifique a primeira linha da definição do métodosendMail()
para o seguinte (a única alteração é a adição da palavra-chavestatic
).public static void sendMail(String address, String subject, String body) {
- Clique em Arquivo | Salvar para salvar sua classe.
- Modifique as instruções na janela Executar anônimo para chamar o método estático no nome da classe.
EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
- Clique em Executar.Agora que este método foi executado, você pode verificar seu email e, opcionalmente, o log de depuração como nas etapas anteriores.
Recursos
-
Introduction to Apex Code (Recorded Webinar)
-
Guia do desenvolvedor do Apex: Introducing Apex
-
Trailhead: Noções básicas do Developer Console