初学JBPM,简单总结基本的开发流程如下:
第1步、初始化ProcessEngine
ProcessEngine processEngine = new Configuration().buildProcessEngine();
第2步、获得RepositoryService,并读取资源,发布管理流程
RepositoryService repositoryService = processEngine.getRepositoryService(); //repositoryService.createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy(); ZipInputStream zis = new ZipInputStream(this.getClass().getResourceAsStream("/leave.zip")); repositoryService.createDeployment() .addResourcesFromZipInputStream(zis).deploy();
第3步、获得ExecutionService,并调用其startProcessInstanceBy***()方法启动一个流程实例
ExecutionService executionService = processEngine .getExecutionService(); //可提供参数: Map map = new HashMap(); map.put("owner",(String)session.getAttribute("userName")); //也可使用variables提供变量,variables在流程创建和启动时使用 //Mapvariables //executionService.setVariable(variables);//设置流程变量。 executionService.startProcessInstanceById(id, map);
第4步、IdentityService对象向的方法可向流程中添加参与者,用户组,用户组与参与者的对应
第5步、TaskService对象 获取参与者的任务列表
ListlistTasks=taskService.getTask(taskId); task=listTasks.get(0); String taskId = task.getId();
第6步、调用TaskService的completeTask方法,根据taskId执行任务(可选:可调用setVariables方法设置参数):
//设置参数 Map map = new HashMap(); map.put("day",day); map.put("reason",reason); ts.setVariables(taskId,map); //执行任务 ts.completeTask(taskId);
PS:利用Query方法获得各种所需列表的例子:
//流程定义List ListpdList = repositoryService.createProcessDefinitionQuery().list(); //流程实例List List piList = executionService.createProcessInstanceQuery().list(); //任务List List taskList = taskService.findPersonalTasks(userName); //历史流程实例List List historyList = processEngine.getHistoryService().createHistoryProcessInstanceQuery().list();