Skip to main content

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.
Nota

Nota

Deseja aprender em português (Brasil)? Comece o desafio em um Trailhead Playground de português (Brasil) e use as traduções fornecidas entre parênteses para navegar. Copie e cole somente os valores em inglês porque as validações dos desafios dependem de dados em inglês. Se você não passar no desafio em sua organização de português (Brasil), recomendamos que (1) mude o local para os Estados Unidos, (2) mude o idioma para inglês, seguindo as instruções aqui, e (3) clique novamente no botão “Validar o desafio”.

Consulte o emblema Trailhead no seu idioma para saber mais sobre como aproveitar a experiência de Trailhead em outros idiomas.

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.

O Apex é uma linguagem de programação baseada na nuvem

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 modificador public (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 (Ícone de engrenagem de configuração).

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);
}







Observação

Ir além das noções básicas

O Apex dá suporte a mais dois tipos de coleção: Set e Map. Saiba mais sobre eles na seção Coleções do Guia do desenvolvedor do Apex.

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:

  1. Abra o Developer Console em Seu nome ou no menu de acesso rápido (Ícone de engrenagem de configuração).
  2. No Developer Console, clique em Arquivo | Novo | Classe do Apex, insira EmailManager como nome da classe e, em seguida, clique em OK.
  3. Substitua o corpo de classe padrão pelo exemplo de classe EmailManager.
    A classe EmailManager 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 por sendMail().
    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;
        }
    }
  4. 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.
Observação

Ir além das noções básicas 

A classe que você acabou de salvar utiliza a programação orientada a objetos (OOP, object-oriented programming). A classe encapsula os métodos que estão relacionados ao gerenciamento de emails. Para ser um exemplo perfeito de OOP, a classe também deveria conter variáveis membro (atributos) e métodos de acessador para acessar esses atributos. No entanto, por questões de simplificação, nossa classe não inclui nada disso.

O Salesforce compila a classe quando você a salva.

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.

Nota

Nota

Há outras maneiras de invocar o Apex, por exemplo, por meio de acionadores. Falaremos mais sobre acionadores em outro módulo.

  1. No Developer Console, clique em Depurar | Abrir a janela Executar anônimo.
  2. 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');
  3. 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.

  1. No Developer Console, clique na guia Logs (Registros) e clique duas vezes no registro mais recente da lista.
  2. Selecione Debug Only (Depurar apenas) para filtrar o log, de modo que apenas as linhas de log das instruções System.debug() sejam exibidas. Filtrar o registro de depuração no Console do desenvolvedor para exibir mensagens de depuração

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
Nota

Nota

Além disso, você pode filtrar o registro de depuração ao pesquisar por qualquer palavra-chave no campo Filtrar ou ao selecionar uma outra opção qualquer. Para obter mais informações, consulte a Ajuda da Inspeção de registro.

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.

  1. No Developer Console, localize a guia aberta da classe EmailManager e modifique a primeira linha da definição do método sendMail() para o seguinte (a única alteração é a adição da palavra-chave static).
    public static void sendMail(String address, String subject, String body) {
  2. Clique em Arquivo | Salvar para salvar sua classe.
  3. 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');
  4. 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

Compartilhe seu feedback do Trailhead usando a Ajuda do Salesforce.

Queremos saber sobre sua experiência com o Trailhead. Agora você pode acessar o novo formulário de feedback, a qualquer momento, no site Ajuda do Salesforce.

Saiba mais Continue compartilhando feedback