工作流(activiti7)教程-简单的介绍和使用(一)

工作流(activiti7)教程-简单的介绍和使用(二)

工作流(activiti7)-进阶使用(流程实例,个人任务,组任务)(三)

工作流(activiti7)-进阶使用(流程变量,网关,监听器,拦截器)(四)

工作流(activiti7)-进阶使用(子流程CallActivity详细使用)(五)

一,流程实例

每次启动一个流程,就是一个流程实例,他是动态的。。。

比如画了一个流程图,张三来请假,发起一个流程就是一个流程实例,李四来发起又是一个实例。。。如下图:

启动流程实例

流程部署后,也就是流程图画好部署到数据库后。。就可以启动流程实例了。。。代码如下,和之前启动流程一样。。

    @Testpublic void test3() {//开启流程String processDefinitionId = "qjlc:1:4";ProcessInstance pi = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
//        ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(); //多种方式请求System.out.println(pi.getId());}

Businesskey(业务标识)

关联业务的标识,比如请假流程的表单业务id,报销流程表单id,,,如果不满足业务,也可以自己添加字段满足。。。

    @Testpublic void test33(){// 根据流程定义的key启动一个流程实例String businessKey = "hello";ProcessInstance processInstance = pe.getRuntimeService().startProcessInstanceByKey("qjlc", businessKey);}

这样启动后在 act_hi_procinst  中就回插入该值:

挂起、激活流程实例

全部流程实例

 @Testpublic void suspendOrActivateProcessDefinition() {// 挂起激活流程定义--全部流程实例String processDefinitionId = "qjlc";RepositoryService repositoryService = pe.getRepositoryService();// 获得流程定义ProcessDefinition processDefinition = repositoryService .createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();//是否暂停boolean suspend = processDefinition.isSuspended();if(suspend){//如果暂停则激活,这里将流程定义下的所有流程实例全部激活repositoryService.activateProcessDefinitionById(processDefinitionId, true, null);System.out.println("流程定义:"+processDefinitionId+"激活");}else{//如果激活则挂起,这里将流程定义下的所有流程实例全部挂起repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null);System.out.println("流程定义:"+processDefinitionId+"挂起");}}

单个流程实例

 @Test public void suspendOrActiveProcessInstance() { // 流程实例id String processInstanceId = ""; // 获取RunTimeService RuntimeService runtimeService = pe.getRuntimeService(); //根据流程实例id查询流程实例 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); boolean suspend = processInstance.isSuspended(); if(suspend){ //如果暂停则激活 runtimeService.activateProcessInstanceById(processInstanceId); System.out.println("流程实例:"+processInstanceId+"激活"); }else{ //如果激活则挂起 runtimeService.suspendProcessInstanceById(processInstanceId); System.out.println("流程实例:"+processInstanceId+"挂起"); } }

二,个人任务

1.一种是通过在画流程图的时候,配置。。(用的少)。。具体参考上篇博客

2.代码中动态配置,,场景(业务系统选人后传递用户数据,后端动态设置任务的执行人)

 @Testpublic void setAssi() {//设置执行人pe.getTaskService().setAssignee("taskid","userId");}

查询执行人下的任务

 @Testpublic void test4() {//查询指派人下的任务TaskQuery taskQuery = pe.getTaskService().createTaskQuery();String assignee = "张三";  //指定人就是当前人下的任务,不指定人就是所有任务taskQuery.taskAssignee(assignee);taskQuery.orderByTaskCreateTime().desc();List<Task> list = taskQuery.list();for (Task task : list) {String id = task.getId();String name = task.getName();String assignee2 = task.getAssignee();System.out.println(id + "---" + name + "----" + assignee2);}}

三,组任务

在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人,可以从候选人中选择参与者来完成任务。

1,第一种通过流程图设置(很少用) 如下; 可以看到Assignee(个人),CandidateUsers(候选人),CandidateGroup(后选组)

如果设置只需要在流程图中任务节点的配置中设置candidate-users(候选人),多个候选人之间用逗号分开。

具体操作流程:

第一步:查询组任务
指定候选人,查询该候选人当前的待办任务。
候选人不能办理任务。
第二步:拾取(claim)任务
该组任务的所有候选人都能拾取。
将候选人的组任务,变成个人任务。原来候选人就变成了该任务的负责人。
   如果拾取后不想办理该任务?
   需要将已经拾取的个人任务归还到组里边,将个人任务变成了组任务。
第三步:查询个人任务
查询方式同个人任务部分,根据assignee查询用户负责的个人任务。
第四步:办理个人任务

任务拾取代码

 @Test
public void claimTask(){TaskService taskService = pe.getTaskService();//要拾取的任务idString taskId = "15002"; //任务候选人idString userId = "zhangsan";//拾取任务// 即使该用户不是候选人也能拾取(建议拾取时校验是否有资格)// 校验该用户有没有拾取任务的资格Task task = taskService.createTaskQuery().taskId(taskId).taskCandidateUser(userId)//根据候选人查询.singleResult();if(task!=null){taskService.claim(taskId, userId);System.out.println("任务拾取成功");}}

拾取后就可以执行任务了。。如果拾取后发现拾取的任务不是自己的,或者想要取消可以执行以下操作

    @Testpublic void setAssigneeToGroupTask() {// 查询任务使用TaskService taskService = pe.getTaskService();// 当前待办任务String taskId = "15002";// 任务负责人String userId = "zhangsan";// 校验userId是否是taskId的负责人,如果是负责人才可以归还组任务Task task = taskService.createTaskQuery().taskId(taskId).taskAssignee(userId).singleResult();if (task != null) {// 如果设置为null,归还组任务,该 任务没有负责人taskService.setAssignee(taskId, null);}}

代码地址 https://github.com/itwsj/activitidemo

工作流(activiti7)-进阶使用(流程实例,个人任务,组任务)(三)相关推荐

  1. 系列学习 SpringBoot + Activiti7 工作流之第 3 篇 —— 【进阶篇】流程实例、个人任务

    查看之前的博客可以点击顶部的[分类专栏] 流程实例 1.什么是流程实例 一个流程实例包括了所有的运行节点.我们可以利用这个对象来了解当前流程实例的进度等信息.例如:用户或程序按照流程定义内容发起一个流 ...

  2. 《Activiti/Flowable 深入BPM工作流》-流程实例怎么实现挂起?

    <Activiti/Flowable  深入BPM工作流>-流程实例怎么实现挂起? 一. 问题 1. 什么情况要进行流程的挂起? 2. 具体怎么将流程挂起? 二. 详情   1. 什么情况 ...

  3. JAVAWEB开发之工作流详解(二)——Activiti核心API的使用(流程定义和流程实例的管理、流程变量、监听器...)以及与Spring的集成

    管理流程定义 设计流程定义文档 bpmn文件 设置方式可以直接使用插件图形化界面进行设置 为某任务节点指定任务执行者 保存后的BPMN文件可以使用XML编辑器打开 BPMN 2.0根节点是defini ...

  4. camunda工作流引擎流程定义部署 流程定义查询 激活流程实例

    camunda工作流引擎流程定义部署 流程定义查询 激活流程实例 1.通过xml字符串部署流程定义 /*** 通过xml字符串部署流程定义* @param processModelVo* @retur ...

  5. Activiti——工作流之流程实例、任务的执行(五)

    转自:http://profound-accumulation.iteye.com/blog/2244881 一.流程图   二.部署流程定义 /**部署请假流程(从zip)*/ @Test publ ...

  6. 工作流实战_17_flowable 流程实例撤回

    由于群里有些朋友对这个flowable还不是很熟悉,师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都是一 ...

  7. (经验总结)flowable工作流_01_流程实例管理

    文章目录 一.流程定义管理功能有哪些? 二.删除流程实例会删除哪些表中的数据? 三.流程实例做什么用? 四.流程定义涉及的表 一.流程定义管理功能有哪些? 类名:ApiFlowableProcessI ...

  8. 工作流实战_15_flowable 我发起的流程实例查询

    项目地址 https://gitee.com/lwj/flowable.git 代码分支 flowable-base 视频讲解地址 https://space.bilibili.com/4855245 ...

  9. 工作流实战_12_flowable 流程实例 终止流程

    项目地址 https://gitee.com/lwj/flowable.git 代码分支 flowable-base 视频讲解地址 https://space.bilibili.com/4855245 ...

最新文章

  1. Android饼图Pie Chart
  2. 判断一个变量是不是指针
  3. vue cli 脚手架上多页面开发 支持webpack2.x
  4. 惊呆了!小姐姐用图解 Python,这也太秀了吧?
  5. assertionerror python_Python成为专业人士笔记–内置模块Modules和函数Functions
  6. linux内核下载 编译
  7. 开发之前需要哪些文档_为什么在开发之前总是应该做文档
  8. 排序函数c语言流程图,各种排序的流程图 大家帮忙弄一下
  9. Android学习笔记05---项目的目录结构与安装及启动过程分析
  10. java componentorientation_Java JLabel.applyComponentOrientation方法代码示例
  11. 游戏素材网站推荐!!!
  12. 黑苹果双系统访问其他磁盘windows/U盘或移动硬盘格式NTFS
  13. 多元线性回归分析spss结果解读_多重线性回归分析SPSS操作与解读
  14. 天行健,君子以自强不息;地势坤,君子以厚德载物的解释
  15. 研究生复试英语问答口语10个最可能问到的问题
  16. 《浪潮之颠》学习笔记
  17. 双目视觉 XYZ求解
  18. 服务器系统安装优盘启动工具,u盘启动大师在Win10上安装和卸载远程服务器管理工具的方法...
  19. UEFI启动模式的服务器使用U盘安装Linux系统
  20. 《看完就懂系列》15个方法教你玩转字符串

热门文章

  1. Pycharm一键生成代码块
  2. 使用ChatGPT+Xmind一键生成思维导图,简直泰裤辣
  3. PHP生成二维码存到本地
  4. Qt之学习(二):QtDesigner的控件知识
  5. 关于TI账号注册卡在机器人验证那一步
  6. 对图神经网络的过平滑问题的一点粗浅见解(真·很肤浅的看法)
  7. 汉城大学学生口中的韩国IT产业战略
  8. 安卓插件化开发!我的头条面试经历分享,含爱奇艺,小米,腾讯,阿里
  9. 四种求最大公约数的算法 C / C++
  10. H5网站链接怎么封装小程序