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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Flowable 流程实例

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flowable 流程实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

流程實例系列

RuntimeService 運行服務類

核心功能 啟動實例、查詢與實例相關的一些信息

是Flowable的流程執行服務類。可以從這個類中獲取很多關于流程執行相關的信息。

實現類為RuntimeServiceImpl

提供了一系列根據自身業務場景啟動流程實例的API

流程定義、執行實例、流程實例概念

  • 流程定義類 可以從這里獲得資源文件。類似于java類

  • 流程實例 代表流程定義的執行實例,比如張三請了一天假,他就必須發出一個流程實例的申請

  • 一個流程實例包括了所有的運行節點。 我們可以用這個對象來了解當前流程實例的進度信息等

  • 流程實例就表示一個流程從開始到結束的最大流程分支,即一個流程中流程實例只有一個。

  • 流程實例通常也可以叫做執行實例的根節點

  • 執行實例.

  • public interface ProcessInstance extends Execution

  • 從源代碼中可以看出 ProcessInstance就是Execution

  • 啟動流程的時候會首先創建流程實例,然后創鍵執行實例

  • 流程運轉的過程中永遠執行的是自己對應的執行實例

  • 當所有的執行實例按照規則執行完畢之后,這實例隨之結束

  • flowable用這個對象去描述流程執行的每一個節點

  • 流程按照流程定義的規則執行一次的過程,就可以表示執行對象Execution

  • 一個流程中,執行對象可以存在多個,但是流程實例只能有一個

  • 執行實例的父級或者父級的父級為流程實例

  • 執行實例可能會暫停到某一個活動節點,需要我們去通過特定的API去完成,然后執行實例繼續往下走

  • 流程實例啟動

    使用RuntimeService啟動流程實例

    操作的是act_ru_execution表,如果是用戶任務節點,同時也會在act_ru_task添加一條記錄

    /*** 部署流程*/ @Test public void deploy() {DeploymentBuilder deploymentBuilder = repositoryService.createDeployment().category("leave").name("請假流程").addClasspathResource("leave.bpmn");//流程部署Deployment deploy = deploymentBuilder.deploy();System.out.println(deploy.getId()); }/*** 啟動流程實例 根據key*/ @Test public void startProcessInstanceByKey() {String processDefinitionKey = "leave";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);System.out.println(processInstance.getId()+","+processInstance.getActivityId()); }

    查詢個人任務 TaskService(act_ru_task)

    /*** 查詢個人任務*/@Test public void createTaskQuery() {String assignee = "張三";String processDefinitionKey = "leave";List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).processDefinitionKey(processDefinitionKey).list();list.forEach(v -> System.out.println(v.getId() + " "+ v.getName() + " " + v.getTaskDefinitionKey()+ " " + v.getExecutionId() + " " + v.getProcessInstanceId() + " " + v.getCreateTime())); }
  • 從processEngine中應該得到TaskService

  • 使用TaskService獲取到任務查詢對象TaskQuery

  • 為查詢對象添加過濾條件,使用taskAssignee指定任務的辦理者(即查詢指定用戶的待辦任務),同時可以添加分頁排序等過濾條件

  • 調用list方法進行查詢

  • 任務id、名稱、辦理人、創建時間可以從act_ru_task表中查到

    完成個人任務

    /*** 完成個人任務*/@Test public void completeTask() {String taskId = "20006";taskService.complete(taskId); }

    對于執行完的任務,Flowable將從act_ru_task表中刪除該任務,下一個任務會被插入進來(這兩個操作是在一個事物中)

    查詢流程狀態

    /*** 查詢流程實例狀態 判斷流程正在執行還是結束*/@Test public void createProcessInstanceQuery() {String processInstanceId = "30001";ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();if (processInstance != null) {System.out.println("當前流程實例正在運行");} else {System.out.println("當前流程實例正在運行");} }/*** 查詢執行實例狀態 判斷流程正在執行還是結束*/@Testpublic void createExecutionQuery() {List<Execution> list = runtimeService.createExecutionQuery().list();list.forEach(v-> System.out.println(v.getId()+","+v.getActivityId()));}

    歷史流程實例查詢historyService(act_hi_procinst)

    HistoryService 用于查詢act_hi 開頭的表

  • /*** 查詢歷史流程實例*/@Test public void createHistoricProcessInstanceQuery() {String processInstanceId = "20001";HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();System.out.println("流程實例id"+historicProcessInstance.getId());System.out.println("流程定義id"+historicProcessInstance.getProcessDefinitionId());System.out.println("開始時間"+historicProcessInstance.getStartTime());System.out.println("結束時間"+historicProcessInstance.getEndTime()); }

    歷史活動信息查詢 (act_hi_actinst)

    歷史活動表 act_hi_actinst 活動節點的數據都會存儲在這個表中

    /*** 查詢歷史活動節點* select RES.** FROM ACT_HI_ACTINST RES order by RES.ID_ asc;*/@Test public void createHistoricActivityInstanceQuery() {List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().list();list.forEach(v -> System.out.println(v.getId())); }

    歷史任務查詢(act_hi_taskinst)

    /*** 查詢歷史任務* select distinct RES.** FROM ACT_HI_TASKINST RES order by RES.ID_ asc;*/@Test public void createHistoricTaskInstanceQuery() {List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().list();list.forEach(v -> System.out.println(v.getId())); }

    act_hi_taskinst表中的end_time有值,說明任務完成了。為空則任務還在運行,沒有結束

    act_hi_taskinst表之后存儲任務節點的數據,其他節點的數據不會存儲在這個表中

    流程實例涉及到的5張表

    act_ru_execution:正在執行的信息

    act_hi_procinst:已經執行完的歷史流程實例信息

    act_hi_actinst:存放歷史所有完成的活動

    act_ru_task: 正在執行的任務信息

    act_hi_taskinst:已經執行完的歷史任務信息

    流程發起人設置

    ?

    /*** 設置流程實例的啟動人*/ @Test public void setAuthenticatedUserId() {String authenticatedUserId = "tyy";identityService.setAuthenticatedUserId(authenticatedUserId);String processDefinitionKey = "leave";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);System.out.println(processInstance.getId() + "," + processInstance.getActivityId()); } /*** 設置流程實例的啟動人*/ @Test public void setAuthenticatedUserId2() {String authenticatedUserId = "tyy2";Authentication.setAuthenticatedUserId(authenticatedUserId);String processDefinitionKey = "leave";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);System.out.println(processInstance.getId() + "," + processInstance.getActivityId()); }

    開始節點 initator 跟啟東人配合才有意義,否則沒有意義

    dataObject使用 (act_ru_variable)

    flowable允許開發人員在流程文檔中為流程或者子流程定義dataObject元素,該元素可以指定變量的id,名稱,數據類型等,支持的數據類型有string、boolean、datetime、double、int、long等。流程實例啟動時會將dataObject元素的信息自動轉換為流程實例變量的存在,變量名稱對應dataobject元素中定義的“name”值

    /*** 獲取dataObject* select ** FROM ACT_RU_VARIABLE* WHERE EXECUTION_ID_ = '40001' and NAME_= '天數' and TASK_ID_ is null;*/ @Test public void getDataObject() {String executionId = "40001";String dataObject = "天數";DataObject dataObject1 = runtimeService.getDataObject(executionId, dataObject);if (dataObject1 != null) {System.out.println(dataObject1.getDataObjectDefinitionKey());System.out.println(dataObject1.getDescription());System.out.println(dataObject1.getExecutionId());System.out.println(dataObject1.getName());System.out.println(dataObject1.getValue());System.out.println(dataObject1.getType());}}/*** select ** FROM ACT_RU_VARIABLE* WHERE EXECUTION_ID_ = '40001' and TASK_ID_ is null;*/ @Test public void getDataObject2() {String executionId = "40001";Map<String, DataObject> dataObjects = runtimeService.getDataObjects(executionId);dataObjects.forEach((s, dataObject) -> {System.out.println(dataObject.getDataObjectDefinitionKey());System.out.println(dataObject.getDescription());System.out.println(dataObject.getExecutionId());System.out.println(dataObject.getName());System.out.println(dataObject.getValue());System.out.println(dataObject.getType());}); }

    流程實例刪除

    ?

    /*** 流程實例刪除*/ @Test public void deleteProcessInstance() {String processInstanceId = "30001";String deleteReason = "測試刪除";runtimeService.deleteProcessInstance(processInstanceId, deleteReason);}/** *級聯刪除 */package com.webcreate.runtimeservicetest;import org.flowable.common.engine.impl.AbstractEngineConfiguration; import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.ProcessEngineConfiguration; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;public class DeleteProcessInstanceIdCaCadeCmd implements Command<Void> {String processInstanceId = "";String deleteReason = "";public DeleteProcessInstanceIdCaCadeCmd(String processInstanceId, String deleteReason) {this.processInstanceId = processInstanceId;this.deleteReason = deleteReason;}@Overridepublic Void execute(CommandContext commandContext) {AbstractEngineConfiguration currentEngineConfiguration = commandContext.getCurrentEngineConfiguration();if (currentEngineConfiguration != null) {ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) currentEngineConfiguration;processEngineConfiguration.getExecutionEntityManager().deleteProcessInstance(processInstanceId, deleteReason, true);}return null;} }/*** 流程實例刪除 級聯刪除*/@Testpublic void deleteProcessInstance2() {String processInstanceId = "32501";String deleteReason = "測試刪除";managementService.executeCommand(new DeleteProcessInstanceIdCaCadeCmd(processInstanceId, deleteReason));}

    流程實例獲取運行的活動節點

    /*** ### 流程實例獲取運行的活動節點*/ @Test public void getActiveActivityIds() {String executionId = "35004";List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId);activeActivityIds.forEach(v -> System.out.println(v)); }

    流程實例啟動

    /*** ### 根據流程定義ID啟動流程*/ @Test public void startProcessInstanceById() {String processDefinitionId="dataobject:1:37504";runtimeService.startProcessInstanceById(processDefinitionId); } /*** 啟動流程實例 根據key*/ @Test public void startProcessInstanceByKey() {String processDefinitionKey = "leave";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);System.out.println(processInstance.getId()+","+processInstance.getActivityId()); }

    流程實例的掛起與激活

    /*** 判斷流程定義是否被掛起*/ @Test public void isProcessDefinitionSuspended() {String processDefinitionId = "leave:1:45004";boolean processDefinitionSuspended = repositoryService.isProcessDefinitionSuspended(processDefinitionId);System.out.println(processDefinitionSuspended); }/*** 流程定義掛起* SUSPENSION_STATE_ = 2 表示被掛起* SUSPENSION_STATE_ = 1 沒有被掛起*/ @Test public void suspendProcessDefinitionById() {String processDefinitionId = "leave:1:45004";repositoryService.suspendProcessDefinitionById(processDefinitionId); }/*** 流程定義激活*/ @Test public void activateProcessDefinitionById() {String processDefinitionId = "leave:1:45004";repositoryService.activateProcessDefinitionById(processDefinitionId); }/*** 流程定義掛起 同時掛起流程實例*/ @Test public void activateProcessDefinitionById2() {String processDefinitionId = "leave:1:45004";repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null); }

    通過runtimeService掛起流程實例

    總結

    以上是生活随笔為你收集整理的Flowable 流程实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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