camunda_19_api
本文內容轉載,
下面內容轉載自
流程打回到起始節點
//獲取流程起始節點和發起人
String toActId = historicActivityInstanceList.get(0).getActivityId();
String assignee = historicActivityInstanceList.get(0).getAssignee();
//將流程發起人放到變量
Map<String, Object> taskVariable = new HashMap<>();
taskVariable.put("assignee", assignee);
//將流程拉回到起始節點
runtimeService.createProcessInstanceModification(processInstanceId)
//關閉相關任務
.cancelActivityInstance(getInstanceIdForActivity(activityInstance, taskList.get(0).getTaskDefinitionKey()))
.setAnnotation("進行了取回到節點操作")
//啟動目標活動節點
.startBeforeActivity(toActId)
//流程的可變參數賦值
.setVariables(taskVariable)
.execute();
下面內容轉載自
https://github.com/jyong-zhu/sigma/blob/main/docs/camunda-tutorial.md
Camunda Service 簡介
| service | description |
|---|---|
| RepositoryService | 操作靜態數據,管理 process definition 與 deployment |
| RuntimeService | 操作動態數據,如保存流程上下文的變量,查詢 process instance 與 execution |
| TaskService | 操作任務,把任務分配給用戶,完成任務,申請任務 |
| IdentityService | 管理角色或者用戶,camunda 本身不關注用戶是否合規 |
| FormService | 操作 camunda 中自帶的表單,非必需 |
| HistoryService | 提供對 process instance、task 的歷史數據查詢功能 |
| ManagementService | 管理數據庫表的元數據信息,同時提供對 jobs 的相關操作 |
| FilterService | 用于過濾數據 |
| ExternalTaskService | 用于外部任務的相關操作 |
Camunda 查詢示例
-
鏈式查詢
List<Task> tasks = taskService.createTaskQuery() .taskAssignee("kermit") .processVariableValueEquals("orderId", "0815") .orderByDueDate().asc() .list(); -
分頁查詢
List<Task> tasks = taskService.createTaskQuery() .taskAssignee("kermit") .processVariableValueEquals("orderId", "0815") .orderByDueDate().asc() .listPage(20, 50); -
or:僅適用于對 process instance 和 task 操作
// assignee = "John Munda" AND (name = "Approve Invoice" OR priority = 5) // or 和 endOr 之間的關聯關系是 or List<Task> tasks = taskService.createTaskQuery() .taskAssignee("John Munda") .or() .taskName("Approve Invoice") .taskPriority(5) .endOr() .list();or 中關于參數的過濾條件不會被覆蓋,但是對非參數的過濾條件會被覆蓋,如下:
List<Task> tasks = taskService.createTaskQuery() .or() // 以下3個過濾條件不會彼此覆蓋 .processVariableValueEquals("orderId", "0815") .processVariableValueEquals("orderId", "4711") .processVariableValueEquals("orderId", "4712") .endOr() .list(); List<Task> tasks = taskService.createTaskQuery() .or() // 以下2個過濾條件會被覆蓋,這個語句中只會查出 controlling,不會查出 sales .taskCandidateGroup("sales") .taskCandidateGroup("controlling") .endOr() .list(); // 針對以上這種覆蓋的條件,不用 or,可以用 in 來做,如下: taskCandidateGroupIn() tenantIdIn() processDefinitionKeyIn() -
Native Queries:自定義 sql 查詢
List<Task> tasks = taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T WHERE T.NAME_ = #{taskName}") .parameter("taskName", "aOpenTask").list(); long count = taskService.createNativeTaskQuery().sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T1, " + managementService.getTableName(VariableInstanceEntity.class) + " V1 WHERE V1.TASK_ID_ = T1.ID_").count();
Camunda 使用
-
部署流程定義
Deployment deployment = repositoryService.createDeployment().addInputStream(processName + ".bpmn", xmlStream).deploy(); -
發起流程實例
runtimeService.startProcessInstanceByKey(processDef.getProcDefKey(), paramMap); -
中止流程實例
// 首先,camunda 將 runtime 中的一些數據刪除 // 再將 ACT_HI_PROCINST 中的流程實例狀態改為 INTERNALLY_TERMINATED runtimeService.deleteProcessInstance(procInstId, comment); -
查詢任務列表
// 任務的執行人信息均在 cadidateGroup 中,無論是 userId 或者 roleId // identityList 包含查詢人的 userId 和 roleId taskService.createTaskQuery().taskCandidateGroupIn(identityList).list(); -
提交任務
taskService.complete(task.getId(), paramMap); -
查詢流程實例列表
// 進行中的流程實例 historyService.createHistoricProcessInstanceQuery().active().list(); // 已結束的流程實例 historyService.createHistoricProcessInstanceQuery().finished().list(); -
查詢流程實例處于活躍狀態的活動
runtimeService.getActiveActivityIds(processInstance.getId()); -
更新流程實例上下文的變量值
runtimeService.setVariables(processInstance.getId(), paramMap);
參考資料
- Camunda 官網:https://camunda.com/
- Camunda 官方文檔:https://docs.camunda.org/manual/latest/

浙公網安備 33010602011771號