Loading
Automatizar sus procesos comerciales
Índice de materias
Seleccionar filtros

          No hay resultados
          No hay resultados
          Estas son algunas sugerencias de búsqueda

          Compruebe la ortografía de sus palabras clave.
          Utilice términos de búsqueda más generales.
          Seleccione menos filtros para ampliar su búsqueda.

          Buscar en toda la Ayuda de Salesforce
          Permitir que los flujos ejecuten acciones de Apex

          Permitir que los flujos ejecuten acciones de Apex

          Flow Builder incluye numerosas funciones, pero a veces su flujo debe hacer más acciones que las permitidas por los elementos predeterminados. En ese caso, llame a una clase de Apex desde su flujo utilizando una acción de Apex.

          Ediciones necesarias

          Ver ediciones compatibles.

          Los desarrolladores tienen dos opciones cuando intentan hacer que una clase de Apex esté disponible como un elemento Acción para un flujo. Aunque la interfaz Process.Plugin admite la personalización sobre la forma en que la clase aparece en la paleta, la anotación @InvocableMethod proporciona más funciones. La siguiente tabla describe las funciones admitidas para cada opción.

          Sugerencia
          Sugerencia Recomendamos utilizar la anotación @InvocableMethod en vez de la interfaz Process.Plugin.
          Importante
          Importante Las acciones Apex heredadas no son compatibles en formato automático en Flow Builder. Las acciones Apex heredadas solo están disponibles para agregarse en formato libre en Flow Builder. Las acciones existentes se pueden modificar en modo de formato automático y de formato libre.
            Interfaz de Process.Plugin Anotación de @InvocableMethod
          Admisión de tipo de datos de Apex

          No admite:

          • Blob
          • Colección
          • sObject
          • Time (Hora)

          No admite:

          • Objeto genérico
          • Conjuntos
          • Mapas
          • Enumeraciones

          Flow Builder no admite la asignación de parámetros de entrada o salida de un método Apex a una variable de colección de registros.

          Operaciones en masa No compatible Compatible
          Iconos de personalización No compatible Compatible
          Tipo de elemento en Flow Builder Acción Acción
          Nombre de elemento en Flow Builder Nombre de clase o el valor de la propiedad name. Nombre de clase
          Capacidad de reutilización Las clases con esta interfaz implementada están disponibles en flujos

          Las clases con esta anotación implementada están disponibles en:

          • Flujos
          • Procesos
          • API de REST
          Más detalles en la Guía del desarrollador de Apex Paso de datos a un flujo utilizando la interfaz de Process.Plugin Anotación InvocableMethod y Anotación InvocableVariable
          Ejemplo
          Ejemplo Para ilustrar la diferencia entre estos dos métodos de implementación, estas son las dos clases que hacen lo mismo: Obtenga un nombre de cuenta desde un flujo y devuelva ese Id. de cuenta.

          Esta clase implementa la anotación @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 Si un flujo invoca a Apex, el usuario que ejecuta debe tener la asignación de clase de Apex correspondiente en su perfil o conjunto de permisos.

          Esta clase implementa la interfaz de 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 es inferior a la mitad de la longitud (11 líneas) de lookupAccountPlugin (28 líneas). Además, como la anotación admite operaciones masivas, lookupAccountAnnotation realiza una consulta por lote de entrevistas. lookupAccountPlugin realiza una consulta por entrevista.

           
          Cargando
          Salesforce Help | Article