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()); } }