activiti 动态分配任务候选人

任务候选人是有权限对该任务进行操作的用户,
    可以使用TaskService.addCandidateUser() 或 addCandidateGroup()实现,
    可以在bpmn中进行配置,
    可以使用监听器方式(需要继承TaskListener)
    可以使用JUEL表达式实现,使用${}来引用,和EL表达式一样

下面我们使用JUEL表达式实现:
1. 在bpmn中引用类:

<process id="leaveBill" name="leaveBillprocess" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <endEvent id="endevent1" name="End"></endEvent>
    <userTask id="usertask1" name="User Task"     activiti:candidateUsers="${authService.getCandidateUsers()}"></userTask>
    <sequenceFlow id="flow3" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
    <userTask id="usertask2" name="User Task"></userTask>
    <sequenceFlow id="flow4" sourceRef="startevent1" targetRef="usertask2"></sequenceFlow>
    <sequenceFlow id="flow5" sourceRef="usertask2" targetRef="usertask1"></sequenceFlow>
  </process>
...

2. 定义获取用户的类,要序列化
public class AuthService implements Serializable  {
	public List<String> getCandidateUsers(){
		List<String> users=new ArrayList<>();
		users.add("user1");
		users.add("user2");
		return users;
	}
	
}

3. 在流程中传入引用类

RuntimeService runtimeService = engine.getRuntimeService();
Deployment de = rs.createDeployment().addClasspathResource("test.bpmn").deploy();
Map<String,Object> vars=new HashMap<>();
vars.put("authService", new AuthService());
ProcessInstance pi =     
    runtimeService.startProcessInstanceByKey(de.getKey(),vars);
List<Task> list2 = taskService.createTaskQuery().taskCandidateUser("user1").list();
List<Task> list2 = taskService.createTaskQuery().taskCandidateUser("user2").list();

猜你喜欢

转载自blog.csdn.net/ldqchat/article/details/81866073
今日推荐