LiteFlow LiteFlow
💒首页
  • v2.13.2(当前版本)
  • What's New

    • 🌈What' s New In LiteFlow v2.13.2?
  • 历史版本

    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 🌈2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
👑LF CLUB社区
  • 常见问题
  • 专题解释

    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念,在框架中起到什么样的作用?
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
👥加入群聊
🧤谁在使用
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)

广告采用随机轮播方式显示 ❤️成为赞助商
💒首页
  • v2.13.2(当前版本)
  • What's New

    • 🌈What' s New In LiteFlow v2.13.2?
  • 历史版本

    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 🌈2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
👑LF CLUB社区
  • 常见问题
  • 专题解释

    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念,在框架中起到什么样的作用?
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
👥加入群聊
🧤谁在使用
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)
  • 🍤LiteFlow简介
  • 🍓项目特性
  • 🧁环境支持

  • 🍟快速开始(Hello world)

  • 🍢配置项

  • 🔗组件

    • 🛍继承式组件

      • 📎普通组件
      • ✂️选择组件
        • 根据nodeId进行选择
        • 根据表达式的id进行选择
        • 根据tag进行选择
        • 表达式tag的选择
        • 链路tag的选择
      • ⛓布尔组件
      • 🧬次数循环组件
      • ⌛️迭代循环组件
      • 🏄LiteflowComponent
      • 🛀组件内方法覆盖和调用
    • 🎁声明式组件

  • 🧩EL规则

  • 🌮上下文

  • 🛩执行器

  • 🍋脚本组件

  • 🗂规则配置源

  • 🍼元数据管理

  • 🌌异步中的线程池

  • 🎲动态构造

  • 🧮决策路由

  • 😸生命周期

  • 🎨高级特性

  • ⛱测试用例以及示例

  • 🪂性能表现
  • v2.13.X文档
  • 🔗组件
  • 🛍继承式组件
铂赛东
2022-06-29
目录

✂️选择组件

在实际业务中,往往要通过动态的业务逻辑判断到底接下去该执行哪一个节点,这就引申出了选择节点,选择节点可以用于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进行选择v2.9.0+

关于tag(标签)的概念,请参照tag语法这一章。

如下表达式:

<chain name="chain1">
    SWITCH(a).to(
        b.tag("cat"),
        c.tag("dog")
    );
</chain>

LiteFlow支持对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的选择v2.10.2+

LiteFlow支持了表达式的tag选择,比如:

<chain name="chain1">
    SWITCH(a).to(b, WHEN(c,d).tag("w1"));
</chain>

a中返回tag:w1或者:w1就能选择到后面的表达式。

# 链路tag的选择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)
上次更新: 2025/02/22, 13:47:36
📎普通组件
⛓布尔组件

← 📎普通组件 ⛓布尔组件→

Theme by Vdoing | Copyright © 2020-2025 铂赛东 | MIT License
沪ICP备18012955号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式