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.
@InvocableMethod en vez de la interfaz Process.Plugin.Interfaz de Process.Plugin |
Anotación de @InvocableMethod |
|
|---|---|---|
| Admisión de tipo de datos de Apex | No admite:
|
No admite:
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:
|
| 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 |
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;
}
}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.

