Activiti流程框架_项目实战10指定任务办理人

  在这篇,小白想聊聊有关流程中使用比较频繁的用户任务,既然是用户任务,那么必不可少的需要指定任务的办理人或者候选人,然后当流程运行到该用户任务节点时,才能让指定的人审批处理;
  一般用户任务的办理人,可以设置具体的办理人或者候选人 ,其设置方式有以下三种:

  1. 直接在流程模型中写死办理人或候选人的Id,项目中不推荐
  2. 采用流程变量赋值;
  3. 通过委托类(TaskListener监听类)动态设置;
    下面让我们从项目的角度一同介绍2和3方法的结合使用吧!
流程变量赋值

  在指定流程的发起者时,可以在流程模型的开始事件节点中指定initiator=”applyUserId”,这样当申请人启动流程时,通过设置代码identityService.setAuthenticatedUserId(“用户Id”); 可以将申请人的Id保存到applyUserId流程变量中,当在流程的其他用户任务节点需要指定由申请人办理时,则可以直接用UEL表达式assignee=”#{applyUserID}”动态绑定,例如“重新提交”用户任务,需要流程的发起者办理;


identityService.setAuthenticatedUserId("用户Id");			
//启动流程
ProcessInstance pi=runtimeService.startProcessInstanceById(processDefinitionId, bs.getId(), variables);

在这里插入图片描述

委托类动态设置

  往往在执行用户任务时,我们很难知道该任务节点应该由哪个管理者去办理,所幸,一般公司都会自备一张人员信息表,其中包含了人员的管理职位Title,我们可以通过人员信息表以及用户任务名称中的“职位”关键字,在任务创建的时候委托动态绑定办理人或者候选人(当某个管理职位有多个员工时);
  注:这里的taskListener不是流程变量,而是由Spring容器管理的一个Bean;
在这里插入图片描述

package com.hlmc.webapp.listener;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.task.IdentityLink;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.hlmc.webapp.entity.BusinessStatus;
import com.hlmc.webapp.service.admin.business.BusinessStatusService;
import com.hlmc.webapp.service.admin.business.CommonWorkflowService;
import com.hlmc.webapp.service.admin.member.MemberService;
import com.hlmc.webapp.service.admin.system.UserService;

@Component("taskListener")
public class TaskListenerImp implements TaskListener {
	
	@Autowired
	private BusinessStatusService businessStatusService;
	@Autowired
	private CommonWorkflowService commonWorkflowService;
	@Autowired
	private UserService userService;
	@Override
	public void notify(DelegateTask delegateTask) {
			
		//1、设置任务的分配人或候选人
		List<Map> assignees=this.configAssignee(delegateTask);		
		//2、修改业务当前状态		
		BusinessStatus bs=updateBusinessStatus(delegateTask);
			
		
	}
	/**
	**配置办理人或者候选人
	**/
	private List<Map> configAssignee(DelegateTask delegateTask) {		
		List<Map> result=new ArrayList<>();
		if(delegateTask.getAssignee()==null) {
		    //根据用户任务名称中的职位关键字来决定应该赋予的办理人或者候选人;
			result=getAssignees(delegateTask);
			if(result!=null&& result.size()>0) {
				if(result.size()==1) {
					String assignee=(String)result.get(0).get("EMPLOYEE_NO");
					delegateTask.setAssignee(assignee);
				}else {	
					List<String> assignees=new ArrayList<>();
					for(int i=0;i<result.size();i++) {
						assignees.add((String)result.get(i).get("EMPLOYEE_NO"));
					}
					delegateTask.addCandidateUsers(assignees);
				}
			}
		}else {
			Map assignee=userService.findByUID(delegateTask.getAssignee());
			result.add(assignee);
		}
		return result;
	}

}

以上是小白在项目开发中动态绑定办理人的方法,其他方法有待考验;
(更多有关activiti的项目开发内容请等下次更新,欢迎点评,共同进步哦!)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值