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
- 01Bulkificação e SOQL agregadoArtigo de apoio
- 02SOQL dinâmico e segurançaArtigo de apoio
- 03Testes que verificam comportamentoGlossário de termos
Precisa conectar uma org para validar os desafios 01 ou 02? Abra o tutorial de conexão.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.