每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

Activiti流程任务指派、转办以及委派

一、指派

  1. 第一种方法:前提是流程中配置了assignee变量:
Map<String,Object> variables=new HashMap<>();
variables.put("assignee", userId);
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
taskService.claim(taskId, userId);
  1. 第二种方法:不需要配置变量,直接使用API:
Map<String,Object> variables=new HashMap<String,Object>();
variables.put("approve", "false");
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
//一定要认领任务之后,重新获取当前任务,然后分配角色。
taskService.claim(task.getId(), userId);
taskService.complete(task.getId(), variables);
task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();
//指派任务
taskService.addCandidateUser(task.getId(),userId);
//如果是指派角色
taskService.addCandidateGroup(task.getId(),roleId);

二、转办
转办:直接将办理人换成别人,这时任务的拥有者不再是转办人。

1.第一种方式的指派:

//直接转派就可以覆盖掉之前的
taskService.setAssignee(taskId,userId);

2.第二种方式的指派:

/**
* 删除指派人重新指派
*/
taskService.deleteCandidateUser(taskId,"原用户ID");
taskService.addCandidateUser(taskId,"新用户ID");
//如果要查询转给他人处理的任务,可以同时将OWNER进行设置:
taskService.setOwner(taskId, userId);

三、委派
委派:任务委派只是委派人将当前的任务交给被委派人进行审批,解决 任务后又重新回到委派人身上。
流程图:

@Test
public void delegate(){
    String taskId = "e94bace6-aa39-11ea-851b-000ec6dd34b8";
    String userId = "被委派人";
    processService.delegate(taskId,userId);
    System.out.println("委派成功");
}

此时act_ru_task表中任务实例增加一个owner,办理人变成了被委派人。DELEGATION_字段的值为PENDING(等待)。


委派人此时查询任务,根据办理人查询时查询不到的,此时任务的办理人时被委派人。所以委派人查询任务是根据owner。具体代码如下:

@Test
public void searchTaskByOwner(){
	String owner = "委派人";
	List<Task> tasks = taskService.createTaskQuery().taskOwner(owner).list();
	if(null != tasks && !tasks.isEmpty()){
		for (Task task:tasks) {
			System.out.println("待办任务ID: "+task.getId());
			System.out.println("待办任务定义key: "+task.getTaskDefinitionKey());
			System.out.println("流程实例ID: "+task.getProcessInstanceId());
			System.out.println("流程定义ID: "+task.getProcessDefinitionId());
			System.out.println("待办任务name: "+task.getName());
			System.out.println("待办任务所有者: "+task.getOwner());
			System.out.println("待办任务办理人: "+task.getAssignee());
		}
	}
}

被委托人解决任务:

@Test
public void resolveTask(){
	String taskId = "93182e09-aa37-11ea-ba0c-000ec6dd34b8";
	taskService.resolveTask(taskId);
	System.out.println("被委派人解决任务");
}

此时任务并没有被完成,只是回到了委派人。然后可以看到,上图中有DELEGATION_显示为RESOLVED(已解决)。
然后才是委派人完成任务:

@Test
public void completeTask(){
	String taskId = "e94bace6-aa39-11ea-851b-000ec6dd34b8";
	taskService.complete(taskId);
	System.out.println("委派人完成任务");
}

总结:

//将任务进行委派
taskService.delegateTask(taskId, userId);
//被委派人办理任务后
taskService.resolveTask(taskId,variables);
posted @ 2022-06-21 16:10  星星之草%  阅读(4203)  评论(2编辑  收藏  举报