🌾选择编排
我们在写业务逻辑的时候,通常会碰到选择性问题,即,如果返回结果1,则进入A流程,如果返回结果2,则进入B流程,如果返回结果3,则进入C流程。在有些流程定义中也被定义为排他网关。
这个通过LiteFLow的表达式也非常容易实现,你可以用SWITCH
...TO
的组合关键字,注意的是SWITCH
必须大写,to
大小写均可。
# 最基本的例子
如果,根据组件a,来选择执行b,c,d中的一个,你可以如下声明:
<chain name="chain1">
SWITCH(a).to(b, c, d);
</chain>
图示
# DEFAULT关键字
LiteFlow从2.9.5开始,对选择编排新增了一个DEFAULT
关键字。用法为SWITCH
...TO
...DEFAULT
。
比如如下表达式:
<chain name="chain1">
SWITCH(x).TO(a, b, c).DEFAULT(y);
</chain>
如上表达式的x
如果返回非a
,b
,c
中的一个,则默认选择到y
。当然DEFAULT里面也可以是一个表达式。
# 和THEN,WHEN嵌套起来
我们结合之前两章,把三种表达式嵌套起来看一些例子
<chain name="chain1">
THEN(
a,
WHEN(
b,
SWITCH(c).to(d,e)
),
f
);
</chain>
图示
# 选择编排中的id语法
接下来展示一个SWITCH
中套THEN
和WHEN
的例子。
如果你阅读过选择组件这一章,就应该知道,LiteFlow通过选择组件的返回来确定该选择什么。
那么如果SWITCH
中套一个THEN
,那么选择组件如果要选择这个THEN
应该返回什么呢?
LiteFlow中规定,每个表达式都可以有一个id值,你可以设置id值来设置一个表达式的id值。然后在选择组件里返回这个id即可。用法如下:
<chain name="chain1">
THEN(
a,
SWITCH(b).to(
c,
THEN(d, e).id("t1")
),
f
);
</chain>
图示
如果你想选择THEN
这个表达式,那么你可以在选择节点里返回t1:
@LiteflowComponent("b")
public class BCmp extends NodeSwitchComponent {
@Override
public String processSwitch() throws Exception {
//do your biz
return "t1";
}
}
# 选择编排中的tag语法
事实上,除了给表达式赋值id
属性之外,你还可以给表达式赋值tag
属性。用法如下:
<chain name="chain1">
THEN(
a,
SWITCH(b).to(
c,
THEN(d, e).tag("t1")
),
f
);
</chain>
如果你想选择THEN
这个表达式,那么你可以在选择节点里返回:
@LiteflowComponent("b")
public class BCmp extends NodeSwitchComponent {
@Override
public String processSwitch() throws Exception {
return "tag:t1";
//以下这种也是可以的
return ":t1";
}
}
选择组件还有其他返回形式,详情请见选择组件这一章。
帮助我们改善此文档 (opens new window)
上次更新: 2023/08/04, 17:02:03