前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Activiti开发案例之会签多实例任务

Activiti开发案例之会签多实例任务

作者头像
小柒2012
发布2019-12-05 22:39:06
2K0
发布2019-12-05 22:39:06
举报
文章被收录于专栏:IT笔记IT笔记

前言

Activiti 中有互斥网关和并行网关,但是在实际项目开发中,经常会出现一些看起来离奇的需求,比如任务分配给多人审批,只要指定数量的人审批通过就可以进入下一个流程。

流程图

部分XML
代码语言:javascript
复制
<userTask id="usertask1" name="会签(多人参与)" activiti:assignee="${assignee}">
    <multiInstanceLoopCharacteristics
      isSequential="false"
      activiti:collection="assigneeList"
      activiti:elementVariable="assignee">  
      <completionCondition>${nrOfCompletedInstances/nrOfInstances >=0.5}</completionCondition>
    </multiInstanceLoopCharacteristics>
</userTask>
参数
  • isSequential:串行并行的配置。
  • Collection:存放集合,集合中可以存任意值,工作流会根据你集合里的值个数,去生成对应的子流程,例如:我这里存的是3个用户的ID,{1,2,3,4},那么就会生成出4个子流程。
  • Element variable:节点流程变量,用于在流程图中代替集合中表示当前子流程的变量(我这存的是用户ID,所以表示的就是用户ID)。这个节点流程变量可以在当前task中使用。
  • Completion condition:完成条件,这里写的表达式如果满足即可进入下一个流程,表达式:${nrOfCompletedInstances/nrOfInstances >=0.5}。
  • nrOfInstances:实例总数
  • nrOfActiveInstances:当前活动的实例数量,对于顺序执行的多实例,值一直为1。
  • nrOfCompletedInstances:已经完成实例的数目。
  • Main config 中 Assignee 参数 ${assignee},这里对应的是 Multi instance 中的 Element variable 参数。

伪代码

新增流程实例:

代码语言:javascript
复制
Map<String, Object> variables = new HashMap<String, Object>();
List<String> candiateUserList= Arrays.asList(new String[] {"1","2","3","4"});
variables.put("assigneeList", candiateUserList);
ProcessInstance in =  runtimeService.startProcessInstanceByKey("counterSign", variables);
System.out.println("实例ID"+in.getId());
List<Task> list = taskService.createTaskQuery().processInstanceId(in.getId()).list();
System.out.println("任务数量:"+list.size());
list.forEach(task -> {
     System.out.println("任务ID"+task.getId());
     System.out.println("指派人ID"+task.getAssignee());
});

任务查询:

代码语言:javascript
复制
TaskQuery query = taskService.createTaskQuery();
List<Task> list = query.taskAssignee(userId).taskDefinitionKey("counterSign").list();
list.forEach(task -> {
      System.out.println("任务ID"+task.getId());
});

处理任务:

代码语言:javascript
复制
//会签,满足两人以上即可,表达式:${nrOfCompletedInstances/nrOfInstances >=0.5}
taskService.claim(taskId, userId);
taskService.complete(taskId);

根据表达式,只要满足两人以上执行了此任务就会进入下一个流程。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 流程图
    • 部分XML
      • 参数
      • 伪代码
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档