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/
标签:
Camunda
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2011-10-12 我的第一个Python程序--批量生成Oracle DDL文件