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

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

相关文章
|
7月前
|
JSON 前端开发 数据可视化
AMIS【部署 01】amis前端低代码框架可视化编辑器amis-editor本地部署流程
AMIS【部署 01】amis前端低代码框架可视化编辑器amis-editor本地部署流程
1014 0
|
监控 Java Linux
开源流程引擎Camunda
开源流程引擎Camunda
|
2月前
|
JSON 自然语言处理 数据格式
Tauri 开发实践 — Tauri 自定义多语言菜单开发
本文介绍了如何在 Tauri 应用中实现自定义菜单并支持多语言。首先,通过 `Translator` 类加载和解析多语言 JSON 文件,实现简单的翻译功能。接着,创建包含文件、编辑和窗口子菜单的基本菜单结构,并根据当前语言进行翻译。最后,在主函数中读取语言设置,创建菜单并处理菜单事件,确保应用的国际化和用户体验。源码可在 GitHub 上查看。
90 2
|
7月前
|
SQL 移动开发 前端开发
基于Jeecg-boot前后端分离的flowable流程管理平台主页调整
基于Jeecg-boot前后端分离的flowable流程管理平台主页调整
46 0
|
4月前
|
JSON Java Maven
Native扩展开发的一般流程(类似开发一个插件)
这篇文章介绍了Java服务开发的大致流程,包括编写Java服务类、打包成jar包、在配置文件中进行服务配置、在代码中调用服务以及如何检查服务调用是否成功,提供了详细的步骤和说明,帮助开发者理解服务从开发到部署的全过程。
Native扩展开发的一般流程(类似开发一个插件)
|
7月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的企业文档管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的企业文档管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
7月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的在线作业管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的在线作业管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
6月前
|
缓存 前端开发 算法
ProFlow 流程编辑器框架 1.0 发布
ProFlow 流程编辑器框架 1.0 发布
356 0
|
7月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的游戏资源管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的游戏资源管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
7月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的学生作业管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的学生作业管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
下一篇
无影云桌面