// jbpm4_hist_procinst,历史信息表
@Test
public void startProcessInstance() {
// 使用指定key的最新版本的流程定义启动流程实例,返回一个实例流程对象
ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey(“test”);
System.out.println(“id=” + pi.getId()//
-
“, state=” + pi.getState()//
-
“, processDefinitionId=” + pi.getProcessDefinitionId());
}
b) 启动流程实例,并设置一些流程变量
Map<String, Object> variables = new HashMap<String, Object>();
variables.put(“申请人”, “张三”);
variables.put(“报销金额”, 1000.00);
// 启动流程实例,并设置一些流程变量
ProcessInstance pi = processEngine.getExecutionService().startProcessInstanceByKey(processDefinitionKey, variables);
2.向后执行一步(Signal)
a) 向后执行一步,使用唯一的outcome离开活动
processEngine.getExecutionService().signalExecutionById(executionId);
b) 向后执行一步,使用唯一的outcome离开活动,并设置一些流程变量
// 准备流程变量
Map<String, Object> variables = new HashMap<String, Object>();
variables.put(“审批结果”, “同意”);
processEngine.getExecutionService().signalExecutionById(executionId, variables);
c) 向后执行一步,使用指定的outcome离开活动
String outcome= “to end1”;
processEngine.getExecutionService().signalExecutionById(executionId, outcome);
d) 向后执行一步,使用指定的outcome离开活动,并设置一些流程变量
String outcome= “to end1”;
Map<String, Object> variables = new HashMap<String, Object>();
variables.put(“审批结果”, “同意”);
processEngine.getExecutionService().signalExecutionById(executionId, outcome, variables);
3.查询任务
a) 查询个人任务列表
// 查询我的未办理完的任务列表
// jbpm4_task,正在执行的信息表
// jbpm4_hist_task,历史信息表
@Test
public void findMyTaskList() {
String userId = “员工”;
//String userId = “部门经理”;
//String userId = “总经理”;
// 方式1.查询我所有未办理的任务的列表
// List list = processEngine.getTaskService().findPersonalTasks(userId);
// 方式2.分页的查询
List list = processEngine.getTaskService()//
.createTaskQuery()//
.assignee(userId)//
.page(0, 100)
.list();
// 显示
System.out.println(“============== 【” + userId + “】的未办理的任务列表 =============”);
for (Task t : list) {
System.out.println(“id=” + t.getId()//
-
“, name=” + t.getName()// 任务的名称
-
“, assignee=” + t.getAssignee()// 任务的办理人
-
“, createTime=” + t.getCreateTime()// 任务的创建时间
-
“, executionId=” + t.getExecutionId()); // 所属的执行对象的id
}
}
b) 查询组任务列表
方式1:
taskService.findGroupTasks(userId);
方式2:
List list = processEngine.getTaskService()//
.createTaskQuery()//
.candidate(userId)//
.list();
4.办理任务
a) 正常完成任务
@Test
public void completeTask() {
String taskId = “180009”;
//普通的方法
processEngine.getTaskService().completeTask(taskId);
//指定下一步的方法
processEngine.getTaskService().completeTask(taskId, outcome);
//设置流程变量的方法
processEngine.getTaskService().completeTask(taskId, outcome, variables);
}
b) 自行控制完成任务后是否向后流转(少用)
String taskId = “120001”;
// 1,设置为false代表:办理完任务后不向后移动(默认为true)
TaskImpl taskImpl = (TaskImpl) processEngine.getTaskService().getTask(taskId);
taskImpl.setSignalling(false);
// 2,办理完任务
processEngine.getTaskService().completeTask(taskId);
5.拾取任务(少用)
a) TaskService.takeTask(taskId, userId),拾取组任务到个人任务列表中,如果任务有assignee,则会抛异常。
b) processEngine.getTaskService().assignTask(taskId, userId),转交任务给其他人,(如果任务有assignee,则执行这个方法代表重新分配。也可以把assignee设为null表示组任务没有人办理了)
6.设置与获取流程变量
a) 方式1:根据 executionId 设置或获取流程变量
ExecutionService.setVariable(executionId, name, value);
Object obj = executionService.getVariable(executionId, “请假人”);