日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flowable节点跳转

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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节点跳转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。