✂️选择组件
在实际业务中,往往要通过动态的业务逻辑判断到底接下去该执行哪一个节点,这就引申出了选择节点,选择节点可以用于SWITCH
关键字中。
关于SWITCH表达式的用法,可以参考选择编排一章。
选择节点a需要继承NodeSwitchComponent
。
需要实现方法processSwitch
方法。
# 根据nodeId进行选择
比如如下表达式:
<chain name="chain1">
SWITCH(a).to(b, c);
</chain>
这个方法需要返回String
类型,就是具体的结果,以下代码示例了选择到了c节点。
@LiteflowComponent("a")
public class ACmp extends NodeSwitchComponent {
@Override
public String processSwitch() throws Exception {
System.out.println("Acomp executed!");
return "c";
}
}
# 根据表达式的id进行选择
如下表达式:
<chain name="chain1">
SWITCH(a).to(b, WHEN(c,d).id("w1"));
</chain>
如果我要a组件要选择到后面那个表达式,那么必须在后面那个表达式后面添加id
表达式,赋值一个名称。然后你的a组件就直接返回w1就可以了。
@LiteflowComponent("a")
public class ACmp extends NodeSwitchComponent {
@Override
public String processSwitch() throws Exception {
System.out.println("Acomp executed!");
return "w1";
}
}
# 根据tag进行选择
关于tag(标签)的概念,请参照组件标签这一章。
如下表达式:
<chain name="chain1">
SWITCH(a).to(
b.tag("cat"),
c.tag("dog")
);
</chain>
LiteFlow从v2.9.0开始支持对tag的选择,如果你想选择c组件,a组件可以返回c,也可以返回tag:dog
。
@LiteflowComponent("a")
public class ACmp extends NodeSwitchComponent {
@Override
public String processSwitch() throws Exception {
System.out.println("Acomp executed!");
return "tag:dog";
}
}
以上是最简单的用法,还有如下用法:
<chain name="chain4">
THEN(
a,
SWITCH(g).to(b.tag("td"), d.tag("td"))
);
</chain>
利用简单的表示可以快速选择你想要的
public class GSwitchCmp extends NodeSwitchComponent {
@Override
public String processSwitch() throws Exception {
return ":td" // 进入 b 节点,含义:选择第一个标签为td的节点
return "tag:td" // 进入 b 节点,含义:选择第一个标签为td的节点
return "b"; // 进入 b 节点,含义:选择targetId是b的节点
return "b:"; // 进入 b 节点,含义:选择第一个targetId是b的节点
return "b:td"; // 进入 b 节点,含义:选择targetId是b且标签是td的节点
return ":"; // 进入 b 节点,含义:选择第一个节点
return "d"; // 进入 d 节点,含义:选择targetId是d的节点
return "d:"; // 进入 d 节点,含义:选择第一个targetId是d的节点
return "d:td"; // 进入 d 节点,含义:选择targetId是d且标签是td的节点
return "b:x"; // 报错,原因:没有targetId是b且标签是x的节点
return "x"; // 报错,原因:没有targetId是x的节点
return "::"; // 报错,原因:没有找到标签是":"的节点
}
}
选择节点的内部可以覆盖的方法和this关键字可调用的方法见普通组件这一章。
# 表达式tag的选择
LiteFlow从v2.10.2开始,支持了表达式的tag选择,比如:
<chain name="chain1">
SWITCH(a).to(b, WHEN(c,d).tag("w1"));
</chain>
a中返回tag:w1
或者:w1
就能选择到后面的表达式。
# 链路tag的选择
LiteFlow从v2.10.3开始,支持了链路tag的选择,比如:
<chain name="chain1">
SWITCH(a).to(b, sub.tag("w1"));
</chain>
<chain name="sub">
THEN(c,d);
</chain>
事实上,a无论返回sub
还是tag:w1
都能选择到后面的链路。
帮助我们改善此文档 (opens new window)
上次更新: 2024/04/09, 18:39:17