Pular para o conteúdo
Skillpedia
APIs e servidores (backend)40 mil · #5355

salesforce-apex-quality

Ajuda seu agente a garantir a qualidade e segurança do código Apex no Salesforce. Ele verifica regras importantes para evitar problemas de limites e segurança.

O que ela faz

Esta ferramenta ajuda a garantir que o código escrito para a plataforma Salesforce seja seguro e eficiente. Ela verifica se há erros comuns que podem causar problemas de desempenho ou segurança, como fazer muitas operações de banco de dados de uma vez ou não verificar se o usuário tem permissão para acessar certos dados.

Quando usar

  • ✓Ao escrever ou revisar código Apex para Salesforce.
  • ✓Quando você quer evitar erros de limite de operação do Salesforce.
  • ✓Para garantir que o código respeita as permissões de usuário (segurança).

Exemplo do que pedir para a IA

“Revise este código Apex para garantir que ele segue as melhores práticas de segurança e limites do Salesforce.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/github/awesome-copilot/blob/main/skills/salesforce-apex-quality/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/github/awesome-copilot/blob/main/skills/salesforce-apex-quality/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A ferramenta analisa seu código em busca de padrões conhecidos que causam problemas. Por exemplo, ela verifica se você está fazendo consultas ao banco de dados ou atualizando informações dentro de um loop, o que é ineficiente e pode travar o sistema. Ela também verifica se o código está configurado para respeitar as permissões de quem o executa.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add github/awesome-copilot --skill salesforce-apex-quality

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/salesforce-apex-quality/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Salesforce Apex Quality Guardrails

Aplique estas verificações a todas as classes, triggers e arquivos de teste Apex que você escrever ou revisar.

Etapa 1 — Verificação de Segurança de Limites do Governador

Analise estes padrões antes de declarar qualquer arquivo Apex como aceitável:

SOQL e DML em Loops — Falha Automática

// ❌ NEVER — causes LimitException at scale
for (Account a : accounts) {
    List<Contact> contacts = [SELECT Id FROM Contact WHERE AccountId = :a.Id]; // SOQL in loop
    update a; // DML in loop
}

// ✅ ALWAYS — collect, then query/update once
Set<Id> accountIds = new Map<Id, Account>(accounts).keySet();
Map<Id, List<Contact>> contactsByAccount = new Map<Id, List<Contact>>();
for (Contact c : [SELECT Id, AccountId FROM Contact WHERE AccountId IN :accountIds]) {
    if (!contactsByAccount.containsKey(c.AccountId)) {
        contactsByAccount.put(c.AccountId, new List<Contact>());
    }
    contactsByAccount.get(c.AccountId).add(c);
}
update accounts; // DML once, outside the loop

Regra: se você vir [SELECT ou Database.query, insert, update, delete, upsert, merge dentro do corpo de um loop for — pare e refatore antes de prosseguir.

Etapa 2 — Verificação do Modelo de Compartilhamento

Cada classe deve declarar sua intenção de compartilhamento explicitamente. Compartilhamento não declarado herda do chamador — comportamento imprevisível.

Declaração Quando usar
public with sharing class Foo Padrão para todas as classes de serviço, handler, selector e controller
public without sharing class Foo Apenas quando a classe precisar ser executada com privilégios elevados (por exemplo, logging em nível de sistema, bypass de trigger). Requer um comentário de código explicando o motivo.
public inherited sharing class Foo Pontos de entrada de framework que devem respeitar o contexto de compartilhamento do chamador

Se uma classe não tiver uma dessas três declarações, adicione-a antes de escrever qualquer outra coisa.

Etapa 3 — Aplicação de CRUD / FLS

O código Apex que lê ou escreve registros em nome de um usuário deve verificar o acesso a objetos e campos. A plataforma não aplica FLS ou CRUD automaticamente no Apex.

// Check before querying a field
if (!Schema.sObjectType.Contact.fields.Email.isAccessible()) {
    throw new System.NoAccessException();
}

// Or use WITH USER_MODE in SOQL (API 56.0+)
List<Contact> contacts = [SELECT Id, Email FROM Contact WHERE AccountId = :accId WITH USER_MODE];

// Or use Database.query with AccessLevel
List<Contact> contacts = Database.query('SELECT Id, Email FROM Contact', AccessLevel.USER_MODE);

Regra: qualquer método Apex chamável de um componente de UI, endpoint REST ou @InvocableMethod deve aplicar CRUD/FLS. Métodos de serviço internos chamados apenas de contextos confiáveis podem usar with sharing em vez disso.

Etapa 4 — Prevenção de Injeção de SOQL

// ❌ NEVER — concatenates user input into SOQL string
String soql = 'SELECT Id FROM Account WHERE Name = \'' + userInput + '\'';

// ✅ ALWAYS — bind variable
String soql = [SELECT Id FROM Account WHERE Name = :userInput];

// ✅ For dynamic SOQL with user-controlled field names — validate against a whitelist
Set<String> allowedFields = new Set<String>{'Name', 'Industry', 'AnnualRevenue'};
if (!allowedFields.contains(userInput)) {
    throw new IllegalArgumentException('Field not permitted: ' + userInput);
}

Etapa 5 — Idiomas Modernos do Apex

Prefira recursos atuais da linguagem (API 62.0 / Winter '25+):

Padrão antigo Substituição moderna
if (obj != null) { x = obj.Field__c; } x = obj?.Field__c;
x = (y != null) ? y : defaultVal; x = y ?? defaultVal;
System.assertEquals(expected, actual) Assert.areEqual(expected, actual)
System.assert(condition) Assert.isTrue(condition)
[SELECT ... WHERE ...] sem contexto de compartilhamento [SELECT ... WHERE ... WITH USER_MODE]

Etapa 6 — Checklist de Cobertura de Teste PNB

Cada funcionalidade deve ser testada em todos os três caminhos. A falta de qualquer um deles é uma falha de qualidade:

Caminho Positivo

  • Entrada esperada → saída esperada.
  • Afirme os valores exatos dos campos, contagens de registros ou valores de retorno — não apenas que nenhuma exceção foi lançada.

Caminho Negativo

  • Entrada inválida, valores nulos, coleções vazias e condições de erro.
  • Afirme que exceções são lançadas com o tipo e mensagem corretos.
  • Afirme que nenhum registro foi mutado quando a operação deveria ter falhado de forma limpa.

Caminho em Massa

  • Insira/atualize/exclua 200–251 registros em uma única transação de teste.
  • Afirme que todos os registros foram processados corretamente — sem falhas parciais devido a limites do governador.

…

Perguntas frequentes

O que são 'limites do governador'?

São regras do Salesforce que limitam a quantidade de processamento que um código pode fazer para garantir que a plataforma funcione bem para todos os usuários.

O que é 'SOQL/DML em loops'?

É quando você faz uma consulta (SOQL) ou uma operação de escrita (DML como inserir, atualizar, deletar) repetidamente dentro de um loop. Isso consome muitos recursos e geralmente é proibido.

O que significa 'segurança CRUD/FLS'?

CRUD (Create, Read, Update, Delete) é sobre permissão para criar, ler, atualizar ou deletar registros. FLS (Field-Level Security) é sobre permissão para acessar campos específicos dentro de um registro. O código deve verificar se o usuário tem essas permissões.

Detalhes

Descrição original do autor

Apex code quality guardrails for Salesforce development. Enforces bulk-safety rules (no SOQL/DML in loops), sharing model requirements, CRUD/FLS security, SOQL injection prevention, PNB test coverage (Positive / Negative / Bulk), and modern Apex idioms. Use this skill when reviewing or generating Apex classes, trigger handlers, batch jobs, or test classes to catch governor limit risks, security ga

repo: github/awesome-copilot

Popularidade

Estrelas no GitHub
40 mil
Posição no ranking
#5355
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas