文章目录
- 8.5 启动实例
- 8.5.1 按照key启动(不加参数)
- 8.5.2 按照key启动(加入参数)
- 8.5.3 启动流程实例的说明
- 8.6 查询任务
- 8.6.1 查询所有未办理任务
- 8.6.2 查询个人未办理任务
- 8.6.3 查询个人的待办组任务
8.5 启动实例
8.5.1 按照key启动(不加参数)
@Test // 启动 -- 简单的启动
public void startProcessInstace(){
ProcessEngine processEngine = Configuration.getProcessEngine();
// 会启动该key下的最新版本的流程
ProcessInstance instance = processEngine.getExecutionService().startProcessInstanceByKey("test");
System.out.println(instance.getId());
System.out.println(instance.getName());
System.out.println(instance.getIsProcessInstance());
System.out.println(instance.getKey());
System.out.println(instance.getState());
}
注意:这里出现了 key 的概念。回顾我们在上一步画流程图的时候,并没有指定key,但是 我们在创建流程图的时候对文件进行了命名,如果不指定key,那么默认的key就和name同名。
执行上面的启动代码后,控制台打印如下:
8.5.2 按照key启动(加入参数)
// 启动 -- 并加入一些参数
@Test
public void startProcessInstance(){
String processKey = "test";
Map<String, String> variableMap = new HashMap<String, String>();
String username = "JackMa";// 申请人 这里的数据是从服务器过去当前登录人
variableMap.put("申请人", username);
// 实际数据从表单获取
variableMap.put("申请事由", "扩展东南亚业务");
variableMap.put("申请金额", String.valueOf(200000));// 前端填写必须是数字,后台转String
// 将date转换为字符串
variableMap.put("申请时间", DateUtil.convertDate2String(new Date(), null));
variableMap.put("备注", "XXX");
variableMap.put("最新进度",username+"-提交了申请");
variableMap.put("状态", "进行中...");
ProcessEngine processEngine = Configuration.getProcessEngine();
ProcessInstance instance = processEngine.getExecutionService().startProcessInstanceByKey(processKey, variableMap);
System.out.println(instance.getId());
}
执行启动代码,控制台打印如下:
此时 数据库中 jbpm4_variable 表就会有以下数据:
8.5.3 启动流程实例的说明
API也提供了按照id的启动方式,但是在实际业务中用不到。(因为不会去启动一个作废的审批流程)
8.6 查询任务
8.6.1 查询所有未办理任务
// 查询所有未办理的任务列表
@Test
public void getAllTask(){
List<Task> list = processEngine.getTaskService()
.findPersonalTasks(null);
for(Task task : list){
System.out.println("id="+task.getId() +
",name=" + task.getName() +
",assignee="+task.getAssignee() +
",createTime="+task.getCreateTime());
}
}
上述方法会查询出所有未办理的任务:
8.6.2 查询个人未办理任务
// 查询我的未办理的任务列表
@Test
public void getTaskByName(){
String userName = "张三";
List<Task> list = processEngine.getTaskService().findPersonalTasks(userName);
for(Task task : list){
System.out.println("id="+task.getId() +
",name="+task.getName() +
",assignee="+task.getAssignee() +
",createTime="+task.getCreateTime());
System.out.println(task.getExecutionId());
}
}
查询结果:
可以看出:张三 这个用户有两条未办理的任务。其中executionId去掉 " key." 就会得到 一个新的字段。
例如:executionId=test.1530001 ----> 153001 会对应到 jbpm4_variable 表中的 EXECUTION 字段 , 通过该字段又能得到该表下的参数信息 (该参数信息是在启动实例的时候指定的,后续该数据将会是从前台申请表单拿到,并在启动时加入)。
8.6.3 查询个人的待办组任务
目前为止我们还没有指定组任务(组任务在 8.10),所以该处查询暂时会是空。
// 找到个人 的 分组 任务
@Test
public void findGroupTasksByUser(){
String user = "小明";
List<Task> tasks = processEngine.getTaskService()
.createTaskQuery()
.candidate(user)
.list();
System.out.println(tasks.size());
for(Task task : tasks){
System.out.println(task.getId() + task.getName() + task.getAssignee());
}
}