Excelência operacional – Padrões de automação
Saiba mais sobre a excelência operacional bem projetada → Automação e eficiência
Padrões
| Onde procurar | Qual é a boa aparência |
|---|---|
| Plataforma | Painéis | ✅ Todas as métricas relacionadas a KPIs estão incluídas em pelo menos um painel |
| Plataforma | Documentação | ✅ Saídas para cada automação são mensuráveis e temporizadas |
| Plataforma | Documentação | ✅ Partes interessadas responsáveis são listadas para cada KPI |
Anti-Padrões
| Onde procurar | Qual é a aparência ruim |
|---|---|
| Plataforma | Painéis | ⚡️ O relatório de KPI não existe ou os painéis estão sem métricas relacionadas a alguns KPIs |
| Plataforma | Documentação | ⚡️ Há KPIs sem partes interessadas responsáveis |
| Plataforma | Documentação | ⚡️ Os KPIs não existem para automações ou têm períodos de tempo imprecisos para medidas |
Padrões
| Onde procurar | Qual é a boa aparência |
|---|---|
| Plataforma | Fluxo | ✅ O Flow Builder é usado para automação acionada por registro (substituindo o Criador de processos e as Regras de fluxo de trabalho) |
| Plataforma | Fluxo | ✅ Fluxos acionados por registro com execução antes de salvar são usados para preenchimento de campo antes da criação do registro |
| Plataforma | Fluxo | ✅ Os fluxos lidam com lógica de decisão, loops, chamadas à API, operações DML e orquestração complexa de várias etapas |
| Plataforma | Fluxo | ✅ O controle de transação de fluxo é usado para confirmar alterações intermediárias quando necessário |
| Plataforma | Fluxo | ✅ O tratamento de falhas é implementado para uma boa recuperação de erros em fluxos |
| Plataforma | Fluxo | ✅ Fluxos de tela reativos proporcionam experiências de usuário dinâmicas |
| Plataforma | Fluxo | ✅ Automação declarativa é escolhida quando usuários comerciais ou administradores precisam modificar a lógica sem o envolvimento do desenvolvedor |
| Plataforma | Fluxo | ✅ Variáveis não se referem a valores embutidos em código (para tipos de registro, usuários etc.) |
| Plataforma | Fluxo | ✅ Lógica manual de fluxos para Apex em contextos de grande volume de dados |
| Plataforma | Fluxo | ✅ Os subfluxos são usados para seções de processos que precisam ser reutilizadas em todo o negócio |
| Plataforma | Fluxo | ✅ Todos os fluxos iniciados automaticamente usam elementos de decisão e/ou pausa para avaliar critérios de entrada e evitar loops ou execuções infinitas em grandes volumes de dados |
| Plataforma | Fluxo | ✅ Os usuários são solicitados a fornecer dados apenas quando os dados do sistema existentes não puderem ser usados |
| Plataforma | Fluxo | ✅ Os fluxos são organizados em uma estrutura hierárquica que consiste em um fluxo principal e subfluxos de suporte |
| Plataforma | Fluxo | ✅ Todas as entradas do usuário têm um propósito claro no fluxo |
| Plataforma | Fluxo | ✅ Cada fluxo atende a uma única finalidade específica |
| Plataforma | Fluxo | ✅ Cada etapa realiza uma tarefa granular específica |
| Plataforma | Fluxo | ✅ Todos os fluxos iniciados no contexto do usuário abstraem transações de contexto do sistema para subfluxos, colocadas de modo consistente após o elemento Pausar para criar nova transação |
| Plataforma | Fluxo | ✅ Todos os fluxos acionados por registro têm valores de ordem do acionador preenchidos |
| Plataforma | Fluxo | ✅ Fluxos que envolvem chamadas do sistema externo ou processos de execução longa usam caminhos assíncronos |
| Plataforma | Fluxo | ✅ Sequências complexas de operações de dados relacionadas são criadas com o Orquestrador (em vez de invocar vários subfluxos em um fluxo monolítico) |
| Plataforma | Validação | ✅ A integridade de dados é imposta no nível da plataforma usando regras de validação, regras de duplicados e campos obrigatórios |
| Plataforma | Validação | ✅ Regras de validação impedem a entrada de dados inválidos antes de salvar (mais eficiente do que a validação de acionador) |
| Plataforma | Processos de aprovação | ✅ O roteamento de aprovação de várias etapas lida com caminhos de aprovação paralelos e sequenciais com aprovadores delegados |
| Plataforma | Processos de aprovação | ✅ A arquitetura de aprovação considera cenários de exceção (todos os aprovadores em férias, exigência de negócios urgente ignorando a aprovação normal) |
Anti-Padrões
| Onde procurar | Qual é a aparência ruim |
|---|---|
| Plataforma | Fluxo | ⚡️ Criador de processos e regras de fluxo de trabalho usadas para nova automação (o Flow Builder é a direção estratégica) |
| Plataforma | Fluxo | Automação programática usada quando usuários de negócios ou administradores precisam modificar a lógica sem o envolvimento do desenvolvedor |
| Plataforma | Fluxo | Fluxos carecem de tratamento de falha, resultando em má recuperação de erros |
| Plataforma | Fluxo | ⚡️ As variáveis têm valores embutidos em código |
| Plataforma | Fluxo | ⚡️ Os fluxos devem ser desativados manualmente antes do carregamento de dados em massa |
| Plataforma | Fluxo | ⚡️ Partes de um fluxo são repetidas entre fluxos em vez de usar subfluxos |
| Plataforma | Fluxo | Fluxos acionam avisos de “exceção não tratada” |
| Plataforma | Fluxo | ⚡️ Mesmo fluxos simples geralmente causam erros relacionados aos limites do regulador |
| Plataforma | Fluxo | Fluxos exigem entradas adicionais para fornecer contexto |
| Plataforma | Fluxo | Fluxos atendem a várias finalidades |
| Plataforma | Fluxo | Grupos de etapas relacionadas contêm funcionalidade que se sobrepõe a grupos de etapas em outros fluxos |
| Plataforma | Fluxo | ⚡️ Os fluxos solicitam entradas do usuário quando os dados armazenados podem ser usados |
| Plataforma | Fluxo | Fluxos exigem entradas cujos dados não são usados |
| Plataforma | Fluxo | ⚡️ Realizar DML usando a coleção que é gerada do componente de tela (utilizando a configuração “Usar os IDs e todos os valores de campo de um registro ou coleção de registros” ao criar, atualizar ou excluir o elemento quando a coleção é gerada do componente de tela) |
| Plataforma | Fluxo | Fluxos acionados por registro não usam atributos de ordem de acionador ou não usam valores de ordem de acionador de modo consistente |
| Plataforma | Fluxo | ⚡️ Caminhos assíncronos não usados de modo consistente ou de modo algum |
| Plataforma | Fluxo | Fluxos grandes e monolíticos tentam coordenar sequências complexas de operações de dados relacionadas (com ou sem subfluxos) |
| Plataforma | Processos de aprovação | ⚡️ A arquitetura de aprovação não considera cenários de exceção (todos os aprovadores em férias, requisitos de negócios urgentes) |
| Plataforma | Validação | Integridade de dados imposta apenas em acionadores em vez de regras de validação (a validação do acionador é menos eficiente e mais complexa) |
Padrões
| Onde procurar | Qual é a boa aparência |
|---|---|
| Plataforma | Apex | ✅ A estrutura do manipulador do acionador impõe acionador único por objeto, massificação, separação de preocupações e prevenção de execução recursiva |
| Plataforma | Apex | ✅ Acione manipuladores delegados a classes de serviço para lógica de negócios, mantendo uma separação clara das preocupações |
| Plataforma | Apex | ✅ Os acionadores usam proteção contra recursão usando sinalizadores estáticos ou classe de controle de recursão dedicada |
| Plataforma | Apex | ✅ Futuro Apex é usado com moderação, para chamadas ou DML de objeto do sistema |
| Plataforma | Apex | ✅ As invocações assíncronas do Apex usam DML complexo enfileirável para ‘corrente’ em transações |
| Plataforma | Apex | ✅ O Apex em lote é usado para grandes volumes de dados (processam grandes quantidades de dados com limites de regulador dedicados por bloco) |
| Plataforma | Apex | ✅ Os trabalhos em lote têm o tratamento de erros que registra registros com falha sem interromper toda a execução do lote |
| Plataforma | Apex | ✅ A API em massa é usada apenas quando grandes quantidades de dados precisam ser processadas (APIs SOAP e REST nativas aproveitadas para quantidades menores de dados) |
| Plataforma | Apex | ✅ O Apex enfileirável é usado para orquestração de fluxo de trabalho complexo, chamadas externas com lógica de repetição e processamento que se beneficia de limites assíncronos |
| Plataforma | Apex | ✅ O Apex agendado executa o processamento em agendas fixas para manutenção noturna, relatórios diários, sincronização de integração periódica e regras de negócios baseadas em tempo |
| Plataforma | Padrões de design | ✅ Casos de uso para operações síncronas e assíncronas em automações são descritos claramente como parte dos padrões de design |
| Plataforma | Documentação | ✅ Caminhos de execução planejados e em potencial para automações são descritos claramente |
Anti-Padrões
| Onde procurar | Qual é a aparência ruim |
|---|---|
| Plataforma | Apex | ⚡️ Vários acionadores em um objeto com ordem de execução imprevisível e lógica sobreposta |
| Plataforma | Apex | ⚡️ Lógica de negócios integrada diretamente em arquivos de acionador, dificultando o teste |
| Plataforma | Apex | ⚡️ Nenhuma estrutura de manipulador de acionador ou padrões de acionador inconsistentes entre objetos |
| Plataforma | Apex | Os trabalhos do Apex em lote têm um tamanho de escopo muito pequeno (por exemplo, tamanho de escopo = 1) |
| Plataforma | Apex | Apex em lote usado para chamadas externas (grandes volumes de dados do Salesforce enviados para um sistema externo usando o Apex em lote) |
| Plataforma | Apex | Recursos do Apex assíncronos usados arbitrariamente (Métodos futuros e Apex enfileirável usados de forma inconsistente ou intercambiável) |
| Plataforma | Apex | Apex assíncrono raramente usado |
| Plataforma | Apex | Operações de banco de dados não têm lógica clara e consistente para passar a execução para o Apex em lote quando necessário |
| Plataforma | Padrões de design | ⚡️ Casos de uso para operações síncronas e assíncronas não são tratados |
| Plataforma | Documentação | A invocação de automação não está documentada |
Padrões
| Onde procurar | Qual é a boa aparência |
|---|---|
| Plataforma | Eventos de plataforma | ✅ Os eventos de plataforma são usados para automação conduzida por evento que separa editores dos assinantes |
| Plataforma | Eventos de plataforma | ✅ Os editores não estão cientes dos assinantes e publicam o fire-and-forget |
| Plataforma | Eventos de plataforma | ✅ Vários assinantes reagem de forma independente a eventos por meio de fluxos acionados por evento de plataforma, acionadores do Apex ou integrações externas |
| Plataforma | Eventos de plataforma | ✅ IDs de reprodução são usados para reproduzir eventos perdidos de qualquer ponto na janela de retenção de 72 horas |
| Plataforma | Eventos de plataforma | ✅ Eventos de plataforma habilitam comunicação entre organizações, notificação do sistema externo e orquestração de fluxo de trabalho interno |
Anti-Padrões
| Onde procurar | Qual é a aparência ruim |
|---|---|
| Plataforma | Eventos de plataforma | Cópia direta entre editores e assinantes, impedindo a automação composível |
| Plataforma | Eventos de plataforma | A atualização do nível da conta chama diretamente a atualização da oportunidade, a notificação da equipe da conta e a sincronização do armazém de dados em uma transação (o acoplamento rígido exige alterações na lógica da conta sempre que um novo processamento downstream for necessário) |
| Plataforma | Apex | ⚡️ Publicar eventos de plataforma imediatamente usado adhoc (eventos em tempo real usados em vez de Publicar após confirmação, independentemente dos requisitos de pedido de publicação ou riscos de bloqueio de registro) |
Padrões
| Onde procurar | Qual é a boa aparência |
|---|---|
| Plataforma | Apex | ✅ As instruções SOQL usam operadores de comparação de lógica positiva (INCLUDES, IN) como lógica primária ou única |
| Plataforma | Apex | ✅ SOQL evita = NULL, != NULL ou usa-os com moderação após operadores de comparação positivos |
| Plataforma | Apex | ✅ SOQL não usa instruções de LIMIT 1 |
| Plataforma | Apex | ✅ SOQL não usa palavra-chave ALL ROWS |
| Plataforma | Apex | ✅ SOQL não aparece em loops |
| Plataforma | Apex | ✅ Critérios de curinga aparecem em SOSL (não SOQL) |
| Plataforma | Apex | ✅ As instruções SOQL evitam comparações de LIKE ou comparações parciais de texto |
| Plataforma | Apex | ✅ SOQL é agrupado em blocos de try-catch |
| Plataforma | Apex | ✅ Variáveis não se referem a valores embutidos em código (para tipos de registro, usuários etc.) |
| Plataforma | Apex | ✅ Cada classe atende a um único propósito específico |
| Plataforma | Apex | ✅ Cada método realiza uma tarefa granular específica |
| Plataforma | Apex | ✅ Todas as variáveis de entrada têm um propósito claro dentro da classe |
| Plataforma | Apex | ✅ A execução de código requer um número mínimo de recursos |
Anti-Padrões
| Onde procurar | Qual é a aparência ruim |
|---|---|
| Plataforma | Apex | As instruções SOQL usam NOT, critérios de NOT IN como principal ou único operador de comparação (não seletivo) |
| Plataforma | Apex | ⚡️ As instruções SOQL usam palavra-chave ALL ROWS (não seletiva) |
| Plataforma | Apex | As instruções SOQL usam = NULL, critérios de != NULL como principal ou único operador de comparação (não seletivo) |
| Plataforma | Apex | ⚡️ As variáveis têm valores embutidos em código |
| Plataforma | Apex | ⚡️ SOQL aparece dentro de loops |
| Plataforma | Apex | As instruções SOQL usam critérios de filtro de curinga e LIKE com frequência (não seletivo) |
| Plataforma | Apex | ⚡️ SOQL não encapsulado em blocos de try-catch |
| Plataforma | Apex | ⚡️ As instruções SOQL usam LIMIT 1 (não seletivo) |
| Plataforma | Apex | ⚡️ SOSL raramente ou não é usado de modo consistente para critérios de seleção de curinga |
| Plataforma | Apex | ⚡️ As classes têm várias finalidades |
| Plataforma | Apex | Métodos realizam várias tarefas ou métodos realizam tarefas que não estão alinhadas ao propósito declarado da classe da qual fazem parte |
| Plataforma | Apex | As variáveis de entrada não são, na verdade, usadas em métodos |
| Plataforma | Apex | Métodos que recuperam dados desnecessariamente do banco de dados ou de sistemas externos |
Padrões
| Onde procurar | Qual é a boa aparência |
|---|---|
| Plataforma | Apex | ✅ Exceções personalizadas são usadas para criar mensagens de erro avançadas e lógica |
| Plataforma | Apex | ✅ O código engloba todas as etapas de DML, SOQL, chamadas e outros processos críticos em blocos de try-catch |
| Plataforma | Apex | ✅ Os métodos de classe de banco de dados podem ser usados exclusivamente para todas as operações de dados (em vez de DML) |
| Plataforma | Apex | ✅ Em contextos assíncronos e em massa, métodos de classe de banco de dados são usados em vez de DML |
| Plataforma | Aura | ✅ JavaScript engloba todas as operações de dados e etapas críticas do processo em blocos de try-catch |
| Plataforma | Aura | ✅ Dentro de blocos de try-catch, Error JavaScript nativo é usado em instruções de tiro (sem uso de $A.error()) |
| Plataforma | Aura | ✅ Todas as lógicas de erro recuperáveis aparecem nas instruções de catch e fornecem mensagens claras do usuário |
| Plataforma | Fluxo | ✅ Fluxos com operações de dados, chamadas e outra lógica de processamento crítica têm caminhos de falha para todas as ações-chave |
| Plataforma | Fluxo | ✅ Fluxos de tela usam consistentemente conectores de falha para mostrar erros aos usuários |
| Plataforma | Fluxo | ✅ Mensagens de erro personalizadas são configuradas para erros que aparecerão na tela |
| Plataforma | Componentes da Web Lightning (LWC) | ✅ JavaScript engloba todas as operações de dados e etapas críticas do processo em blocos if ()/else if () |
| Plataforma | Componentes da Web Lightning (LWC) | ✅ Todas as funções de @wire usam propriedades de data e error fornecidas pela API |
| Plataforma | Componentes da Web Lightning (LWC) | ✅ Todas as instruções if (error)/else if (error) contêm lógica para processar erros e fornecer mensagens informativas |
Anti-Padrões
| Onde procurar | Qual é a aparência ruim |
|---|---|
| Plataforma | Apex | ⚡️ DML, SOQL, chamadas ou outras etapas do processo críticas não colocadas consistentemente em blocos de captura de teste |
| Plataforma | Apex | ⚡️ Nenhum método de classe de banco de dados é usado |
| Plataforma | Apex | ⚡️ Operações de dados feitas exclusivamente com DML |
| Plataforma | Apex | As declarações de System.debug aparecem no código de produção (e não são comentadas) |
| Plataforma | Aura | ⚡️ O JavaScript não engloba consistentemente operações de dados e etapas críticas do processo em blocos de try-catch |
| Plataforma | Aura | Componentes usam $A.error() |
| Plataforma | Aura | ⚡️ Lógica de erro recuperável não aparece consistentemente nas instruções de catch, e as mensagens de erro para os usuários não estão claras |
| Plataforma | Fluxo | ⚡️ Os fluxos não usam caminhos de falha de modo consistente ou de modo algum |
| Plataforma | Fluxo | ⚡️ Mensagens de erro personalizadas não usadas, portanto, os usuários veem a mensagem padrão “Uma falha não tratada ocorreu nesse fluxo” |
| Plataforma | Componentes da Web Lightning (LWC) | Funções de @wire não usam propriedades de data e error fornecidas pela API (ou não as usam de forma consistente) |
| Plataforma | Componentes da Web Lightning (LWC) | ⚡️ Se usado, as instruções if (error)/else if (error) na verdade não contêm lógica para processar erros e fornecer mensagens úteis de erro |
| Plataforma | Componentes da Web Lightning (LWC) | O JavaScript não usa consistentemente blocos if ()/else if () com operações de dados ou etapas críticas do processo |