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)

  • 🍢配置项

  • 🗂规则文件

  • 🔗常规组件

  • 🧩EL规则的写法

    • 🍄说明
    • 🌴串行编排
    • 🎋并行编排
    • 🌾选择编排
      • 最基本的例子
      • DEFAULT关键字
      • 和THEN,WHEN嵌套起来
      • 选择编排中的id语法
      • 选择编排中的tag语法
    • 🌵条件编排
    • 🌳循环编排
    • 🎃捕获异常表达式
    • 🍄与或非表达式
    • 🍁使用子流程
    • 🍂使用子变量
    • 💐复杂编排例子
    • 🌻关于分号
    • 🌰关于注释
    • 🐚组件名包装
    • 🔆验证规则
  • 🌮数据上下文

  • 🛩执行器

  • 🍋脚本组件

  • 🍇声明式组件

  • 🎲用代码动态构造规则

  • 🎨高级特性

  • ⛱测试用例以及示例

  • 🪂性能表现
  • v2.11.X文档
  • 🧩EL规则的写法
铂赛东
2022-06-29
目录

🌾选择编排

我们在写业务逻辑的时候,通常会碰到选择性问题,即,如果返回结果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)
上次更新: 2024/04/09, 18:39:17
🎋并行编排
🌵条件编排

← 🎋并行编排 🌵条件编排→

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