Salesforce的Flow中的Formula功能较弱,稍微复杂一点的功能,以前一般都调用Invokable的apex方法,但觉得需要调用服务端,效率不高。有些功能不牵涉到后台数据,完全可以通过Javascript来做。
但是一般情况下,只有lwc里才有javascript。而Flow不能直接调用lwc,只能加个Screen组件,但如果javascript不需要界面,这个方法就有些笨拙了。
最终考虑用local action来实现。所谓local action,其实就是一个aura组件,只不过不调用服务端。
先建一个aura组件,关键有两点:
1. cmp文件里,要注明implements="lightning:availableForFlowActions" 属性。
2. controller里要有invoke方法。
至于输入输出参数,先在cmp文件里设定
<aura:attribute name="foo" type="String" />
<aura:attribute name="bar" type="Boolean" />
然后在design文件里也设定
<design:attribute name="foo" Label="Input" />
<design:attribute name="bar" Label="Output"/>
然后在invoke方法里写处理逻辑:
let input = component.get("v.foo");
component.set("v.bar", foo == null ? true : false);
最后在Flow里加上这个Local action即可。在action的属性里可以找到foo和bar两个参数。
需要注意的是local action的副作用是会提交事务。所以如果不希望提交事务,则不能用local action。