A local Flow Action is basically a Lightning Component optimized for use as a standalone node in a flow definition.
1) Add the Local Action interface to your component
The component must include the following marker:
implements="flowruntime:availableForLocalInvocableActions"
Note that this will be changing in the Summer '18 release to:
implements="lightning:availableForFlowActions"
2) Add an Invoke method that calls the “callback” function passed from Flow
Flow will attempt to call an Invoke method in your component, so you need to have one there in your controller. It will pass a parameter called “arguments” that contains a callback function called “callback”. Here's an example of code that extracts the callback and then uses it:
invoke : function(component, event, helper) {
.
.
.
component.get("v.scriptLoaded").then($A.getCallback(function() {
//do some stuff using the loaded external script
callback("SUCCESS");
}
}
If you return “ERROR”, then the Fault path of the Node will be executed, giving you the opportunity to specify a recovery path. (Summer '18: If you fail to call the callback function during your processing, it will time out after 2 minutes.)
When the status is 'ERROR', the callback function takes a second parameter for the error message.
If you want to require additional javascript, you need to add it as a static resources to your org and then require it using the
<lightning:require> mechanism as shown here:
<ltng:require aura:id="require" styles="" scripts="{!$Resource.petstore}" afterScriptsLoaded="{!c.scriptsLoaded}"/>.
Timing can be tricky with this, so you should use onScriptsLoaded to make sure the scripts are loaded before you try to use them. Here's an example of this:
In the cmp file:
<aura:attribute name="scriptLoaded" type="Object" default="false"/>
In the controller file:
init : function(component, event, helper) {
component.set("v.scriptLoaded", helper.defer());
},
scriptsLoaded : function(component, event, helper) {
component.get("v.scriptLoaded").resolve(true);
},
invoke : function(component, event, helper) {
.
.
.
component.get("v.scriptLoaded").then($A.getCallback(function() {
//do some stuff using the loaded external script
callback("SUCCESS");
}
}
In the helper file:
defer : function() {
var res, rej;
var promise = new Promise(function(resolve, reject) {
res = resolve;
rej = reject;
});
promise.resolve = res;
promise.reject = rej;
return promise;
If you’re doing callouts to some external server, you need to do the following: