Activiti 多个并发子流程的应用

多个部门发起资金计划,最后统一到财务部审批,每个部门发起资金计划是一个子流程,财务部审批是多个部门的计划同时审批,审批完成后,再提交上级领导审批。

流程如下:

要解决以上问题,需要实现多个子流程并行处理的功能。在Activiti5有一个比较强的节点属性就是多实例,它可以支持多实例的子流程,多实例任务,多实体脚本等。目前支持多实例的节点类型有:

多实例还有并行、串行区分。以下解释一下什么是并行与串行

并行代表同时进行,如把任务分给5个人来处理,这5个人同时会收到任务,并且可以同时处理,不受各自的影响。

串行代表工作或任务由一个人完成后,再由另一个人去处理,直至全部完成,每个任务依赖于前一个任务完成。

会签任务即可以由activiti多实例任务节点来实现,(上一博客有介绍如何开发设计会签任务)

在Activiti的定义中,生成多实例的定义很简单,只需要如下类似去生成以下标签,则可以完成多实例的声明,如下所示,我们要支持并行节点的多实例的定义

多实例人工任务

Java代码 

  1. "${assignee}"  id= "SignTask2"  name= "财务主管会签" >
  2. class="com.hotent.platform.service.bpm.listener.TaskSignCreateListener"
  3. event="create" />
  4. class="com.hotent.platform.service.bpm.listener.TaskAssignListener"
  5. event="assignment" />
  6. class="com.hotent.platform.service.bpm.listener.TaskCompleteListener"
  7. event="complete" />
  8. activiti:elementVariable="assignee" isSequential="false"
  9. activiti:collection="${taskUserAssignService.getSignUser(execution)}">
  10. ${signComplete.isComplete(execution) }

多实例子流程

Java代码 

  1. "${assignee}"  id= "SubProcess1"
  2. name="部门资金计划流程">
  3. "startUser"  id="startEvent2"
  4. name="开始" />
  5. "endEvent1"  name="结束1" />
  6. "task3"  name="助理填写">
  7. class="com.hotent.platform.service.bpm.listener.TaskCreateListener"
  8. event="create" />
  9. class="com.hotent.platform.service.bpm.listener.TaskAssignListener"
  10. event="assignment" />
  11. class="com.hotent.platform.service.bpm.listener.TaskCompleteListener"
  12. event="complete" />
  13. "task4"  name="部门领导审查">
  14. class="com.hotent.platform.service.bpm.listener.TaskCreateListener"
  15. event="create" />
  16. class="com.hotent.platform.service.bpm.listener.TaskAssignListener"
  17. event="assignment" />
  18. class="com.hotent.platform.service.bpm.listener.TaskCompleteListener"
  19. event="complete" />
  20. "startEvent2"  targetRef="task3"
  21. id="sequenceFlow1" name="" />
  22. "task3"  targetRef="task4" id="sequenceFlow2"
  23. name="" />
  24. "task4"  targetRef="endEvent1" id="sequenceFlow3"
  25. name="" />
  26. "start"
  27. class="com.hotent.platform.service.bpm.listener.StartEventListener" />
  28. "end"
  29. class="com.hotent.platform.service.bpm.listener.EndEventListener" />
  30. activiti:elementVariable="assignee" isSequential="false"
  31. activiti:collection="${taskUserAssignService.getMultipleUser(execution)}" />

所以关键的配置属性:

Java代码 

  1. activiti:elementVariable="assignee" isSequential="false"
  2. activiti:collection="${taskUserAssignService.getSignUser(execution)}">
  3. ${signComplete.isComplete(execution) }

我们在控制多实例的个数或人数时,是通过taskUserAssignService的getSignUser获取或getMultipleUser(execution)其集合的个数,从而决定产生多少个实体任务或子流程。

如实现子流程多实例的获取人数,则来自:

Java代码 

  1. /**
  2. * 获取多实体子流程的执行用户集合
  3. * @param execution
  4. * @return
  5. * @throws Execption
  6. */
  7. public List  getMultipleUser(ActivityExecution execution)  throws Exception{
  8. String nodeId=execution.getActivity().getId();
  9. ExecutionEntity executionEnt=(ExecutionEntity) execution;
  10. List  userIds=(List )execution.getVariable(BpmConst.SUBPRO_MULTI_USERIDS);
  11. if(userIds!=null) return userIds;
  12. Map <string,flownode> nodeMap= NodeCache.getByActDefId(executionEnt.getProcessDefinitionId());
  13. FlowNode subProcessNode=nodeMap.get(nodeId);
  14. FlowNode firstNode=subProcessNode.getSubFirstNode();
  15. FlowNode secodeNode=firstNode.getNextFlowNodes().get(0);
  16. List  userList=nodeUserMapLocal.get().get(secodeNode.getNodeId());
  17. logger.debug("userList size:" + userList.size());
  18. execution.setVariable(BpmConst.SUBPRO_MULTI_USERIDS, userList);
  19. return userList;
  20. }

因为该方法会被调用多次,所以其实现的思路是第一次其集合是来自用户的界面选择的人员列表,第一次之后,放到流程变量中去,在后续的获取中,直接从流程变量中获取。

然后在任务的创建的监听器中,从流程变量assignee中获取当前任务的执行人。以上的实现还有一细节就是要解决如何查找到子流程中的第一个任务节点,并且把对应的任务人员授给这任务节点。

最终实现的效果如下所示:

时间: 2024-09-30 00:52:39

Activiti 多个并发子流程的应用的相关文章

Cordys BOP 4平台的子流程与嵌入子流程对比以及子流程建模技术

子流程含义是在某个流程流转过程中可以创建一个新的流程并执行,结束后可以在此返回父流程. 关于子流程 子流程 子流程是BPMN构件,是在一个流程中的复合的活动.子流程可以分解为一系列更精细的活动.子流程通过父流程实例化. 子流程可以设计成交易的一部分,下面列出三种可能的交易结果: 成功完成(Successful completion):流程按顺序执行,并且交易执行成功: 取消(Cancel):交易内的活动回滚,并且补充特定活动: 异常(Exception):出现异常活动不需要回滚,将从错误事件继续

Activiti 查询最新版本的流程定义

package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipInputSt

BOS项目 第10天(activiti工作流第二天,流程变量、组任务、排他网关、spring整合activiti、项目中实现流程定义管理)

BOS项目笔记 第10天 今天内容安排: 1.流程变量(设置.获取) 2.组任务(候选人.候选组) 3.排他网关使用 4.spring整合activiti 5.将activiti应用到bos项目中 6.在bos项目中实现流程定义管理(部署.查询.查看png.删除) 1. 流程变量 1.1 设置流程变量的方式 l 方式一:启动流程实例时设置 l 方式二:办理任务时设置 l 方式三:使用RuntimeService的set方法设置 l 方式四:使用TaskService的set方法设置 注意:如果设

Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作

可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal  error  warn  info  debug  trace 一.部署流程定义 1,在工程项目下创建源码文件夹process 2,在该文件下下面新创建一个工作流流程定义文件test1.bpmn(NewàActivit Diagram) 3,在test1.bpmn文件定义请假流程或者是报销流程 4,测试代码 [java

【Activiti】为每一个流程绑定相应的业务对象的2种方法

方式1: 在保存每一个流程实例时,设置多个流程变量,通过多个流程变量的组合来过滤筛选符合该组合条件的流程实例,以后在需要查询对应业务对象所对应的流程实例时,只需查询包含该流程变量的值的流程实例即可. 设置过程:public void startProcess(Long id) { Customer cus = get(id); if (cus != null) { // 修改客户的状态 cus.setStatus(1); updateStatus(cus); // 将客户的追踪销售员的nickN

.NET开源工作流RoadFlow-Bug修改-1.8.2子流程接收者始终为发送者

1.8.2及以前版本中子流程待办任务的处理者始终为上一步骤发送者BUG的处理: 修改类:RoadFlow.Platform.WorkFlowTask中如下图红框中的内容即可:

Java Activiti 工作流引擎 springmvc SSM 流程审批 后台框架源码

工作流模块---------------------------------------------------------------------------------------------------------- 1.模型管理    :web在线流程设计器.预览流程xml.导出xml.部署流程 2.流程管理    :导入导出流程资源文件.查看流程图.根据流程实例反射出流程模型.激活挂起 3.运行中流程:查看流程信息.当前任务节点.当前流程图.作废暂停流程.指派待办人 4.历史的流程:查

Java开源Saas开发框架+Activiti流程管理=JSAAS

<h2>1.SAAS云应用场景</h2> SAAS云应用近几年来越来越火,这得益于国内云计算的基础设施的发展,如以前我们开发应用所需要的硬件计算资源.平台的操作系统.互联网IP.带宽及域名等,均可以非常有效解决了,企业建设应用或平台,不再需要考虑如何购买这些资源,我们仅需要通过在阿里或腾讯那里购买到这种云服务器即可,这些资源的使用及付费已经做到像交水费及电费那样简单.而现在唯一需要考虑的是在这些云计算资源上如何构建我们需要的企业<strong>应用</strong

activiti工作流的web流程设计器整合视频教程 SSM和独立部署

本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流程设计器和其它工作流项目分开部署的方式 2. 流程设计器和SSM框架项目整合在一起的方式 视频大小 1.13 GB ~[获取地址] QQ313596790 本视频均为本人亲自录的,另免费附加赠送Activiti工作流视频(企业开发实例讲解) (这个赠送的Activiti工作流视频里面的流程设计器用的