Flowable 如何设置线自动跳过

本文介绍如何在Flowable工作流中通过设置启动变量和条件表达式来实现流程节点的自动跳过功能。具体包括设置启动变量使特定流程片段跳过,以及使用条件表达式控制流程走向的方法。
### 实现 Flowable 办结功能,自动跳过中间节点并直接到达流程结束节点的配置方法 在 Flowable 中实现办结功能的核心在于通过编程方式强制推进流程实例的状态,并确保其直接跳转到结束节点。以下是实现这一功能的详细说明和代码示例。 #### 1. 强制推进流程实例至结束节点 可以通过调用 `runtimeService.signalEventReceived` 或自定义命令(Command)来实现流程的快速结束。以下是一个基于自定义命令的实现方法[^4]。 ```java public class FinishProcessCmd implements Command<Void> { private final String processInstanceId; public FinishProcessCmd(String processInstanceId) { this.processInstanceId = processInstanceId; } @Override public Void execute(CommandContext commandContext) { // 获取当前流程实例的执行对象 ExecutionEntityManager executionEntityManager = commandContext.getExecutionEntityManager(); ExecutionEntity execution = (ExecutionEntity) executionEntityManager.findById(processInstanceId); if (execution != null) { // 强制将流程推进到结束节点 execution.setActivityId(null); execution.inactivate(); execution.setEnded(true); execution.deleteCascade("流程已办结"); } return null; } } ``` 上述代码中,通过 `ExecutionEntity` 的操作,可以强制将流程实例标记为结束状态,并删除相关数据以模拟流程正常结束的行为。 #### 2. 自动跳过中间节点 为了确保中间节点被忽略,可以在流程定义中添加一个特殊的网关或事件监听器,用于检测是否需要直接跳转到结束节点。例如,使用边界事件结合条件表达式实现跳转逻辑[^1]。 ```xml <boundaryEvent id="boundaryTerminate" attachedToRef="userTask1" cancelActivity="true"> <terminateEventDefinition /> </boundaryEvent> ``` 上述 XML 片段定义了一个与用户任务关联的边界终止事件。当触发该事件时,流程会立即终止并跳过后续节点。 #### 3. 数据清理与历史记录 在流程结束时,可能需要清理临时数据或将结果归档。这可以通过监听器实现。以下是一个监听器示例,用于在流程结束时执行额外操作[^3]。 ```java public class ProcessEndListener implements ExecutionListener { @Override public void notify(DelegateExecution execution) throws Exception { // 执行清理或归档逻辑 System.out.println("流程已结束,执行清理操作..."); } } ``` 将上述监听器绑定到结束事件中: ```xml <endEvent id="endEvent" name="流程结束"> <extensionElements> <flowable:executionListener event="end" class="com.example.ProcessEndListener" /> </extensionElements> </endEvent> ``` #### 4. 流程图设计 以下是包含办结功能的流程图设计示例: ```mermaid graph TD A[开始事件] --> B[用户任务] B --> C{是否需要办结?} C --是--> D[终止事件] C --否--> E[用户任务2] E --> F[结束事件] ``` - **开始事件**:流程从这里启动。 - **用户任务**:代表需要人工处理的任务。 - **网关(是否需要办结?)**:判断是否需要直接结束流程。如果需要,则进入终止事件;否则继续后续任务。 - **终止事件**:表示流程被强制终止。 - **结束事件**:表示流程正常结束。 #### 5. 单元测试代码 以下是一个单元测试示例,用于验证办结功能是否正常工作。 ```java @Test public void testFinishProcess() { FinishProcessCmd finishProcessCmd = new FinishProcessCmd("c9c2d598-c0f9-11ea-8147-00ff1bb9adc3"); processEngine.getProcessEngineConfiguration().getCommandExecutor().execute(finishProcessCmd); // 验证流程是否已结束 HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId("c9c2d598-c0f9-11ea-8147-00ff1bb9adc3") .singleResult(); assertNotNull(historicProcessInstance); assertTrue(historicProcessInstance.isEnded()); } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生05101

flowable

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值