您好,欢迎来到微智科技网。
搜索
您的当前位置:首页Camunda工作流多实例(会签/多人审批)

Camunda工作流多实例(会签/多人审批)

来源:微智科技网

1、多实例/会签(Multi-instance)

在流程业务管理中,任务通常是由一个人去处理的,而多个人同时处理一个任务,称之为会签任务。
一个多实例活动被执行多次,对于给定集合的每个元素执行一次。Camunda工作流多实例包括三种类型:

1、Sequential(顺序或串行)
2、Parallel(并行)
3、Loop(循环)

多实例活动按顺序或并行执行(默认)。在BPMN中,一个连续的多实例活动显示为底部有三条水平线。并行的多实例活动由三条垂直线表示。

(1)Sequential(顺序/串行)

In case of a sequential multi-instance activity, the instances are executed one at a time. When one instance is completed, a new instance is created for the next element in the inputCollection.
如果是连续的多实例活动,则一次执行一个实例。当一个实例完成时,会为inputCollection中的下一个元素创建一个新实例。

串行流程图配置

后台java代码

@ResponseBody
	@RequestMapping("/startFlow")
	public Object startFlow(Yslc yslc, HttpServletRequest request) {
		try {
 			tylcService.saveData(yslc);
			Map<String,Object> map = new HashMap<>();
			//对应流程图Collection
			List<String> xmjlList =  staffService.getStaffIdsByRoleName("项目经理");
			map.put("xmjlList",xmjlList);
 			String businessKey = String.valueOf(yslc.getYslcId());
			identityService.setAuthenticatedUserId(yslc.getCreatedStaffId().toString());
			ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(yslc.getProcessDefinitionKey(),businessKey, map);
			yslc.setProcinstId(processInstance.getId());
			tylcService.updateData(yslc);
 			return renderSuccess("保存成功");
		} catch (Exception e) {
			e.printStackTrace();
 			return renderError("保存失败");
		}
	}

流程结果
需要两个人同时办理完后,流程才能继续往下走,一次只能有一个人收到代办,办理流程有先后顺序

(2)Parallel(并行)

In case of a parallel multi-instance activity, all instances are created when the multi-instance body is activated. The instances are executed concurrently and independently from each other.
如果是并行的多实例活动,则在激活多实例主体时会创建所有实例。这些实例是同时执行的,并且彼此。

并行流程图配置

后台代码

	@ResponseBody
	@RequestMapping("/startFlow")
	public Object startFlow(Yslc yslc, HttpServletRequest request) {
		try {
			yslc.setCreatedStaffId(this.getCurrentStaffId());
			yslc.setCreatedTime(DateUtil.format(new Date(), DateUtil.DATE_FORMAT));
			yslc.setDeletedFlag(0);
 			tylcService.saveData(yslc);
			Map<String,Object> map = new HashMap<>();
			map.put("bmzrapprover",yslc.getBmzrApprover());
			//对应流程图Collection
			List<String> hqxzzgList =  staffService.getStaffIdsByRoleName("后勤行政主管");
			map.put("hqxzzgList",hqxzzgList);
			map.put("zhbapprover",tylc.getZhbApprover());
			map.put("hqxzzgapprover",tylc.getHqzgApprover());
			map.put("hrapprover",tylc.getHqzgApprover());
 			String businessKey = String.valueOf(yslc.getYslcId());
			identityService.setAuthenticatedUserId(yslc.getCreatedStaffId().toString());
			ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(yslc.getProcessDefinitionKey(),businessKey, map);
			yslc.setProcinstId(processInstance.getId());
			yslc.setModifiedStaffId(this.getCurrentStaffId());
			yslc.setModifiedTime(DateUtil.format(new Date(), DateUtil.DATE_FORMAT));
			tylcService.updateData(yslc);
 			return renderSuccess("保存成功");
		} catch (Exception e) {
			e.printStackTrace();
 			return renderError("保存失败");
		}
	}

流程结果
需要两个人同时办理完后,流程才能继续往下走,两个人都会收到代办,办理流程没有先后顺序

2、Multil instance:(多实例)有以下几个属性

Loop cardinality:循环基数(实例数量),可选项。可填整数,表示会签的人数。
Completion condition:完成条件(结合条件表达式),可选项。
Collection:集合,可选项。会签人数的集合list,与loop cardinality二选一。
Element variable:元素变量。选择Collection时必选,为collection集合每次遍历的元素。

3、会签环节中设计的几个默认流程变量

(1) nrOfInstances(numberOfInstances):会签中总共的实例数
(2) nrOfCompletedInstances:已经完成的实例数量
(3) nrOfActiviteInstances:当前还没有完成的实例数量

4、Completion condition,完成条件表达式

${nrOfInstances == nrOfCompletedInstances} 表示所有人员审批完成后会签结束。

${ nrOfCompletedInstances == 1}表示一个人完成审批,该会签就结束。

设置一个人完成后会签结束,那么其他人的代办任务都会消失。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务