Loading
Automatize seus processo de negócios com o Fluxo do Salesforce
Permitir que os fluxos executem ações do Apex

Permitir que os fluxos executem ações do Apex

O Flow Builder oferece muitos recursos, mas, às vezes, seu fluxo requer funcionalidades além dos elementos padrão. Nesse caso, chame uma classe do Apex no fluxo usando uma ação do Apex.

Edições obrigatórias

Exibir edições com suporte.

Os desenvolvedores têm duas opções quando precisam disponibilizar uma classe do Apex disponível como um elemento de Ação para um fluxo. Embora a interface Process.Plugin permita personalizar a maneira como a classe aparece na paleta, a anotação @InvocableMethod oferece mais funcionalidades. A tabela a seguir descreve os recursos que cada opção oferece suporte.

Dica
Dica Recomendamos usar a anotação @InvocableMethod em vez da interface Process.Plugin.
Importante
Importante Não há suporte para ações do Apex legadas no layout automático no Flow Builder. Ações do Apex legadas estão disponíveis apenas para serem adicionadas em forma livre no Flow Builder. As ações existentes podem ser editadas tanto no layout automático quanto no modo de forma livre.
  Interface Process.Plugin Anotação @InvocableMethod
Suporte a tipos de dados do Apex

Não há suporte para:

  • Blob
  • Coleção
  • sObject
  • Horário

Não há suporte para:

  • Objeto genérico
  • Conjuntos
  • Mapas
  • Enumerações

O Flow Builder não oferece suporte ao mapeamento de parâmetros de entrada ou saída de um método do Apex para uma variável de coleção de registros.

Operações em massa Não há suporte Suportado
Ícones personalizados Não há suporte Suportado
Tipo de elemento no Flow Builder Ação Ação
Experiência de configuração personalizável Não há suporte Com suporte por meio de metadados InvocableActionExtension. Os desenvolvedores podem personalizar a ordem de entrada e o agrupamento, adicionar cabeçalhos personalizados, definir listas de opções para entradas e criar editores de propriedade personalizados para parâmetros de entrada específicos.
Nome do elemento no Flow Builder Nome da classe ou valor da propriedade name. Nome da classe
Reusabilidade Classes com essa interface implementada estão disponíveis em fluxos

Classes com essa anotação implementada estão disponíveis em:

  • Fluxos
  • Processos
  • API Rest
Mais detalhes em Guia do desenvolvedor do Apex Passagem de dados para um fluxo usando a interface Process.Plugin Anotação InvocableMethod e Anotação InvocableVariable
Exemplo
Exemplo Para demonstrar a diferença entre os dois métodos de implementação, aqui estão duas classes que fazem a mesma coisa: obter o nome de uma conta em um fluxo e retornar o seu ID.

Essa classe implementa a anotação @InvocableMethod.

global class lookUpAccountAnnotation {
   @InvocableMethod
   public static List<String> getAccountIds(List<String> names) {
      List<Id> accountIds = new List<Id>();
      List<Account> accounts = [SELECT Id FROM Account WHERE Name in :names];
      for (Account account : accounts) {
         accountIds.add(account.Id);
      }
      return accountIds;
   }
}
Nota
Nota

Para invocar o Apex de um fluxo, o usuário em execução requer a atribuição de classe do Apex correspondente em seu perfil ou conjunto de permissões.

Nota
Nota

A partir da versão 66.0 da API, as classes do Apex personalizadas usadas como parâmetros de ação invocáveis exigem um construtor sem argumento acessível. Para obter mais informações, consulte "Spring '26 (API versão 66.0)" em Atualizações com controle de versão.

Essa classe implementa a interface Process.Plugin.

global class lookUpAccountPlugin implements Process.Plugin { 

   global Process.PluginResult invoke(Process.PluginRequest request) { 
      String name = (String) request.inputParameters.get('name');
      Account account = [SELECT Id FROM Account WHERE Name = :name LIMIT 1][0];

      Map<String,Object> result = new Map<String,Object>();
      result.put('accountId', account.Id);
      return new Process.PluginResult(result);
   }

   global Process.PluginDescribeResult describe() { 
      Process.PluginDescribeResult result = new Process.PluginDescribeResult(); 
      result.Name = 'Look Up Account ID By Name';
      result.Tag = 'Account Classes';
      result.inputParameters = new 
         List<Process.PluginDescribeResult.InputParameter>{ 
            new Process.PluginDescribeResult.InputParameter('name', 
            Process.PluginDescribeResult.ParameterType.STRING, true) 
         }; 
      result.outputParameters = new 
         List<Process.PluginDescribeResult.OutputParameter>{              
            new Process.PluginDescribeResult.OutputParameter('accountId', 
            Process.PluginDescribeResult.ParameterType.STRING)
                }; 
      return result; 
   }
}

Observe que lookupAccountAnnotation é menor que metade do comprimento (11 linhas) de lookupAccountPlugin (28 linhas). Além disso, como a anotação suporta operações em massa, a lookupAccountAnnotation realiza uma consulta por lote de entrevistas. O lookupAccountPlugin realiza uma consulta por entrevista.

 
Carregando
Salesforce Help | Article