Activiti 核心API详解

一、API介绍 流程引擎创建方式

      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的环境, 然后通过环境获得流程引擎。

Activiti 核心API详解_第1张图片

Activiti 核心API详解_第2张图片

这里看的已经很清楚了,创建完成流程引擎我们就可以来完成一下几个核心API的创建。

RepositoryService

管理流程定义

RuntimeService

执行管理,包括启动、推进、删除流程实例等操作

TaskService

任务管理

HistoryService

历史管理(执行完的数据的管理)

IdentityService

组织机构管理

FormService

一个可选择的服务

ManagerService

 管理服务

二、API详解  

其中使用最多的主要是前面的五种,下面通过每个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();
Activiti 核心API详解_第3张图片

2.1 RepositoryService 

是Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。

1)     产生方式

processEngine.getRepositoryService()//流程定义和部署对象相关的service

2)     可以产生DeploymentBuilder,用来定义流程部署的相关参数

Deployment deployment=	processEngine.getRepositoryService()//流程定义和部署对象相关的service
		.createDeployment()//创建部署对象
		.name("第一条流程")

3)     删除流程定义

Deployment deployment=	processEngine.getRepositoryService()//流程定义和部署对象相关的service
		.deleteDeployment(deploymentId)//删除部署对象
	

2.2 RuntimeService 流程服务类

      
  1) 启动流程实例

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("流程未结束");
		}

2.3 TaskService 任务服务类

1)任务相关操作
List list = processEngine.getTaskService()//与正在执行任务相关的service
		.createTaskQuery()//创建任务查询对象
		.taskAssignee("当前处理人")
		.list();

2)完成任务

processEngine.getTaskService()//任务相关service
		.complete("108");
		System.out.println("---任务已完成---");

2.4 HistoryService 关于历史数据查询

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

2.5 IdentityService 关于组织机构的查询

   就是组织管理系,这里面很少用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 =“小张”;//小张,小李可以查询结果,小王不可以,因为他不是部门经理角色

Listlist = processEngine.getTaskService()//

                .createTaskQuery()//

                .taskCandidateUser(userId)//指定组任务查询

                .list();

2.6 FormService 可选服务

                即使不使用它,Activiti也可以完美运行, 不会损失任何功能。这个服务提供了启动表单任务表单两个概念。 启动表单会在流程实例启动之前展示给用户, 任务表单会在用户完成任务时展示。Activiti支持在BPMN 2.0流程定义中设置这些表单。 这个服务以一种简单的方式将数据暴露出来。再次重申,它时可选的, 表单也不一定要嵌入到流程定义中。

2.7 ManagementService 

    在使用Activiti的定制环境中基本上不会用到。 它可以查询数据库的表和表的元数据。另外,它提供了查询和管理异步操作的功能。 Activiti的异步操作用途很多,比如定时器,异步操作, 延迟暂停、激活,等等。

   *注:文中详细源码例子,可以到github上下载:ActivitiDemo GitHub地址


你可能感兴趣的:(Activiti,Java)