5.3启动一个流程实例
流程定义部署在 activiti 后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流程可以使用了。
针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于 java 类与 java 对象的关系,类定义好后需要 new 创建一个对象使用,当然可以 new 多个对象。对于请假申请流程,张三发起一个请假申请单需要启动一个流程实例,请假申请单发起一个请假单也需要启动一个流程实例。
代码如下:
代码语言:javascript复制// 启动一个流程实例
@Test
public void startProcessInstance() {
// 获取RunTimeService
RuntimeService runtimeService =
processEngine.getRuntimeService();
// 根据流程定义key启动流程
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey("myholiday01");
System.out.println(" 流程定义 id : "
processInstance.getProcessDefinitionId());
System.out.println("流程实例id:" processInstance.getId());
System.out.println(" 当前活动 Id : "
processInstance.getActivityId());
}
5.4任务查询
流程启动后,各各任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务。
代码语言:javascript复制// 查询当前个人待执行的任务
@Test
public void findPersonalTaskList() {
// 任务负责人
String assignee = "zhangsan";
// 创建TaskService
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery()//
.processDefinitionKey("myholiday01")//
.taskAssignee(assignee)//只查询该任务负责人的任务
.list();
for (Task task : list) {
System.out.println(" 流 程 实 例 id : "
task.getProcessInstanceId());
System.out.println("任务id:" task.getId());
System.out.println("任务负责人:" task.getAssignee());
System.out.println("任务名称:" task.getName());
}
}
5.5任务处理
任务负责人查询待办任务,选择任务进行处理,完成任务。
代码语言:javascript复制// 完成任务
@Test
public void completTask() {
//任务id
String taskId = "8305";
// 创建TaskService
TaskService taskService = processEngine.getTaskService();
//完成任务
taskService.complete(taskId);
System.out.println("完成任务id=" taskId);
}