【八】用户与流程

一、个人任务

1、流程图

2、分配个人任务方式一(直接指定办理人)

3、分配个人任务方式二(使用流程变量)

(1)部署

(2)启动并指定下一个任务的办理人

(3)查询个人任务

(4)完成事务并指定下一个任务的办理人

4、分配个人任务方式三(使用类)

(1)创建一个监听类

(2)修改流程图

5、小结

二、用户组任务

1、流程图

2、分配组任务方式一(直接指定办理人)

(1)修改流程图

(2)部署

(3)相关代码

3、分配组任务方式二(使用流程变量)

(1)修改流程图

(2)相关代码

4、分配组任务方式三(使用类)

(1)创建监听器

(2)修改流程图

(3)相关代码

三、Activiti总结


一、个人任务

1、流程图

2、分配个人任务方式一(直接指定办理人)

缺点 办理人固定了,但是实际开发中,办理人是不固定的

3、分配个人任务方式二(使用流程变量)

(1)部署

@Test
public void deployProcess() {
	//得到流程部署的service
	RepositoryService repositoryService = this.processEngine.getRepositoryService();
	Deployment deploy = repositoryService.createDeployment().name("请假流程001")
	.addClasspathResource("HelloWorld.bpmn.xml")
	.addClasspathResource("HelloWorld.png")
	.deploy();
	System.out.println("部署成功:流程部署ID:"+deploy.getId());
}

(2)启动并指定下一个任务的办理人

/**
 * 启动流程并指定下一个任务的办理人
 */
@Test
public void startProcess() {
	RuntimeService runtimeService = this.processEngine.getRuntimeService();
	String processDefinitionKey="HelloWorld";
	Map<String,Object> variables=new HashMap<>();
	variables.put("username", "张三");
	runtimeService.startProcessInstanceByKey(processDefinitionKey,variables);
	System.out.println("流程启动成功");
}

(3)查询个人任务

/**
 * 查询任务
 */
@Test
public void findTask() {
	TaskService taskService = this.processEngine.getTaskService();
	String assignee="李四";
	List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
	if(null!=list&&list.size()>0) {
		for (Task task : list) {
			System.out.println("任务ID:"+task.getId());
			System.out.println("流程实例ID:"+task.getProcessInstanceId());
			System.out.println("执行实例ID:"+task.getExecutionId());
			System.out.println("流程定义ID:"+task.getProcessDefinitionId());
			System.out.println("任务名称:"+task.getName());
			System.out.println("任务办理人:"+task.getAssignee());
			System.out.println("################################");
		}
	}
}

(4)完成事务并指定下一个任务的办理人

/**
 * 办理任务
 */
@Test
public void completeTask() {
	TaskService taskService = this.processEngine.getTaskService();
	String taskId="12505";
	Map<String,Object> variables=new HashMap<>();
	variables.put("username", "李四");
	taskService.complete(taskId,variables);
	System.out.println("任务完成");
}

4、分配个人任务方式三(使用类)

(1)创建一个监听类

作用:当任务到达相应的节点时,会触发监听,让监听器去指定下个任务的办理人

(2)修改流程图

5、小结

个人任务及三种分配方式:

    1,在taskProcess.bpmn中直接写 assignee=“张三丰"

    2,在taskProcess.bpmn中写 assignee=“#{userID}”,变量的值要是String的。

         使用流程变量指定办理人

    3,使用TaskListener接口,要使类实现该接口,在类中定义,

         delegateTask.setAssignee(assignee);指定个人任务的办理人

二、用户组任务

1、流程图

2、分配组任务方式一(直接指定办理人)

(1)修改流程图

(2)部署

@Test
public void deployProcess() {
	// 得到流程部署的service
	RepositoryService repositoryService = this.processEngine.getRepositoryService();
	Deployment deploy = repositoryService.createDeployment().name("请假流程001").addClasspathResource("HelloWorld.bpmn.xml")
			.deploy();
	System.out.println("部署成功:流程部署ID:" + deploy.getId());
}

(3)相关代码

/**
 * 组任务使用流程变量去设置
 */
public class GroupTask01 {

	// 得到流程引擎
	private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

	@Test
	public void deployProcess() {
		// 得到流程部署的service
		RepositoryService repositoryService = this.processEngine.getRepositoryService();
		Deployment deploy = repositoryService.createDeployment().name("请假流程001").addClasspathResource("HelloWorld.bpmn")
				.addClasspathResource("HelloWorld.png").deploy();
		System.out.println("部署成功:流程部署ID:" + deploy.getId());
	}

	/**
	 * 启动流程
	 */
	@Test
	public void startProcess() {
		RuntimeService runtimeService = this.processEngine.getRuntimeService();
		String processDefinitionKey = "HelloWorld";
		runtimeService.startProcessInstanceByKey(processDefinitionKey);
		System.out.println("流程启动成功");
	}

	/**
	 * 查询组任务
	 */
	@Test
	public void findGroupTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String candidateUser = "小B";
		List<Task> list = taskService.createTaskQuery().taskCandidateUser(candidateUser).list();
		if (null != list && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
				System.out.println("执行实例ID:" + task.getExecutionId());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
				System.out.println("任务名称:" + task.getName());
				System.out.println("任务办理人:" + task.getAssignee());
				System.out.println("################################");
			}
		}
	}

	/**
	 * 查询任务
	 */
	@Test
	public void findTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String assignee = "小A";
		List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
		if (null != list && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
				System.out.println("执行实例ID:" + task.getExecutionId());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
				System.out.println("任务名称:" + task.getName());
				System.out.println("任务办理人:" + task.getAssignee());
				System.out.println("################################");
			}
		}
	}

	/**
	 * 任务拾取
	 */
	@Test
	public void claim() {
		String taskId="2504";
		TaskService taskService = this.processEngine.getTaskService();
		taskService.claim(taskId, "小A");
		System.out.println("任务拾取成功");
	}
	/**
	 * 任务回退
	 */
	@Test
	public void claimBack() {
		String taskId="2504";
		TaskService taskService = this.processEngine.getTaskService();
		taskService.setAssignee(taskId, null);
		System.out.println("任务回退成功");
	}
	
    //5 查询组任务成员列表
    @Test
    public void findGroupUser(){
        String taskId = "2504";
        List<IdentityLink> list = processEngine.getTaskService()//
                        .getIdentityLinksForTask(taskId);
         //List<IdentityLink> list = processEngine.getRuntimeService()//
        //                .getIdentityLinksForProcessInstance(instanceId);
        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("TYPE="+identityLink.getType());
            System.out.println("######################");
        }
    }

	/**
	 * 办理任务
	 */
	@Test
	public void completeTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String taskId = "5002";
		taskService.complete(taskId);
		System.out.println("任务完成");
	}
}

3、分配组任务方式二(使用流程变量)

(1)修改流程图

(2)相关代码

/**
 * 组任务使用流程变量去设置
 */
public class GroupTask01 {

	// 得到流程引擎
	private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

	@Test
	public void deployProcess() {
		// 得到流程部署的service
		RepositoryService repositoryService = this.processEngine.getRepositoryService();
		Deployment deploy = repositoryService.createDeployment().name("请假流程001").addClasspathResource("HelloWorld.bpmn")
				.addClasspathResource("HelloWorld.png").deploy();
		System.out.println("部署成功:流程部署ID:" + deploy.getId());
	}

	/**
	 * 启动流程
	 */
	@Test
	public void startProcess() {
		RuntimeService runtimeService = this.processEngine.getRuntimeService();
		String processDefinitionKey = "HelloWorld";
		Map<String,Object> variables=new HashMap<>();
		variables.put("usernames", "小A,小B,小C,小D");
		runtimeService.startProcessInstanceByKey(processDefinitionKey,variables);
		System.out.println("流程启动成功");
	}

	/**
	 * 查询组任务
	 */
	@Test
	public void findGroupTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String candidateUser = "小B";
		List<Task> list = taskService.createTaskQuery().taskCandidateUser(candidateUser).list();
		if (null != list && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
				System.out.println("执行实例ID:" + task.getExecutionId());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
				System.out.println("任务名称:" + task.getName());
				System.out.println("任务办理人:" + task.getAssignee());
				System.out.println("################################");
			}
		}
	}

	/**
	 * 查询任务
	 */
	@Test
	public void findTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String assignee = "小A";
		List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
		if (null != list && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
				System.out.println("执行实例ID:" + task.getExecutionId());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
				System.out.println("任务名称:" + task.getName());
				System.out.println("任务办理人:" + task.getAssignee());
				System.out.println("################################");
			}
		}
	}

	/**
	 * 任务拾取
	 */
	@Test
	public void claim() {
		String taskId="2505";
		TaskService taskService = this.processEngine.getTaskService();
		taskService.claim(taskId, "小A");
		System.out.println("任务拾取成功");
	}
	/**
	 * 任务回退
	 */
	@Test
	public void claimBack() {
		String taskId="2504";
		TaskService taskService = this.processEngine.getTaskService();
		taskService.setAssignee(taskId, null);
		System.out.println("任务回退成功");
	}
	
    //5 查询组任务成员列表
    @Test
    public void findGroupUser(){
        String taskId = "2504";
        List<IdentityLink> list = processEngine.getTaskService()//
                        .getIdentityLinksForTask(taskId);
         //List<IdentityLink> list = processEngine.getRuntimeService()//
        //                .getIdentityLinksForProcessInstance(instanceId);
        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("TYPE="+identityLink.getType());
            System.out.println("######################");
        }
    }

	/**
	 * 办理任务
	 */
	@Test
	public void completeTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String taskId = "5002";
		taskService.complete(taskId);
		System.out.println("任务完成");
	}
}

4、分配组任务方式三(使用类)

(1)创建监听器

(2)修改流程图

(3)相关代码

/**
 * 组任务使用监听器去设置
 * 
 * @author LJH
 *
 */
public class GroupTask01 {

	// 得到流程引擎
	private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

	@Test
	public void deployProcess() {
		// 得到流程部署的service
		RepositoryService repositoryService = this.processEngine.getRepositoryService();
		Deployment deploy = repositoryService.createDeployment().name("请假流程001").addClasspathResource("HelloWorld.bpmn")
				.addClasspathResource("HelloWorld.png").deploy();
		System.out.println("部署成功:流程部署ID:" + deploy.getId());
	}

	/**
	 * 启动流程
	 */
	@Test
	public void startProcess() {
		RuntimeService runtimeService = this.processEngine.getRuntimeService();
		String processDefinitionKey = "HelloWorld";
		runtimeService.startProcessInstanceByKey(processDefinitionKey);
		System.out.println("流程启动成功");
	}

	/**
	 * 查询组任务
	 */
	@Test
	public void findGroupTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String candidateUser = "小B";
		List<Task> list = taskService.createTaskQuery().taskCandidateUser(candidateUser).list();
		if (null != list && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
				System.out.println("执行实例ID:" + task.getExecutionId());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
				System.out.println("任务名称:" + task.getName());
				System.out.println("任务办理人:" + task.getAssignee());
				System.out.println("################################");
			}
		}
	}

	/**
	 * 查询任务
	 */
	@Test
	public void findTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String assignee = "小A";
		List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).list();
		if (null != list && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
				System.out.println("执行实例ID:" + task.getExecutionId());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
				System.out.println("任务名称:" + task.getName());
				System.out.println("任务办理人:" + task.getAssignee());
				System.out.println("################################");
			}
		}
	}

	/**
	 * 任务拾取
	 */
	@Test
	public void claim() {
		String taskId="2505";
		TaskService taskService = this.processEngine.getTaskService();
		taskService.claim(taskId, "小A");
		System.out.println("任务拾取成功");
	}
	/**
	 * 任务回退
	 */
	@Test
	public void claimBack() {
		String taskId="2504";
		TaskService taskService = this.processEngine.getTaskService();
		taskService.setAssignee(taskId, null);
		System.out.println("任务回退成功");
	}
	
    //5 查询组任务成员列表
    @Test
    public void findGroupUser(){
        String taskId = "2504";
        List<IdentityLink> list = processEngine.getTaskService()//
                        .getIdentityLinksForTask(taskId);
         //List<IdentityLink> list = processEngine.getRuntimeService()//
        //                .getIdentityLinksForProcessInstance(instanceId);
        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("TYPE="+identityLink.getType());
            System.out.println("######################");
        }
    }

	/**
	 * 办理任务
	 */
	@Test
	public void completeTask() {
		TaskService taskService = this.processEngine.getTaskService();
		String taskId = "5002";
		taskService.complete(taskId);
		System.out.println("任务完成");
	}
}

三、Activiti总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值