在Activiti-5.4中实现会签



 

 最近正在使用Activiti5.4实现系统中的流程,在发文流程中有会签,研究了两天终于搞定了,现分享出来,以免其他兄弟们走弯路了,其中有不对的欢迎拍砖。

 

1、会签节点策略配置

在Activiti-5.4中实现会签_第1张图片

 

2、流程定义文件中会签节点的配置

<userTask id="usertask2" name="会签" activiti:assignee="${hqr}">
      <extensionElements>
        	<activiti:taskListener event="create" delegateExpression="${counterSignTaskListener}"></activiti:taskListener>
	<activiti:taskListener event="complete" delegateExpression="${counterSignTaskListener}"></activiti:taskListener>
      </extensionElements>
      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="assigneeList" activiti:elementVariable="hqr">
	<completionCondition>${signVoteResult != 2 }</completionCondition>
      </multiInstanceLoopCharacteristics>
</userTask>

 

 3、counterSignTaskListener代码

package com.flowcenter.listener.task;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

import com.flowcenter.common.service.ISignTaskRuleService;

/**
 * 会签人工任务TaskListener
 * @author ShiHukui
 *
 */
public class CounterSignTaskListener implements TaskListener {
	
	/**
	 * 注入会签规则业务层
	 */
	private ISignTaskRuleService signTaskRuleService;
	public void setSignTaskRuleService(ISignTaskRuleService signTaskRuleService) {
		this.signTaskRuleService = signTaskRuleService;
	}


	public void notify(DelegateTask delegateTask) {
		
		// 事件名称
		String eventName = delegateTask.getEventName();
		
		// 任务相关信息
		String taskId = delegateTask.getId();
		String taskKey = delegateTask.getTaskDefinitionKey();
		String procDefId = delegateTask.getProcessDefinitionId();
		String procInstId = delegateTask.getProcessInstanceId();
		
		// 获取当前UUID
		String signTaskUUID = (String)delegateTask.getVariable("signTaskUUID");
		
		// create 事件
		if("create".equals(eventName)) {
			
			// 获取审核人列表
			String assigneeList = delegateTask.getVariable("assigneeList").toString();
			
			System.out.println("会签人为:"+assigneeList);
			
			// 保存会签人员信息
			signTaskRuleService.saveSignTaskAssignees(taskId , 
													  taskKey , 
													  delegateTask.getName() ,
													  procInstId ,
													  procDefId, 
													  delegateTask.getAssignee(), 
													  signTaskUUID , 
													  assigneeList);
		}
		// complete 事件
		else if("complete".equals(eventName)) {
			
			// 获取投票结果和意见
			String voteResult = (String) delegateTask.getVariable("voteResult");
			String voteOpinion = (String) delegateTask.getVariable("voteOpinion");
			
			// 填充审核人投票信息
			int result = signTaskRuleService.saveSignTaskAssigneeVote(taskId, taskKey, procDefId, procInstId, voteResult, voteOpinion , signTaskUUID);
			
			System.out.println("会签结果为(0:打回,1:通过,2:会签进行中):"+result);
			delegateTask.setVariable("signVoteResult", result);
		}
	}
	
}

 

 

 4、流程图

在Activiti-5.4中实现会签_第2张图片

 

 

 

你可能感兴趣的:(Activiti)