引用地址:http://blog.csdn.net/qiumuxia0921/article/details/50993703
上一篇博客中,都是比较基础的Activiti的设置,Assignee都是写死的,这样,强大的Activiti有不用写死的Assignee的功能,现在我们来实现Demo。
先看我们的目录:
同样的,我们的Activiti.cfg.xml文件和log4j.properties文件都在上一篇博客中,已经写好了。
一、画task.bpmn文件
我们在选中节点“审批”,properties--Listeners--New
点击New之后,是这样的:
当然这里我已经写好了一个TaskListenerImpl了,因此我这里,就会出现这个选项,选择就可以了,如果没有,我们来写Listener。
二、taskListenerimpl.java类
- <span style="font-size:18px;">package cn.itcast.k_personalTask02;
-
- import org.activiti.engine.delegate.DelegateTask;
- import org.activiti.engine.delegate.TaskListener;
-
- @SuppressWarnings("serial")
- public class TaskListenerImpl implements TaskListener {
-
-
- @Override
- public void notify(DelegateTask delegateTask) {
-
-
- delegateTask.setAssignee("灭绝师太");
- }
-
- }
- </span>
注:
我们可以看到,这里的类,一定要实现TaskListener(org.activiti.engine.delegate.TaskListener)接口,才可以。从写里面的方法notify方法,就可以在代码中置顶下一个办理人是谁了。
三、TaskTest.java类
- <span style="font-size:18px;">package cn.itcast.k_personalTask02;
-
- import java.io.InputStream;
- import java.util.List;
-
- import org.activiti.engine.ProcessEngine;
- import org.activiti.engine.ProcessEngines;
- import org.activiti.engine.repository.Deployment;
- import org.activiti.engine.runtime.ProcessInstance;
- import org.activiti.engine.task.Task;
- import org.junit.Test;
-
- public class TaskTest {
-
- ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
-
-
- @Test
- public void deploymentProcessDefinition_inputStream(){
- InputStream inputStreamBpmn = this.getClass().getResourceAsStream("task.bpmn");
- InputStream inputStreamPng = this.getClass().getResourceAsStream("task.png");
- Deployment deployment = processEngine.getRepositoryService()
- .createDeployment()
- .name("任务")
- .addInputStream("task.bpmn", inputStreamBpmn)
- .addInputStream("task.png", inputStreamPng)
- .deploy();
- System.out.println("部署ID:"+deployment.getId());
- System.out.println("部署名称:"+deployment.getName());
- }
-
-
- @Test
- public void startProcessInstance(){
-
- String processDefinitionKey = "task";
- ProcessInstance pi = processEngine.getRuntimeService()
- .startProcessInstanceByKey(processDefinitionKey);
- System.out.println("流程实例ID:"+pi.getId());
- System.out.println("流程定义ID:"+pi.getProcessDefinitionId());
- }
-
-
- @Test
- public void findMyPersonalTask(){
- String assignee = "张翠山";
- List<Task> list = processEngine.getTaskService()
- .createTaskQuery()
-
- .taskAssignee(assignee)
-
-
-
-
-
- .orderByTaskCreateTime().asc()
-
-
-
-
- .list();
- if(list!=null && list.size()>0){
- for(Task task:list){
- System.out.println("任务ID:"+task.getId());
- System.out.println("任务名称:"+task.getName());
- System.out.println("任务的创建时间:"+task.getCreateTime());
- System.out.println("任务的办理人:"+task.getAssignee());
- System.out.println("流程实例ID:"+task.getProcessInstanceId());
- System.out.println("执行对象ID:"+task.getExecutionId());
- System.out.println("流程定义ID:"+task.getProcessDefinitionId());
- System.out.println("########################################################");
- }
- }
- }
-
-
- @Test
- public void completeMyPersonalTask(){
-
- String taskId = "5804";
- processEngine.getTaskService()
- .complete(taskId);
- System.out.println("完成任务:任务ID:"+taskId);
- }
-
-
- @Test
- public void setAssigneeTask(){
-
- String taskId = "5804";
-
- String userId = "张翠山";
- processEngine.getTaskService()
- .setAssignee(taskId, userId);
- }
-
- }
- </span>
注:
我们可以看到代码,跟Activiti系列(一)中的代码一模一样,方法什么的都没有变,但是我们在测试的是会后,就会发现,startProcessInstance()启动流程实例的时候,就会调用TaskListenerImpl中的notify方法,这个时候,就会指定了下一个Assignee。