Activiti 核心API 处理一个流程在部署启动以及后面的一系列的操作都是围绕着这几个核心API来完成的。首先这几个API中最重要的是ProcessEngine流程引擎,其他几个API都是通过流程引擎来创建的。
创建processEngine流程引擎对象的方法也有很多,可以参照这篇点击打开链接博客。这里讲的是更为便捷的一种创建方式,直接使用构造类来创建。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
我们可以通过读取源码,看这种方式的创建流程引擎的方式,其实也是通过读取配置文件来创建,只是这里已经帮我们完成了这不操作,不需要我再去Build,直接返回的就是流程引擎对象。ProcessEngines会扫描所有activiti.cfg.xml
和 activiti-context.xml
文件。 对于activiti.cfg.xml
文件,流程引擎会使用Activiti的经典方式构建:ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine()
. 对于activiti-context.xml
文件,流程引擎会使用Spring方法构建:先创建一个Spring的环境, 然后通过环境获得流程引擎。
这里看的已经很清楚了,创建完成流程引擎我们就可以来完成一下几个核心API的创建。
RepositoryService |
管理流程定义 |
RuntimeService |
执行管理,包括启动、推进、删除流程实例等操作 |
TaskService |
任务管理 |
HistoryService |
历史管理(执行完的数据的管理) |
IdentityService |
组织机构管理 |
FormService |
一个可选择的服务 |
ManagerService |
管理服务 |
其中使用最多的主要是前面的五种,下面通过每个API的使用例子来阐述其作用。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
1) 产生方式
processEngine.getRepositoryService()//流程定义和部署对象相关的service
2) 可以产生DeploymentBuilder,用来定义流程部署的相关参数
Deployment deployment= processEngine.getRepositoryService()//流程定义和部署对象相关的service
.createDeployment()//创建部署对象
.name("第一条流程")
3) 删除流程定义
Deployment deployment= processEngine.getRepositoryService()//流程定义和部署对象相关的service
.deleteDeployment(deploymentId)//删除部署对象
ProcessInstance processInstance = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的service
.startProcessInstanceByKey("key");//使用流程定义Key启动,key对应bpmn文件中的id,key启动默认是最新版本的流程定义
2)查看流程是否结束
ProcessInstance processInstance = processEngine.getRuntimeService()//正在执行的流程
.createProcessInstanceQuery()//创建流程实例查询对象
.processInstanceId("流程实例ID")
.singleResult();
//如果为空,流程已结束
if(processInstance==null){
System.out.println("流程已结束");
}else{
System.out.println("流程未结束");
}
List list = processEngine.getTaskService()//与正在执行任务相关的service
.createTaskQuery()//创建任务查询对象
.taskAssignee("当前处理人")
.list();
2)完成任务
processEngine.getTaskService()//任务相关service
.complete("108");
System.out.println("---任务已完成---");
1)查询历史流程实例
/**查询历史流程实例*/
@Test
public void findHistoryProcessInstance(){
String processInstanceId = "2101";
HistoricProcessInstance hpi = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
.createHistoricProcessInstanceQuery()//创建历史流程实例查询
.processInstanceId(processInstanceId)//使用流程实例ID查询
.orderByProcessInstanceStartTime().asc()
.singleResult();
2)查询历史活动
List list = processEngine.getHistoryService()//
.createHistoricActivityInstanceQuery()//创建历史活动实例的查询
.processInstanceId(processInstanceId)//
.orderByHistoricActivityInstanceStartTime().asc()//
.list();
3)查询历史任务
List list = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
.createHistoricTaskInstanceQuery()//创建历史任务实例查询
.processInstanceId(processInstanceId)//
.orderByHistoricTaskInstanceStartTime().asc()
.list();
4)查询历史流程变量
List list = processEngine.getHistoryService()//
.createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询对象
.processInstanceId(processInstanceId)//
.list();
就是组织管理系,这里面很少用Activiti,因为提供的字段太少,一般的项目中会自己维护一套组织机构的关系表。
/**在部署流程定义和启动流程实例的中间,设置组任务的办理人,向Activiti表中存放组和用户的信息*/
IdentityService identityService = processEngine.getIdentityService();//认证:保存组和用户信息
identityService.saveGroup(new GroupEntity("部门经理"));//建立组
identityService.saveGroup(new GroupEntity("总经理"));//建立组
identityService.saveUser(new UserEntity(“小张”));//建立用户
identityService.saveUser(new UserEntity("小李")); //建立用户
identityService.saveUser(new UserEntity("小王")); //建立用户
identityService.createMembership("小张", "部门经理");//建立组和用户关系
identityService.createMembership("小李", "部门经理");//建立组和用户关系
identityService.createMembership(“小王”, “总经理”);//建立组和用户关系
表结构介绍
act_id_group:角色组表
act_id_user:用户表:
act_id_membership:用户角色表
指定组任务的办理人,查询组任务
String userId =“小张”;//小张,小李可以查询结果,小王不可以,因为他不是部门经理角色
List
.createTaskQuery()//
.taskCandidateUser(userId)//指定组任务查询
.list();
在使用Activiti的定制环境中基本上不会用到。 它可以查询数据库的表和表的元数据。另外,它提供了查询和管理异步操作的功能。 Activiti的异步操作用途很多,比如定时器,异步操作, 延迟暂停、激活,等等。
*注:文中详细源码例子,可以到github上下载:ActivitiDemo GitHub地址