在acticiti中,一个任务节点task存在两条出线,一条出线的流程变量为a,另一个流程变量的出线为b,b出线连接排他网关c,排他网关c有两条出线连接两个任务节点d和e,连接任务节点d的出线流程变量值为1,连接任务节点e的流程变量为2,如何从task任务节点到达任务节点e,代码表示一下
时间: 2024-02-27 16:59:17 浏览: 58
EDA/PLD中的LabVIEW的公式节点变量
在 Activiti 中,可以使用 Java 代码或者 BPMN 文件来实现这个流程。这里提供两种方法实现从 task 任务节点到达任务节点 e。
方法一:使用 Java 代码实现
可以在任务节点 task 的执行监听器中设置流程变量 a 的值为 2,然后在任务节点 task 的出线上设置条件表达式为 ${a == 2},以确保选择正确的出线进入排他网关 c。代码示例:
```java
// 在任务节点 task 的执行监听器中设置流程变量 a 的值为 2
execution.setVariable("a", 2);
```
```xml
<!-- 任务节点 task 的出线设置条件表达式 ${a == 2} -->
<sequenceFlow id="flow1" sourceRef="task" targetRef="c">
<conditionExpression xsi:type="tFormalExpression">${a == 2}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow2" sourceRef="task" targetRef="c" />
```
在排他网关 c 中,设置连接任务节点 e 的出线的条件表达式为 ${a == 2},代码示例:
```xml
<!-- 排他网关 c 的出线连接任务节点 e,并设置条件表达式 ${a == 2} -->
<exclusiveGateway id="c" name="Gateway C" default="flow3">
<incoming>flow1</incoming>
<incoming>flow2</incoming>
<outgoing>flow3</outgoing>
<outgoing>flow4</outgoing>
<conditionExpression xsi:type="tFormalExpression">${a == 2}</conditionExpression>
</exclusiveGateway>
```
最后,将排他网关 c 的出线分别连接到任务节点 d 和任务节点 e,代码示例:
```xml
<!-- 排他网关 c 的出线分别连接到任务节点 d 和任务节点 e -->
<sequenceFlow id="flow3" sourceRef="c" targetRef="d">
<conditionExpression xsi:type="tFormalExpression">${a == 1}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow4" sourceRef="c" targetRef="e">
<conditionExpression xsi:type="tFormalExpression">${a == 2}</conditionExpression>
</sequenceFlow>
```
方法二:使用 BPMN 文件实现
可以在 BPMN 文件中设置任务节点 task 的出线条件表达式和排他网关 c 的条件表达式,以及连接任务节点 d 和任务节点 e 的出线。代码示例:
```xml
<process id="myProcess" name="My Process">
<startEvent id="start" name="Start Event" />
<task id="task" name="Task">
<outgoing>flow1</outgoing>
<outgoing>flow2</outgoing>
<extensionElements>
<activiti:executionListener event="start">
<activiti:field name="a" stringValue="2" />
</activiti:executionListener>
</extensionElements>
</task>
<exclusiveGateway id="c" name="Gateway C">
<incoming>flow1</incoming>
<incoming>flow2</incoming>
<outgoing>flow3</outgoing>
<outgoing>flow4</outgoing>
<conditionExpression xsi:type="tFormalExpression">${a == 2}</conditionExpression>
</exclusiveGateway>
<task id="d" name="Task D">
<incoming>flow3</incoming>
</task>
<task id="e" name="Task E">
<incoming>flow4</incoming>
</task>
<sequenceFlow id="flow1" sourceRef="task" targetRef="c">
<conditionExpression xsi:type="tFormalExpression">${a == 2}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow2" sourceRef="task" targetRef="c" />
<sequenceFlow id="flow3" sourceRef="c" targetRef="d">
<conditionExpression xsi:type="tFormalExpression">${a == 1}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow4" sourceRef="c" targetRef="e">
<conditionExpression xsi:type="tFormalExpression">${a == 2}</conditionExpression>
</sequenceFlow>
<endEvent id="end" name="End Event">
<incoming>flow5</incoming>
<extensionElements>
<activiti:executionListener event="end">
<activiti:expression><![CDATA[logger.info("Process Completed!");]]></activiti:expression>
</activiti:executionListener>
</extensionElements>
</endEvent>
<sequenceFlow id="flow5" sourceRef="d" targetRef="end" />
<sequenceFlow id="flow6" sourceRef="e" targetRef="end" />
</process>
```
阅读全文