Activiti分配个人任务和组任务

分配个人任务的三种方式

1. 直接指定办理人

@Test
	public void findMyTaskList(){
		String userId = "kelly";
		List<Task> list = processEngine.getTaskService()//
		                .createTaskQuery()//
		                .taskAssignee(userId)//指定个人任务查询
		                .list();
		for(Task task:list ){
			System.out.println("id="+task.getId());
			System.out.println("name="+task.getName());
			System.out.println("assinee="+task.getAssignee());
			System.out.println("createTime="+task.getCreateTime());
			System.out.println("executionId="+task.getExecutionId());
			
		}
	}

2. 使用流程变量指定办理人

@Test
	public void StartProcess(){

		//启动流程实例
		/**
		 * 启动流程实例的同时,设置流程变量,使用流程变量的方式设置下一个任务的办理人
		 *     流程变量的名称,就是在task.bpmn中定义#{userID}的userID
		 *     流程变量的值,就是任务的办理人
		 */
		Map<String, Object> variables = new HashMap<String, Object>();
		variables.put("userID", "kelly");
		ProcessInstance pi = processEngine.getRuntimeService()//
				.startProcessInstanceByKey("task",variables);
       //使用流程定义的key的最新版本启动流程

	}
	
	/**查询我的个人任务*/
	@Test
	public void findPersonalTaskList(){
		//任务办理人
		String assignee = "kelly";
		List<Task> list = processEngine.getTaskService()
					.createTaskQuery()
					.taskAssignee(assignee)//个人任务的查询
					.list();
		if(list!=null && list.size()>0){
			for(Task task:list){
				System.out.println("任务ID:"+task.getId());
				System.out.println("任务的办理人:"+task.getAssignee());
				System.out.println("任务名称:"+task.getName());
				System.out.println("任务的创建时间:"+task.getCreateTime());
				System.out.println("流程实例ID:"+task.getProcessInstanceId());
	
			}
		}
	}

3.使用Listener 监听器  TaskListenerImpl,用来设置任务的办理人

任务监听器类需要实现:   org.flowable.engine.delegate.TaskListener

流程监听器需要实现: org.flowable.engine.delegate.ExecutionListener;

//数据在ACT_RU_TASK表中也正常,
//但是在ACT_HI_TASKINS表中的ASSIGENEE_审批人字段是空的,所以查询历史时查不出来,
 public class UserTaskListner implements TaskListener{
 
	/**设置任务的办理人(个人任务和组任务)*/
	@Override
	public void notify(DelegateTask delegateTask) {
		//指定个人任务
		delegateTask.setAssignee("kelly");
	}
	
}

//改进的监听类
@Component
public class UserTaskListner implements TaskListener, ExecutionListener {

    @Override
    public void notify(DelegateTask delegateTask) {
        //  activiti监听器无法实例化(SpringBoot) SpringUtil一个工具类,手动获取Bean
        TaskService taskService = SpringUtil.getObject(TaskService.class);
        //监听器分配任务处理人
       //这种无论流程图的处理人Assignee填不填都能正常分配
        taskService.setAssignee(delegateTask.getId(),"kelly");

}

 @Component
public class SpringUtil implements ApplicationContextAware {
 
   /**
    * 当前IOC
    *
    */
   private static ApplicationContext applicationContext;
    
    /**
     * 设置applicationContext
     */
   @Override
   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
      this.applicationContext = applicationContext;
   }
 
   public static <T> T getObject(Class<T> clazz){
       return applicationContext.getBean(clazz);
   }

@Test
	public void findPersonalTaskList(){
		//任务办理人
		String assignee = "kelly";
		List<Task> list = processEngine.getTaskService()//
					.createTaskQuery()//
					.taskAssignee(assignee)//个人任务的查询
						.list();
		if(list!=null && list.size()>0){
			for(Task task:list){
				System.out.println("任务ID:"+task.getId());
				System.out.println("任务的办理人:"+task.getAssignee());
				System.out.println("任务名称:"+task.getName());
				System.out.println("任务的创建时间:"+task.getCreateTime());
				System.out.println("流程实例ID:"+task.getProcessInstanceId());
			
			}
		}
	}

分配组任务的三种方式

1、直接指定办理人

/**查询组任务*/
	@Test
	public void findGroupTaskList() {
		// 任务办理人
		String candidateUser = "yzz";
		List<Task> list = processEngine.getTaskService()//
				.createTaskQuery()//
				.taskCandidateUser(candidateUser)// 参与者,组任务查询
				.list();
		if (list != null && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("任务的办理人:" + task.getAssignee());
				System.out.println("任务名称:" + task.getName());
				System.out.println("任务的创建时间:" + task.getCreateTime());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
	
			}
		}
	}

2、使用流程变量

@Test
	public void StartProcess(){

		//启动流程实例
		/**
		 * 启动流程实例的同时,设置流程变量,使用流程变量的方式设置下一个任务的办理人
		 *		 流程变量的名称,就是在task.bpmn中定义activiti:candidateUsers="#{userIDs}"的userIDs
		 * 		 流程变量的值,就是任务的办理人(组任务)
		 */
		Map<String, Object> variables = new HashMap<String, Object>();
		variables.put("userIDs", "kelly,yzz");
		ProcessInstance pi = processEngine.getRuntimeService()//
							.startProcessInstanceByKey("task",variables);
   //使用流程定义的key的最新版本启动流程
	}

	/**查询组任务*/
	@Test
	public void findGroupTaskList(){
		//任务办理人
		String candidateUser = "yzz";
		List<Task> list = processEngine.getTaskService()//
						.createTaskQuery()//
						.taskCandidateUser(candidateUser)//参与者,组任务查询
						.list();
		if(list!=null && list.size()>0){
			for(Task task:list){
				System.out.println("任务ID:"+task.getId());
				System.out.println("任务的办理人:"+task.getAssignee());
				System.out.println("任务名称:"+task.getName());
				System.out.println("任务的创建时间:"+task.getCreateTime());
				System.out.println("流程实例ID:"+task.getProcessInstanceId());
			
			}
		}
	}

3、使用监听器


public class UserTaskListner implements TaskListener {
 
	/**
	 * 可以设置任务的办理人(个人组人和组任务)
	 */
	@Override
	public void notify(DelegateTask delegateTask) {
		//指定组任务
		delegateTask.addCandidateUser("kelly");
		delegateTask.addCandidateUser("yzz");
	}
}
 
/**查询组任务*/
	@Test
	public void findGroupTaskList(){
		//任务办理人
		String candidateUser = "yzz";
		List<Task> list = processEngine.getTaskService()//
						.createTaskQuery()//
						.taskCandidateUser(candidateUser)//参与者,组任务查询
						.list();
		if(list!=null && list.size()>0){
			for(Task task:list){
				System.out.println("任务ID:"+task.getId());
				System.out.println("任务的办理人:"+task.getAssignee());
				System.out.println("任务名称:"+task.getName());
				System.out.println("任务的创建时间:"+task.getCreateTime());
				System.out.println("流程实例ID:"+task.getProcessInstanceId());
		
			}
		}
	}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值