Activiti多级会签的实现

        最近在开发项目时,遇到了一个流程问题——在流转到下一节点的时候,下一节点的任务会进行分发处理,然后下一节点还可以进行分发处理。

        任务分发其实就是Activiti中的会签了,因此很自然地想到了使用Activiti的会签功能了。

        首先看一下完整的流程图:

        

        整个流程:由提交人提交表单,选择X个部门责任人,然后创建X个责任人Task,然后每个责任人Task可以选择Y个部门人员回复,最后待Y个部门人员回复完成后由责任人统一将处理意见转给监控员,监控员等待所有责任人的处理意见完成后填写处理意见转给提交人确认。

        因此在责任人处理节点是一次会签,在部门人员回复这个地方又存在着一次会签,2次会签存在着父子关系。因此这个地方需要将第二次会签放置到一个子流程中。

        第一次会签——子流程

       

        我将dutyUser变量取出来作为责任人处理的流程参与人,如下图:

 


        第二次会签


        同理,在部门人员回复这个地方设置会签条件,注意一下:上面的deptUser可直接作为本节点的参与人,如下:


        这样就把这种多级会签的流程完成了。

        说一下过程中需要注意的地方:

        1、在一个节点或者子流程上设置会签,必须要待所有子任务或者达到结束条件后流程节点才会往下一个节点进行流转。

        2、Activiti提供了2种子流程的实现,分别为CallActiviti和SubProcess,网上说CallActiviti好用些,因此在第一次我就使用的是它,但是dutyUser怎么都传不到子流程中,直到后面换成了SubProcess才将值传入进去,这个具体的原因我看了一下数据表,CallActiviti的形式在存储变量时excution_id和Task表中的excution_id没法匹配,而SubProcess配可以正常匹配,但这个更加深入的原因我就没有去研究了。

        补充一个查询子任务的方法:

        

                        Task temp = taskService.createTaskQuery()
					.taskId(taskId).singleResult();
			List<Execution> elist = runtimeService
					.createExecutionQuery()
					.parentId(temp.getExecutionId())
					.list();
			for(Execution exe : elist){
				String tid = taskService.createTaskQuery()
						.executionId(exe.getId())
						.singleResult().getId();
				taskService.complete(tid);
			}

        第一次使用会签功能,就遇到了这种多级会签的情况,在此记录下来,有问题的也希望各位多多指导。


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activiti 6中,会签是通过多实例任务来实现的。多实例任务是一个可以启动多个实例的任务,每个实例都有自己的执行信息和状态。 会签实现步骤如下: 1. 在流程图中添加多实例任务(userTask),并设置multiInstanceLoopCharacteristics属性,该属性用于指定多实例任务的循环特性。 2. 在multiInstanceLoopCharacteristics属性中,可以设置多实例任务的循环类型、循环条件、完成条件等属性。 3. 在每个实例的执行过程中,需要设置实例的执行人、执行结果等信息。 4. 当所有实例都执行完毕时,会合并实例的执行结果,并向下执行流程。 下面是一个简单的会签流程图示例: ![image](https://img-blog.csdn.net/20180424110910697?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Jsb2dfY3Nkbl9jb2Rl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80) 其中,会签任务的循环特性设置如下: ``` <userTask id="usertask2" name="会签任务" activiti:candidateUsers="${users}"> <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="users" activiti:elementVariable="assignee"> <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.6}</completionCondition> </multiInstanceLoopCharacteristics> </userTask> ``` 在这个示例中,会签任务的循环特性设置为非顺序执行(即并行执行),并且会签的执行人是一个用户列表(${users}),每个实例的执行人是列表中的一个元素(activiti:elementVariable="assignee")。 同时,会签的完成条件设置为当已完成实例数占总实例数的60%时,会签任务完成。 在实际使用中,需要根据具体的业务需求,设置不同的会签循环特性和执行逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值