JBPM为我们提供了一系列管理流程的服务。从定义流程,到实例化流程定义,流程实例执行过程中,对流程的管理,流程结束后,纳入历史流程,进行管理。JBPM的流程管理,提供了完整的API,提高了流程执行的效率。
JBPM提供的服务API为我们实现了:
(1)流程部署
(2)流程实例
(3)流程任务
(4)流程历史
ProcessEngine提供了6个服务API。ProcessEngine是由Configuration类构建的,即工作流引擎根据配置产生。
(1)RepositoryService——流程资源服务的接口。提供对流程定义的部署、查询、删除等操作
(2)ExecutionService——流程执行服务的接口。提供启动流程实例、“执行”推进、设置流程变量等操作。
(3)ManagementService——流程管理控制服务的接口。
(4)TaskService——任务服务接口。提供对任务的创建、提交、查询、保存、删除等操作。
(5)HistoryService——流程历史服务接口。提供对历史流程实例、历史活动实例等记录的查询。
(6)IdentityService——身份认证服务的接口。提供对流程用户、用户组以及组成员关系的相关服务。
private RepositoryService repositoryService;//部署流程服务
private ExecutionService executionService;//流程执行服务
private TaskService taskService;//任务服务
private HistoryService historyService;//历史服务
private ManagementService managementService;//流程管理服务
private IdentityService identityService;//身份认证服务
ProcessEngineprocessEngine = Configuration.getProcessEngine();
repositoryService=processEngine.getRepositoryService();
executionService=processEngine.getExecutionService();
taskService=processEngine.getTaskService();
historyService=processEngine.getHistoryService();
managementService=processEngine.getManagementService();
identityService=processEngine.getIdentityService();
}
1,部署流程定义
public void deploy(){
repositoryService.createDeployment().addResourceFromClasspath("task.jpdl.xml").deploy()
}
2,启动流程实例
public voidcreateInstance() {
ProcessInstanceprocessInstance = executionService.startProcessInstanceByKey("task");
print("流程实例ID", processInstance.getId());
}
3,获取个人任务
public void getPersonalTask(StringuserId) {
List<Task>tasks=taskService.findPersonalTasks(userId);//根据办理人名称获取个人任务
print("任务数量",tasks.size());
print("任务名称", tasks.get(0).getActivityName());
print("任务ID",tasks.get(0).getId());
}
4,获取组任务
public void getGroupTasks(String userId) {
List<Task> taskList =processEngine.getTaskService().findGroupTasks(userId);//根据办理人名称获取组任务
}
5,分配任务
public void assinTask(String taskId,String userId){
taskService.assignTask(taskId, userId);//将任务Id为taskId的任务分配给userId
}
6,拾取任务
public void taskTask(String taskId,String userId){
taskService.takeTask(taskId, userId);//用户userId拾取任务taskId
}
5,获取当前任务
public void getCurrentTask(String processInstanceId) { Stringname=executionService.createProcessInstanceQuery().processInstanceId(processInstanceId).uniqueResult().findActiveActivityNames().toString();
//根据流程实例Id获取当前正在执行的任务
print("当前节点名称:", name);
}
6,完成任务
public void completeTask(String taskId) {
taskService.completeTask(taskId);//根据任务Id,完成该任务
}
......
JBPM 提供了整个流程管理的Service API,使一个流程实例走完它的整个生命周期过程。JBPM 提供的API几乎完美,当然也有些许不够完善的地方,但是足够应用了。要想熟练使用JBPM为我们工作,熟悉API是第一步。
目前对高校中JBPM的应用安排,第一阶段:完成几个demo,目的是熟悉API;第二阶段:结合高校中具体业务,结合JBPM,完成几个实现效果;第三阶段:依据业务中JBPM的应用,对公共部分进行抽象;第四阶段:研究回退、会签、自由流;第五阶段:修正、完善;第六阶段:应用;第七阶段:维护、完善
目前处于第二三阶段,即,起步+提升阶段。