Activiti(14) - 工作流定义的角色组(了解)

1、流程图

    

流程图中任务节点的配置:


分配任务负责的组


    使用 candidategroups 属性指定任务负责组

    代码:

<userTask id=“usertask1” name=“审批” activiti:candidateGroups=“部门经理”>
</userTask>  

    其中部门经理表示一个用户组的角色

2、测试代码

        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	
	//部署流程定义,启动流程实例
	@Test
	public void testTask() throws Exception {
		// 1 发布流程
		InputStream inputStreamBpmn = this.getClass().getResourceAsStream("taskProcess.bpmn");
		InputStream inputStreamPng = this.getClass().getResourceAsStream("taskProcess.png");
		processEngine.getRepositoryService()//
						.createDeployment()//
						.addInputStream("userTask.bpmn", inputStreamBpmn)//
						.addInputStream("userTask.png", inputStreamPng)//
						.deploy();
		
		/**在部署流程定义和启动流程实例的中间,设置组任务的办理人,向Activity表中存放组和用户的信息*/
		IdentityService identityService = processEngine.getIdentityService();//认证:保存组和用户信息
		identityService.saveGroup(new GroupEntity("部门经理"));//建立组
		identityService.saveGroup(new GroupEntity("总经理"));//建立组
		identityService.saveUser(new UserEntity("小张"));
		identityService.saveUser(new UserEntity("小李"));
		identityService.saveUser(new UserEntity("小王"));
		identityService.createMembership("小张", "部门经理");//建立组和用户关系
		identityService.createMembership("小李", "部门经理");//建立组和用户关系
		identityService.createMembership("小王", "总经理");//建立组和用户关系

		
		// 2 启动流程
		ProcessInstance pi = processEngine.getRuntimeService()//
							.startProcessInstanceByKey("taskProcess");
		System.out.println("pid:" + pi.getId());
	}
	
	//查询我的个人任务列表
	@Test
	public void findMyTaskList(){
		String userId = "唐僧";
		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("assinee="+task.getCreateTime());
			System.out.println("executionId="+task.getExecutionId());
			
		}
	}
	
	//查询组任务列表
	@Test
	public void findGroupList(){
		String userId = "小李";//小张,小李可以查询结果,小王不可以,因为他不是部门经理
		List<Task> list = processEngine.getTaskService()//
		                .createTaskQuery()//
		                .taskCandidateUser(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("assinee="+task.getCreateTime());
			System.out.println("executionId="+task.getExecutionId());
			System.out.println("##################################");
			
		}
	}
	
	//查询组任务成员列表
	@Test
	public void findGroupUser(){
		String taskId = "4408";
		List<IdentityLink> list = processEngine.getTaskService()//
		                .getIdentityLinksForTask(taskId);
		for(IdentityLink identityLink:list ){
			System.out.println("userId="+identityLink.getUserId());
			System.out.println("taskId="+identityLink.getTaskId());
			System.out.println("piId="+identityLink.getProcessInstanceId());
			System.out.println("######################");
		}
	}
	
	//完成任务
	@Test
	public void completeTask(){
		String taskId = "5108";
		processEngine.getTaskService()//
					.complete(taskId);//
		System.out.println("完成任务");
	}
}

3、分配任务负责的组(IdentityService)

        
/**在部署流程定义和启动流程实例的中间,设置组任务的办理人,向Activiti表中存放组和用户的信息*/
IdentityService identityService = processEngine.getIdentityService();//认证:保存组和用户信息
identityService.saveGroup(new GroupEntity("部门经理"));//建立组
identityService.saveGroup(new GroupEntity("总经理"));//建立组
identityService.saveUser(new UserEntity(“小张”));//建立用户
identityService.saveUser(new UserEntity("小李")); //建立用户
identityService.saveUser(new UserEntity("小王")); //建立用户
identityService.createMembership("小张", "部门经理");//建立组和用户关系
identityService.createMembership("小李", "部门经理");//建立组和用户关系
identityService.createMembership(“小王”, “总经理”);//建立组和用户关系


表结构介绍
    act_id_group:角色组表
    act_id_user:用户表:
    act_id_membership:用户角色表
   

指定组任务的办理人,查询组任务
    String userId = “小张”;//小张,小李可以查询结果,小王不可以,因为他不是部门经理角色
    List<Task> list = processEngine.getTaskService()//
                                .createTaskQuery()//
                                .taskCandidateUser(userId)//指定组任务查询
                                  .list();

4、总结




猜你喜欢

转载自blog.csdn.net/qq_31784189/article/details/80886165
今日推荐