Newer Version Available

This content describes an older version of this product. View Latest

InvocableMethod Annotation

Use the InvocableMethod annotation to identify methods that can be run as invocable actions.

If a flow invokes Apex, the running user must have the corresponding Apex class security set in their user profile or permission set.

Note

Invocable methods are called natively from Rest, Apex, Flow, or Einstein bot that interacts with the external API source. Invocable methods have dynamic input and output values and support describe calls.

This code sample shows an invocable method with primitive data types.

This code sample shows an invocable method with a specific sObject data type.

This code sample shows an invocable method with the generic sObject data type.

This code sample shows an invocable method with a custom icon from an SVG file.

This code sample shows an invocable method with a custom icon from the Salesforce Lightning Design System (SLDS).

To handle exceptions within an invocable method, wrap the results in an Apex object that reports failures. The execution of the invocable method must run and return the same number of results as inputs received even if errors occur.

For example, this code sample adjusts positive values by taking their square root and multiplying by pi, setting a success flag to true. For negative values, it sets the success flag to false.

This test method checks whether the value adjustments were successful and verifies the calculated values for positive inputs.

Supported Modifiers

All modifiers are optional.
label
The label for the method, which appears as the action name in Flow Builder. The default is the method name, though we recommend that you provide a label.
description
The description for the method, which appears as the action description in Flow Builder. The default is Null.
callout
The callout modifier identifies whether the method calls to an external system. If the method calls to an external system, add callout=true. The default value is false.
capabilityType
The capability that integrates with the method. The valid format is Name://Name, for example: PromptTemplateType://SalesEmail
category
The category for the method, which appears as the action category in Flow Builder. If no category is provided (by default), actions appear under Uncategorized.
configurationEditor
The custom property editor that is registered with the method and appears in Flow Builder when an admin configures the action. If you don’t specify this modifier, Flow Builder uses the standard property editor.
iconName
The name of the icon to use as a custom icon for the action in the Flow Builder canvas. You can specify an SVG file that you uploaded as a static resource or a Salesforce Lightning Design System standard icon.

InvocableMethod Considerations

Implementation Notes
  • The invocable method must be static and public or global, and its class must be an outer class.
  • Only one method in a class can have the InvocableMethod annotation.
  • Other annotations can’t be used with the InvocableMethod annotation.
Inputs and Outputs
There can be at most one input parameter and its data type must be one of the following:
  • A list of a primitive data type or a list of lists of a primitive data type – the generic Object type isn’t supported.
  • A list of an sObject type or a list of lists of an sObject type.
  • A list of the generic sObject type (List<sObject>) or a list of lists of the generic sObject type (List<List<sObject>>).
  • A list of a user-defined type, containing variables of the supported types or user-defined Apex types, with the InvocableVariable annotation. To implement your data type, create a custom global or public Apex class. The class must contain at least one member variable with the invocable variable annotation.
If the return type isn’t Null, the data type returned by the method must be one of the following:
  • A list of a primitive data type or a list of lists of a primitive data type – the generic Object type isn’t supported.
  • A list of an sObject type or a list of lists of an sObject type.
  • A list of the generic sObject type (List<sObject>) or a list of lists of the generic sObject type (List<List<sObject>>).
  • A list of a user-defined type, containing variables of the supported types or user-defined Apex types, with the InvocableVariable annotation. To implement your data type, create a custom global or public Apex class. The class must contain at least one member variable with the invocable variable annotation.

    For a correct bulkification implementation, the Inputs and Outputs must match on both the size and the order. For example, the i-th Output entry must correspond to the i-th Input entry. Matching entries are required for data correctness when your action is in bulkified execution, such as when an apex action is used in a record trigger flow.

    Note

Managed Packages
  • You can use invocable methods in packages, but after you add an invocable method you can’t remove it from later versions of the package.
  • Public invocable methods can be referred to by flows and processes within the managed package.
  • Global invocable methods can be referred to anywhere in the subscriber org. Only global invocable methods appear in Flow Builder and Process Builder in the subscriber org.

For more information about invocable actions, see the Actions Developer Guide.