博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activiti流程实例管理
阅读量:6229 次
发布时间:2019-06-21

本文共 3980 字,大约阅读时间需要 13 分钟。

1、启动流程
  在完成了流程定义部署后,就要启动流程实例了。
/**  * 1 启动流程  * 当流程到达一个节点时,会在act_ru_execution表中产生1条数据  * 如果当前节点是用户任务节点,这时会在act_ru_task表中产生1条数据(任务的办理人,任务的创建时间)  */ @Test public 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
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
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

你可能感兴趣的文章
烂泥:阿里云RDS本地恢复数据
查看>>
php连接oracle测试和pdo连接mysql测试
查看>>
天兔(Lepus)数据库监控系统快速安装部署
查看>>
设置GRUB密码及重置密码
查看>>
使用组策略配置域中计算机系统更新
查看>>
Seam的中文化支持
查看>>
NetBeans 开发 Applet
查看>>
Git学习教程(五):Git标签
查看>>
域环境配置ISA2006企业版存储服务器及NLB之一配置存储服务器
查看>>
[IE 技巧] 显示/隐藏IE 的菜单/工具栏
查看>>
微软私有云分享(R2)2-服务模板的变量
查看>>
足球防守技巧
查看>>
kettle job如何利用java的反射机制获取执行的sql语句
查看>>
SQL 必知必会·笔记<6>使用数据处理函数
查看>>
设计模式:工厂方法模式
查看>>
.Net开发笔记(二十一) 反射在.net中的应用
查看>>
ios31--NSThread
查看>>
设计模式总结篇系列:桥接模式(Bridge)
查看>>
ubuntu VNC连接树莓派
查看>>
[nodemon] Internal watch failed: watch ENOSPC错误解决办法
查看>>