初学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在流程创建和启动时使用
//Map<String,Object> variables
//executionService.setVariable(variables);//设置流程变量。
executionService.startProcessInstanceById(id, map);
第4步、IdentityService对象向的方法可向流程中添加参与者,用户组,用户组与参与者的对应
第5步、TaskService对象 获取参与者的任务列表
List<Task> listTasks=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
List<ProcessDefinition> pdList = repositoryService.createProcessDefinitionQuery().list();
//流程实例List
List<ProcessInstance> piList = executionService.createProcessInstanceQuery().list();
//任务List
List<Task> taskList = taskService.findPersonalTasks(userName);
//历史流程实例List
List<HistoryProcessInstance> historyList = processEngine.getHistoryService().createHistoryProcessInstanceQuery().list();