之前已经介绍了JBPM的部署对象,以及部署后对流程的一些管理。现在就开始介绍任务的执行以及流转问题
一、启动流程实例
通过调用流程执行接口来获取启动流程的方法,核心代码如下:
public void testStartProcess() throws Exception { ProcessInstance pi=processEngine.getExecutionService()// .startProcessInstanceByKey("test");// System.out.println("流程实例启动成功:id="+pi.getId()// +",state="+pi.getState()// +",processDefinitionId="+pi.getProcessDefinitionId()); }
其中,启动方法可分为根据Id和Key来启动两种,每一种方法又有四种不同的参数类型,分别为:
//根据流程定义的id查询 startProcessInstanceById(String processDefinitionId) //根据流程定义的id和流程实例的关键字 startProcessInstanceById(String processDefinitionId, String processInstanceKey) //根据流程定义的id、一个或多个流程变量 startProcessInstanceById(String processDefinitionId, Map<String, ?> variables)// //根据流程定义的id、一个或多个流程变量、流程实例的关键字 startProcessInstanceById(String processDefinitionId, Map<String, ?> variables, String processInstanceKey) //根据流程定义的关键字 startProcessInstanceByKey(String processDefinitionKey) //根据流程定义的关键字、流程实例的关键字 startProcessInstanceByKey(String processDefinitionKey, String processInstanceKey) //根据流程定义的关键字、一个或多个变量 startProcessInstanceByKey(String processDefinitionKey, Map<String, ?> variables) //根据流程定义的关键字、一个或多个流程变量、流程实例的关键字 startProcessInstanceByKey(String processDefinitionKey, Map<String, ?> variables, String processInstanceKey)
二、查看个人任务列表
流程启动之后,在自己的任务列表会显示相应的当前任务。具体代码:
public void testTaskList() throws Exception { String userId="victor"; //查询 List<Task> taskList=processEngine.getTaskService().findPersonalTasks(userId); //显示 System.out.println("=========【"+userId+"】的个人任务列表============"); for(Task task:taskList){ System.out.println("id="+task.getId()// +",name="+task.getName()// +",assignee="+task.getAssignee()// +",crateTime="+task.getCreateTime()// +",executionId="+task.getExecutionId()); } }
主要是通过调用任务服务接口,获取查询的方法。上述代码使用的是查询个人任务的方法,还有一种方法是,查询指定用户的一组任务findGroupTasks(String userId)。
三、办理任务
任务办理也是调用任务服务接口,获取completeTask方法,根据不同的参数会有不同的方法实现。其中一种代码如下:
public void testCompleteTask() throws Exception {//根据指定的任务id,办理任务 String taskId="110002"; processEngine.getTaskService().completeTask(taskId); }
四、删除任务
任务的删除与流程的删除调用的接口不同,但是方法类型却是相同的,也包括两种:
deleteTask,删除当前任务,与该任务相关的历史信息仍然存在数据库中
deleteTaskCascade,删除当前任务,以及与之相关的历史信息
可以根据不同的需求,选择合适的方法。
这次主要说了一下任务管理的基本操作,这块内容其实还有很多,还有待后边的继续深入研究与学习。通过这次的学习,对工作流任务的流转认识加深,另一方面也激发了自己对源码的研究,从源码中其实可以看到很多之前已经存在的思想,只不过没有注意罢了。