Desafios Apex

Desafios Salesforce na prática

Pratique Apex com cenários demonstrativos, critérios de aceite e dicas para pesquisar. Consulte o gabarito comentado quando quiser comparar as decisões da sua solução.

Como acompanhar: acompanhe seu avanço por autoavaliação. Somente os desafios 01 e 02 têm validação opcional na org; ela consulta o resultado de um teste que você executou e não envia seu código. Nos demais desafios, use as regras de aceite e o gabarito comentado para revisar sua solução.

Trilha recomendada · fundamentos e segurança

Comece pelo 01 e avance até testes

  1. 01Bulkificação e SOQL agregadoArtigo de apoio
  2. 02SOQL dinâmico e segurançaArtigo de apoio
  3. 03Testes que verificam comportamentoGlossário de termos

Precisa conectar uma org para validar os desafios 01 ou 02? Abra o tutorial de conexão.

Desafio 10

Ler e atualizar contatos sem atravessar as permissões

Como administrador a classe passa em tudo; com um atendente restrito ela lê conta que ele não vê e grava campo que ele não pode editar. Você vai separar visibilidade de registro, FLS e DML parcial com USER_MODE e stripInaccessible.

Intermediário FLS USER_MODE stripInaccessible
Desafio 09

Atualizar meio milhão de contas sem estourar o limite

Um update da base inteira estoura o heap e o limite de DML numa transação só. Você vai reescrever a classificação como Batch Apex, acumular o total entre lotes com Database.Stateful e garantir que rodar de novo não muda nada.

Avançado Batch Apex QueryLocator Idempotência
Desafio 08

Salvar o lote quando um registro inválido derruba tudo

Uma conta sem nome no meio do lote derruba as outras 199 e desfaz a importação. Você vai gravar os válidos com Database.insert parcial e devolver o erro de cada linha que falhou, com índice e mensagem.

Intermediário Database.insert allOrNone SaveResult
Desafio 07

Descobrir por que o usuário não vê o registro

O registro existe, mas o usuário jura que sumiu. Você vai construir o diagnóstico que responde por que o acesso existe ou não, usando UserRecordAccess e a RowCause do compartilhamento, do OWD ao dono.

Avançado UserRecordAccess Sharing RowCause
Desafio 01

Somar 200 contas com uma única consulta

O código funciona na demonstração com três contas e morre em produção. Você vai entregar um método que resolve qualquer volume com um SOQL só, e que não esconde as contas sem resultado.

Fundamento SOQL agregado Bulkificação Map
Desafio 02

Filtro dinâmico sem abrir a porta para injection

A tela deixa o usuário escolher o campo e o valor da busca. Você vai fazer isso funcionar para qualquer campo do objeto sem permitir que alguém injete SOQL nem leia campo que não deveria.

Intermediário SOQL dinâmico Schema describe Segurança
Desafio 03

O teste que realmente testa, não só cobre

Cobertura de 90% que passa mesmo com o código errado é fácil. Você vai escrever a classe de teste que fica vermelha quando a regra quebra, com @TestSetup, bulk de 200 e caminho negativo.

Intermediário Testes Apex @TestSetup Fronteira
Desafio 04

Uma task por venda, mesmo com o trigger rodando duas vezes

A automação atualiza o registro, o trigger reexecuta na mesma transação e a org duplica tarefas em silêncio. Você vai construir o handler que detecta a mudança real e nunca duplica, sem quebrar o lote de 201.

Intermediário Trigger handler oldMap Reexecução
Desafio 05

Avisar o ERP quando a venda fecha, sem sequestrar a transação

O callout no trigger trava metade das vendas com "You have uncommitted work pending". Você vai tirar a chamada da transação com Queueable, tratar timeout com retry e garantir idempotência para não duplicar o pedido.

Avançado Callout Queueable Idempotência
Desafio 06

Listar 5 mil registros sem travar o navegador

A tela funciona com trinta linhas e congela com cinco mil. Você vai paginar no servidor com Apex cacheable e cursor por Id, manter o estado entre as cargas e tratar o erro sem deixar a tela em branco.

Avançado LWC Paginação Apex cacheable
Desafio 11

Em breve: somar as oportunidades de várias contas com um SOQL só

A consulta dentro do laço funciona com poucas contas e estoura o limite quando o lote cresce. O próximo desafio é resolver pai e filhos numa relationship query, sem perder as contas que não têm oportunidade aberta.

Intermediário Subquery Bulkificação

Prática que pode ser retomada no seu ritmo. Os desafios existentes permanecem disponíveis com seus gabaritos comentados. Se quiser acompanhar, o blog tem os artigos que dão a base de cada tema, e o glossário explica os termos que aparecem aqui.