Flowable节点跳转
關鍵詞:Flowable任務節點跳轉,Flowable節點跳轉,Flowable任意節點跳轉。
在使用Flowable或者Activiti的時候,有時候我們并不期望他按照模板的定義進行運轉,比如如下的一個流程圖:
正常的流程應該是shareniu1-->shareniu2-->shareniu3-->shareniu4。
如果現在打算讓shareniu1跳轉到shareniu3,這個時候就需要繪制一根連線,并在連線中配置一些條件。其他的節點場景相似,但是實際項目開發,可能我們不想繪制太多的連線,就期望流程實例可以隨便的跳轉,這個問題也是我們本文重點要講解。
1.將上述的流程進行部署。
數據庫的變化如下所示:
2.啟動流程實例:
@Test
public void start1() {
runtimeService.startProcessInstanceByKey("jump");
}
act_ru_task表的數據如下:
這個時候,我們打算讓shareniu1直接跳轉到shareniu3,能跳轉過去嗎?我們不妨寫一個命令類試一下。
3.任意節點跳轉實現代碼:
/*** * @author 分享牛 http://www.shareniu.com/*/ public class ShareniuCommonJumpTaskCmd implements Command<Void> {protected String taskId;protected String target;public ShareniuCommonJumpTaskCmd(String taskId, String target) {this.taskId = taskId;this.target = target;}public Void execute(CommandContext commandContext) {ExecutionEntityManager executionEntityManager = CommandContextUtil.getExecutionEntityManager();TaskEntityManager taskEntityManager = CommandContextUtil.getTaskEntityManager();TaskEntity taskEntity = taskEntityManager.findById(taskId);ExecutionEntity ee = executionEntityManager.findById(taskEntity.getExecutionId());Process process = ProcessDefinitionUtil.getProcess(ee.getProcessDefinitionId());FlowElement targetFlowElement = process.getFlowElement(target);ee.setCurrentFlowElement(targetFlowElement);FlowableEngineAgenda agenda = CommandContextUtil.getAgenda();agenda.planContinueProcessInCompensation(ee);taskEntityManager.delete(taskId);return null;}}?
4.測試代碼:
接下來,開始測試,實例代碼如下:
@Test public void jump() {ManagementService managementService = processEngine.getManagementService();managementService.executeCommand(new ShareniuCommonJumpTaskCmd("2505","shareniu3")); }act_ru_task表的數據如下:
?
通過這里可以看出,我們的命令類已經生效了。那我們再次執行下上述代碼讓?shareniu3跳轉到shareniu2試下,實例代碼如下:
@Test public void jump() {ManagementService managementService = processEngine.getManagementService();managementService.executeCommand(new ShareniuCommonJumpTaskCmd("5002","shareniu2")); }act_ru_task表的數據如下:
上述的命令類確實很好用的。
5.上述跳轉命令類的缺陷:
1.上述的命令類只適用于6.x版本的引擎。包括模板以及實例都是6.x版本。
2.只適用于常規節點的跳轉。(關于分支節點的跳轉、多實例節點的跳轉以及并行節點的跳轉后續文章會詳細說明)。
3.上述的代碼適用于flowable6.1.2以后的版本。關于flowable6.1.2之前的版本思路一樣,只是代碼要稍微微調一下,部分代碼如下所示:
ExecutionEntityManager executionEntityManager = commandContext.getExecutionEntityManager();
TaskEntityManager taskEntityManager = commandContext.getTaskEntityManager();
注意:flowable6.1.2只是對代碼所在的包進行了調整,核心思想并沒有變化。
總結
以上是生活随笔為你收集整理的Flowable节点跳转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot源码分析之环境属性构
- 下一篇: Feign使用Hystrix无效原因及解