Camunda常用功能

简介: Camunda常用接口简介

部署流程定义

//这种就是加载项目resources目录下的one.bpmn文件Deploymentdeploy=repositoryService.createDeployment()
                .name(name)
                .addClasspathResource("one.bpmn")
                .deploy();
//这种就可以使用自己拼接的xml字符串Deploymentdeploy=repositoryService.createDeployment()
                .name(definitionName)
                .addString(名称+".bpmn",resource)
                .deploy();

image.gif

开启流程实例

可以通过流程定义ID或者流程定义Key,第二个参数是业务ID,第三个参数是流程变量,都可以不给。

//通过KeyruntimeService.startProcessInstanceByKey(StringprocessDefinitionKey, StringbusinessKey, Map<String, Object>variables)
//通过IDruntimeService.startProcessInstanceById(StringprocessDefinitionId, StringbusinessKey, Map<String, Object>variables)

image.gif

比如我这里设置发起人为第一个节点的审批人

image.pngimage.gif

那么在流程定义的xml里是有这样一个参数的

image.gifimage.png

查询我的待办

List<Task>taskList=taskService.createTaskQuery().taskAssignee(userId).list();

image.gif

查询我的已办

List<HistoricTaskInstance>historicTaskInstances=historyService.createHistoricTaskInstanceQuery().taskAssignee(userId).finished().list();

image.gif

审批通过

上一步查询返回的待办任务中可以获取到taskId

//添加审批人    identityService.setAuthenticatedUserId(assignee);
//添加审批意见,可在Act_Hi_Comment里的message查询到//三个参数分别为待办任务ID,流程实例ID,审批意见taskService.createComment(taskId, processInstanceId, comment);
//任务完成  也就是审批通过taskService.complete(taskId);

image.gif

审批转办

也就是把自己的待办任务转给别人【传任务ID和处理人】

taskService.delegateTask(taskId, assignee);

image.gif

查询流程状态

processInstance不等于null 说明流程还在运行中,反之流程已经结束了。

ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();

image.gif

删除流程定义

//通过流程定义Key删除
 repositoryService.deleteProcessDefinitions().byKey(processDefinitionKey).delete();
//通过流程定义ID删除
 repositoryService.deleteProcessDefinitions().byIds("1111").delete();

image.gif

查询环节状态

对于单实例环节,只需要判断是否有结束时间,有就说明已完成,没有就是运行中

HistoricActivityInstance instance = historyService.createHistoricActivityInstanceQuery().activityId("111").processInstanceId(processInstanceId).singleResult();
                Date endTime = instance1.getEndTime();

image.gif

或者转为HistoricActivityInstanceEntity    判断状态码是否等于4,等于4则是完成

HistoricActivityInstanceEntity activityEntity = (HistoricActivityInstanceEntity) instance;
if(4 == activityEntity.getActivityInstanceState()){
}else{
}

image.gif

对于多实例环节,需要判断多实例主体,所传activityId也需要拼接。

首先我们查询出流程实例中所有的环节实例

List<HistoricActivityInstance> activityInstanceList = historyService.createHistoricActivityInstanceQuery()
                    .processInstanceId(processInstanceId)
                    .orderByHistoricActivityInstanceStartTime()
                    .asc()
                    .list();
 for (HistoricActivityInstance instance : activityInstanceList) {
                HistoricActivityInstanceEntity activityEntity = (HistoricActivityInstanceEntity) instance;
if("multiInstanceBody".equals(activityEntity.getActivityType())){
   //多实例节点
                    int endIndex = activityEntity.getActivityId().indexOf("#");
                    activityId = activityEntity.getActivityId().substring(0,endIndex);
if (4 == activityEntity.getActivityInstanceState()){
                        //已完成
                    }else{
                        //运行中
                    }
}
}

image.gif

发起人撤回

撤回对于流程来说还是同一条流程,由于我这里的发起人节点ID是固定的,所以直接写死了。不同的项目场景中也各有不同,总之思路就是查询当前环节实例,对应取消相关任务,找到目标环节的ID即可实现。【这里运用好还可以实现,审批环节撤回,不过都是单实例环节,不包括会签。以及实现驳回等操作,将会在后续博文中记录实战操作】

//获取当前环节实例
            ActivityInstance activity = runtimeService.getActivityInstance(processInstanceId);
            runtimeService.createProcessInstanceModification(processInstanceId)
                    //关闭相关任务
                    .cancelActivityInstance(activity.getId())
                    .setAnnotation("发起人撤回")
                    //启动目标活动节点
                    .startBeforeActivity("root")
                    .execute();

image.gif

添加审批意见

在通过、驳回等操作前执行

taskService.createComment(taskId, processInstanceId, "审核无误,允许执行");

image.gif

查询历史任务

List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()//历史任务表查询
            .processInstanceId(processInstanceId)//使用流程实例ID查询
            .list();

image.gif

紧接着就可以遍历拿到每一步的审批意见

for(HistoricTaskInstance hti:htiList){//任务ID
            String taskId = hti.getId();//获取批注信息
            List<Comment> taskComments = taskService.getTaskComments(taskId);              
    }

image.gif

更多实战应用请关注后续文章

相关文章
深入探究Camunda监听器
执行监听器与任务监听器
2239 1
深入探究Camunda监听器
深入探究Camunda加签问题
camunda加签的两种方式
3495 0
|
监控 Java Linux
开源流程引擎Camunda
开源流程引擎Camunda
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
976 0
|
数据可视化 JavaScript 前端开发
BPMN 2.0 建模符号图标介绍说明
BPMN 2.0 建模符号图标介绍说明
1616 0
|
前端开发 JavaScript
vue3.0 bpmn-js + TS 简易教程
bpmn.js是一个BPMN2.0渲染工具包和web建模器, 使得画流程图的功能在前端来完成. 这里主要记录本人在开发bpmn中的流程
2081 0
|
开发工具 git
IDEA中Git面板操作介绍 变基、合并、提取、拉取、签出
在IDEA的Git面板中,仓库会分为本地仓库和远程仓库,代码仓库里面放的是各个分支。
4541 2
|
机器学习/深度学习 人工智能 监控
为什么选择工作流引擎?三大主流引擎优缺点剖析
工作流引擎是一种用于自动化、管理和监控业务流程的软件系统,通过预定义规则和流程模型协调任务流转。其核心功能包括流程建模、任务分配、状态跟踪和异常处理,能提升企业流程效率30%-50%,减少80%以上的人为错误。典型应用场景涵盖审批、生产、服务和决策类流程。主流引擎如Activiti、Flowable和Camunda各有特色,Camunda因高性能和完整工具链成为复杂项目的首选。未来趋势包括低代码集成、AI优化及云原生架构。
为什么选择工作流引擎?三大主流引擎优缺点剖析
|
XML JSON 前端开发
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(支持并行网关)
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(支持并行网关)
1205 3
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
1233 4

热门文章

最新文章