1、启动流程
  在完成了流程定义部署后,就要启动流程实例了。
 /*** 1 启动流程* 当流程到达一个节点时,会在act_ru_execution表中产生1条数据* 如果当前节点是用户任务节点,这时会在act_ru_task表中产生1条数据(任务的办理人,任务的创建时间)*/@Testpublic void startProcess() throws Exception {/*** v1 myProcess:2:604* v2 myProcess:3:704*/
//     runtimeService.startProcessInstanceById(processDefinitionId)// 通过流程定义的key启动流程,会启动版本最高的流程ProcessInstance pi = runtimeService.startProcessInstanceByKey("LeaveFlow");System.out.println("pid:" + pi.getId() +",activitiId:" + pi.getActivityId());}

2、查看流程状态

 public void queryProcessState() throws Exception {String processInstanceId="1401";// 通过流程实例ID查询流程实例ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();if(pi!=null){System.out.println("当前流程在:" + pi.getActivityId());}else{System.out.println("流程已结束!!");}}

3、查看公有任务

  对指定用户的可接取的公共任务执行查询。

 public void queryCommonTask() throws Exception {// 创建任务查询对象TaskQuery taskQuery = taskService.createTaskQuery();// 配置查询对象String candidateUser="张三";taskQuery// 过滤条件
   .taskCandidateUser(candidateUser)// 分页条件
//     .listPage(firstResult, maxResults)// 排序条件
   .orderByTaskCreateTime().desc();// 执行查询List<Task> tasks = taskQuery.list();System.out.println("======================【"+candidateUser+"】的公共任务列表=================");for (Task task : tasks) {System.out.print("id:"+task.getId()+",");System.out.print("name:"+task.getName()+",");System.out.print("createTime:"+task.getCreateTime()+",");System.out.println("assignee:"+task.getAssignee());}}

说明:

  1.查询任务首先使用TaskService创建TaskQuery对象

  2.在查询对象上,添加taskCandidateUser过滤条件,代表过滤任务候 选者为自己的任务

  3.调用list方法返回指定用户的可接任务列表

  4.所有公共任务的assignee属性为空

4、查看私有任务

  对指定用户的未完成的个人任务执行查询。

 public void queryPersonalTask() throws Exception {// 创建任务查询对象TaskQuery taskQuery = taskService.createTaskQuery();// 配置查询对象
//     String assignee="user";String assignee="李四";taskQuery// 过滤条件
   .taskAssignee(assignee)// 分页条件
//     .listPage(firstResult, maxResults)// 排序条件
   .orderByTaskCreateTime().desc();// 执行查询List<Task> tasks = taskQuery.list();System.out.println("======================【"+assignee+"】的代办任务列表=================");for (Task task : tasks) {System.out.print("id:"+task.getId()+",");System.out.print("name:"+task.getName()+",");System.out.print("createTime:"+task.getCreateTime()+",");System.out.println("assignee:"+task.getAssignee());}}

说明:

  1)     因为是任务查询,所以从processEngine中应该得到TaskService

  2)     使用TaskService获取到任务查询对象TaskQuery

  3)     为查询对象添加查询过滤条件,使用taskAssignee指定任务的候选者(即查询指定用户的代办任务),添加分页排序等过滤条件

  4)     调用list方法执行查询,返回办理者为指定用户的任务列表

  5)     任务ID、名称、办理人、创建时间可以从act_ru_task表中查到。

  6)     Execution与ProcessInstance见5.6章节的介绍。在这种情况下,ProcessInstance相当于Execution

  7)     如果assignee属性为部门经理,结果为空。因为现在流程只到了”填写请假申请”阶段,后面的任务还没有执行,即在数据库中没有部门经理可以办理的任务,所以查询不  到。

  8)     一个Task节点和Execution节点是1对1的情况,在task对象中使用Execution_来标示他们之间的关系

  9)     任务ID在数据库表act_ru_task中对应“ID_”列

5、认领任务

  通常一个任务为公共任务任务都有一个以上的候选者,用户想要办理它应该先进行认领任务操作,即把自己变成任务的拥有者。

 public void takeTask() throws Exception {// claim 认领String taskId="1404";String userId="李四";// 让指定userId的用户认领指定taskId的任务
  taskService.claim(taskId, userId);System.out.println("认领操作完毕!!");}

 说明:

  1.任务相关操作,首先得到taskService

  2.确定被认领的任务ID和认领人ID

  3.调用taskService的claim(认领)方法,把公共任务变成指定用户的 私有任务

6、办理任务

public void complete() throws Exception {String taskId = "1602";// 完成任务
  taskService.complete(taskId );}

说明:

  1)     办理任务,从ProcessEngine得到的是TaskService。

  2)     当执行完这段代码,再以员工的身份去执行查询的时候,会发现这个时候已经没有数据了。

  3)     对于执行完的任务,activiti将从act_ru_task表中删除该任务,下一个任务会被插入进来。

  4)     以”部门经理”的身份进行查询,可以查到结果。因为流程执行到部门经理审批这个节点了。

  5)     再执行办理任务代码,执行完以后以”部门经理”身份进行查询,没有结果。

  6)     重复第3和4步直到流程执行完。

7、验证流程已经结束

  在流程执行的过程中,创建的流程实例ID在整个过程中都不会变,当流程结束后,流程实例将会被删除

说明:

  1)     因为是查询流程实例,所以先获取runtimeService

  2)     创建流程历史查询对象,设置实例ID过滤参数

  3)     由于一个流程实例ID只对应一个实例,使用singleResult执行查询返回一个唯一的结果,如果结果数量大于1,则抛出异常

  4)     判断指定ID的实例是否存在,如果结果为空,则代表流程结束,实例已被删除

转载于:https://www.cnblogs.com/cxyj/p/3877218.html

Activiti流程实例管理相关推荐

  1. 工作流学习——Activiti流程实例、任务管理四步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46646565 ***************************************** ...

  2. activiti 流程实例与业务关联

    学习activiti,很快就可以学会,但是运用还是一个问题,比如在你学习的过程中,都是写Test来测试,创建processEngine,流程部署,开始流程,完成任务等等,没有完成的一套流程,要讲act ...

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

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

  4. flowable实战(三)flowable流程实例管理接口

    文章目录 一.流程实例的管理接口常见功能: 1.启动一个流程(即创建一个流程实例) 2.本人发起的流程实例 3.本人参与的流程实例 4.挂起/激活流程实例 5.提前终止流程实例(或又叫撤销流程) 6. ...

  5. Activiti 流程实例、任务、执行对象及相关的表

    一个流程中,流程实例只有一个,执行对象可以有多个(如果存在分支和聚合) SELECT * FROM activiti.act_ru_execution a;  #正在执行的执行对象表 SELECT * ...

  6. flowable流程实例管理接口

    一.流程实例的管理接口常见功能: 1.启动一个流程(即创建一个流程实例) 2.本人发起的流程实例 3.本人参与的流程实例 4.挂起/激活流程实例 5.提前终止流程实例(或又叫撤销流程) 6.彻底删除流 ...

  7. Activiti流程实例开始结束,接收任务活动

    代码: StartTest.java package com.ytdx.start;import java.io.InputStream;import org.activiti.engine.Proc ...

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

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

  9. 【activiti】流程实例

    流程实例 1.什么是流程实例 **流程实例(ProcessInstance)**代表流程定义的执行实例. 一个流程实例包含了所有的运行节点.我们可以利用这个对象来了解当前流程实例的进度等信息. 例如: ...

  10. Activiti流程控制框架

    Activiti概述 Activiti5是由Alfresco软件发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可执行流程语言框架.Act ...

最新文章

  1. Java 实现MapReduce函数
  2. 如何加快Json 序列化?有哪些方法?
  3. 餐饮营销策划案例合集(共18份)
  4. mac android usb驱动 win10,macbook安装Win10后无法创建引导的USB驱动器解决方法
  5. 神经派考古学 - 推荐一个blog
  6. Ubuntu如何安装TeamViewer Ubuntu安装TeamViewer教程
  7. ArcGIS 关于三维立体地图 简单使用,里面的资源就在 arcgis 的demo里面有
  8. VS2013中关于gets函数使用问题的解决方案(搬运“尼古拉斯罗本”的部分文章,)
  9. 稚晖君的HoloCubic 透明棱镜小电视
  10. 不是所有的战略规划都可以用BLM
  11. 解决32G或64G的SD卡无法使用NOOBS安装树莓派的问题
  12. # 使用 DHCP 动态管理主机地址##
  13. 一次关于 Dubbo 服务 IP 注册错误的踩坑经历
  14. SQL Server 让你的数据来去自如——批处理
  15. nginx--中文域名解析
  16. 深度学习在静息态功能磁共振成像中的应用
  17. 【Unity开发小技巧】FMS有限状态机详解
  18. [JVM]成为JavaGC专家(1)—深入浅出Java垃圾回收机制
  19. 本地数据备份的重要性
  20. 近期开通《Python编程快速上手-让繁琐工作自动化》视频教学

热门文章

  1. 重复insmod同一个模块导致段错误
  2. html5下移标签,不可不知的html5标签
  3. netlink 011 -- generic netlink 编程入门
  4. Netlink 0002 -- 什么是Netlink
  5. Linux调度新特性EAS
  6. FreeSWITCH核心命令
  7. 总结一下linux中的分段机制
  8. 1074 Reversing Linked List (25)(25 分)
  9. 两个excel表格信息合并 自动匹配_别再复制黏贴了,合并两个Excel表格可以很简单!...
  10. java备份_手把手教你实现Java权限管理系统 后端篇(十三):系统备份还原