activiti工作流网关

2023-03-11 08:51:28 来源:网络

activiti工作流网关

Activiti排他网关上的多条件组合判断

activiti multiple conditions on exclusiveGateway

我在项目使用Activiti时,涉及到对多个条件进行判断,根据多个变量进行判断决策走多个分支。比如有两个布尔变量,一共有4种可能性组合,走4个分支。

最开始的时候我的condition是这么写的, ${a = true && b = true} ,在部署流程的时候,提示解析xml出错。从网上查貌似可以写成 ${a = true and b = true} ,具体我没有验证。

不过更好的做法是,对于这种多条件判断的场景,使用级联(多个)排他网关来实现。这样逻辑更清晰些。类似于下图

还有一个做法是在程序里,把这多个变量降到一维,使用一个排他网关实现。

Activiti7的使用(六)

Activiti的网关:

1、ExclusiveGateway:排他网关

排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策。 当流程执行到这个网关,所有分支都会判断条件是否为 true,如果为 true 则执行该分支,注意,排他网关只会选择一个为 true 的分支执行。(即使有两个分支条件都为 true,排他网关也会只选择一条分支去执行;如果所有分支都是false,则会抛出异常;分支必须最少两条,少于两条部署时候会报错。)

2、ParallelGateway:并行网关

并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的:

 fork 分支:并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。

 join 汇聚:所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。

注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。与其他网关的主要区别是,并行网关 不会解析条件 。 即使顺序流中定义了条件,也会被忽略。

3、InclusiveGateway:包含网关

包含网关可以看做是排他网关和并行网关的 结合体 。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。

包含网关的功能是基于进入和外出顺序流的:

 分支:所有外出顺序流的条件都会被解析,结果为 true 的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支。

 汇聚:所有并行分支到达包含网关,会进入等待状态, 直到每个包含流程 token 的进入顺序流的分支都到达。 这是与并行网关的最大不同。换句话说,包含网关只会等待被选中执行了的进入顺序流。 在汇聚之后,流程会穿过包含网关继续执行。

例子:企业体检流程,公司全体员工进行常规项检查、抽血化验,公司管理层除常规检查和抽血化验还能进行增加项检查。员工类型通过流程变量 userType 来表示,如果等于 1 表示普通员工,如果等于 2 表示领导。

免责声明:内容来自网络,若侵犯您的权利,请在一个月内通知我们,会及时删除 @轻流