以下所有接口均为单租户情况下,多租户可查看专栏中的系列文章。

1、部署BPMN文件

camunda将后缀为 .bpmn20.xml.bpmn 的文件视为bpmn文件。

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

2、启动流程实例

两种方式,每种方式又提供了不同的重载方法,可以应对各种情况。有不懂的看看专栏文章或者评论区提问。

2.1指定版本

这种方式是使用给定流程定义id在流程定义的精确指定版本中启动一个新流程实例。

ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId);
//这里传入businessKey是方便后续可以只查某一类业务的待办
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId,businessKey);
//传入一些参数
Map<String, Object> map = new HashMap<>(2);
map.put("initiator", processInitiator);
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId,businessKey,variables);String processInstanceId = processInstance.getProcessInstanceId();

2.2最新版本

这种方式是在对应流程定义的对新版本中启动一个流程实例。

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionId);
//这里传入businessKey是方便后续可以只查某一类业务的待办
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionId,businessKey);
//传入一些参数
Map<String, Object> map = new HashMap<>(2);
map.put("initiator", processInitiator);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionId,businessKey,variables);
String processInstanceId = processInstance.getProcessInstanceId();

上述的传参在整个流程实例运行过程中都是可以获取到的,我们暂且称之为 全局参数。

3、查询待办

根据不同的业务指定人员来查询待办任务,比如:需要查询在合同签订业务中我的待办任务

List<Task> taskList = taskService.createTaskQuery().processInstanceBusinessKey(businessKey).taskAssignee(assignee).list();
//processInstanceBusinessKeyIn()  也就是多个业务key

注意:这里因为Camunda版本的问题,有的版本是不能直接返回得到的list,需要自己写个类转一下

4、完成待办

这个很简单,从上述查询结果中拿到taskId,直接调方法就可以了。

taskService.complete(taskId);

5、查询已办

这里需要根据不同的需求来处理,比如或签节点有A,B,C三个审批人,A审批同意后,该节点通过,那么A对应的任务它的DELETE_REASON是completed,而B、C的就是deleted。

严格意义上说B、C其实没有处理自己的待办任务,所以查询已办时应该排除。

List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery().processInstanceBusinessKey(businessKey).taskAssignee(assignee).finished().taskDeleteReason("completed").list();

6、转办

A把自己的待办任务转给B,这里除了传入taskId,还需要传入B的id。这里建议使用第二种,第一种按照官网的意思被委托人必须使用resolveTask(String)向任务所有者报告,这里存在一些权限的问题,当然我在使用过程中没加那些权限,所以可以正常使用。

taskService.delegateTask(taskId, userId);
//或
taskService.setAssignee("1600669540055736416","10087");

比如把这个任务转办给用户10086

7、流程实例运行状态

ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
//判断processInstance是否为null  是null就说明流程实例结束了

8、流程实例某节点上待办任务数

List<Task> taskList = taskService.createTaskQuery().processInstanceId("流程实例id").taskDefinitionKey("节点id").list();
//或者
List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).taskDefinitionKey("节点id").unfinished().list();

9、流程实例某节点上所有的审批人

List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).taskDefinitionKey(nodeId).list();
//这里判空一下
Set<String> assigneeSet = taskList.stream().map(HistoricTaskInstance::getAssignee).collect(Collectors.toSet());

10、查询流程定义相关数据

ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId("流程定义id").singleResult();
//或者
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("流程定义key").processDefinitionVersion(版本号).singleResult();.latestVersion()就是最新版本

11、流程实例的挂起与激活

流程实例挂起后,仅可以更改变量、添加属性。完成、转办、修改审批人都是不支持的,重新激活后就可以正常使用了。

//挂起
runtimeService.suspendProcessInstanceById("流程实例id");
//激活
runtimeService.activateProcessInstanceById("流程实例id");

12、重启流程实例

在流程实例终止后,其历史数据仍然存在,并且可以访问这些数据来恢复流程实例,前提是历史级别设置为FULL

runtimeService.restartProcessInstances("流程定义id").startAfterActivity("节点id").processInstanceIds("流程实例id").execute();
//startBeforeActivity(String activityId)
//startAfterActivity(String activityId)
//startTransition(String transitionId)

13、修改流程实例

虽然流程定义中已经定义了流程要按某种顺序执行,但有时需要灵活地再次启动活动或取消正在运行的活动。

//获取当前运行的环节实例
ActivityInstance activity = runtimeService.getActivityInstance("流程实例id");
runtimeService.createProcessInstanceModification("流程实例id").startBeforeActivity("节点id")//设置参数  .setVariable("approver", "joe")//取消正在运行的环节实例  .cancelAllForActivity(activity.getId()).execute();//startBeforeActivity(String activityId)
//startBeforeActivity(String activityId, String ancestorActivityInstanceId)
//startAfterActivity(String activityId)
//startAfterActivity(String activityId, String ancestorActivityInstanceId)
//startTransition(String transitionId)
//startTransition(String transition, String ancestorActivityInstanceId)
//cancelActivityInstance(String activityInstanceId)
//cancelTransitionInstance(String transitionInstanceId)
//cancelAllForActivity(String activityId)

【Camunda五】Camunda常用接口整合相关推荐

  1. springBoot整合rabbitmq并测试五种常用模型

    之前我们记录了原生java代码使用rabbitmq的方法,很简单,类似于原生jdbc代码一样,将连接对象抽离出来作为工具类,生产者和消费者通过工具类获取连接对象,进而获取通道对象,再注册交换机或者是队 ...

  2. Camunda教程|Camunda视频

    Camunda教程|Camunda视频 因为Camunda资料是在是太少了,为此分享牛推出了一套Camunda视频 ,方便大家快速入手Camunda. 目录 因为Camunda资料是在是太少了,为此分 ...

  3. HTML5 Canvas像素处理常用接口

    内容概要:本文通过简单的代码实例,以及略猥琐的图片demo,展示了canvas在图像像素数据操作方面的常用接口.至于如何利用这几个接口实现更复杂的效果,则会在后续章节里继续讲述. 一.canvas图片 ...

  4. 【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数

    文章目录 零. Java 常用接口函数 一. 动态规划 二. 链表 三. 哈希表 四. 滑动窗口 五. 字符串 六. DFS.BFS 七. 二分法 八. 二叉树 九. 偏数学.过目不忘 and 原地算 ...

  5. MVC教程第五篇:MVC整合Ajax

    MVC教程第五篇:MVC整合Ajax     摘要 本文将从完成"输入数据验证"这个功能出发,逐渐展开ASP.NET MVC与Ajax结合的方法.首先,本文将使用ASP.NET M ...

  6. 逗比的输入法实现(二):基础概念和常用接口

    为什么叫 Meow?因为这是给猫用的输入法... 目录 (一):基本情况 (二):基础概念和常用接口 (三):整体构架 (四):编辑和候选 (五):界面管理和无界面模式 (六):词库和候选算法 (七) ...

  7. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  8. JDBC—01—JDBC简介;JDBC常用接口与类;

    一. JDBC 简介 1 什么是 JDBC JDBC(Java DataBase Connectivity)java 数据库连接 是 JavaEE 平台下的技术规范 定义了在 Java 语言中连接数据 ...

  9. 盘点springmvc的常用接口

    2019独角兽企业重金招聘Python工程师标准>>> 盘点springmvc的常用接口### springmvc是如今非常流行的web开发框架之一.我个人非常喜欢它约定优于配置的理 ...

最新文章

  1. 从零开始学数据结构和算法(二)线性表的链式存储结构
  2. SparkSQL之操作Mysql
  3. 【FFmpeg】FFmpeg常用基本命令(转载)
  4. 职教云打卡可以补签吗_雁城“网红路”升级改造,部分红叶李已被挖出,以后还可以在此地打卡吗?...
  5. python数组切片赋值_基于numpy中数组元素的切片复制方法
  6. java 变位词,[Java教程]变位词的查找(下)
  7. ServletContextListener 和HttpSessionListener 的自我理解
  8. php 外包 上海,== | php外包与php技术服务商
  9. keyshot pro 10报许可证(*.lic)对该计算机无效解决办法
  10. 【RDMA】IBV_SEND_INLINE和IBV_SEND_SIGNALED的原理|RDMA小消息通信性能优化
  11. 一键搞定身份证复印 多功能应用全面满足工作组需求
  12. 浅谈幼儿园计算机论文,浅谈幼儿园科学教育活动中,计算机的辅助教学
  13. PhotoShop 切片、标尺使用
  14. EF数据迁移命令总结
  15. linux上u盘怎么加密,linux使用luks加密硬盘或u盘
  16. linux命令发请求,Linux命令发送Http的get或post请求(curl和wget两种方法)
  17. 【肺实质分割】基于主动轮廓模型和贝叶斯方法识别实现胸膜旁肺实质分割附matlab代码
  18. 笔记本电脑使用电池时屏幕不停的更改亮度 - 解决方案
  19. java 鱼眼照片的矫正_使用OpenCV校准鱼眼镜头
  20. 深度对比 Python 与 Java 的区别(一)

热门文章

  1. 山西python培训机构
  2. php iphone下载文件,如何使用MIME协议配合表单在iphone手机上下载文件?
  3. 7年7个主管,我是如何在支付宝从P5升P7的?
  4. Form表单实现异步的提交
  5. layui table 表格模板按钮的实例代码
  6. 全栈式中间件助党政、教育、医疗行业开新局、筑新基
  7. 最新emoji表情代码大全_2020父亲节快乐祝福语大全简短 最新温馨的父子节动态表情图片...
  8. Android WIFI扫描时延
  9. 15 Function Object
  10. go kegg_GO 和 KEGG 的区别 | GO KEGG数据库用法 | 基因集功能注释 | 代谢通路富集