您的位置:首页 > 其它

Activiti 核心API详解

2018-03-13 14:23 295 查看

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





这里看的已经很清楚了,创建完成流程引擎我们就可以来完成一下几个核心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();


2.1 RepositoryService 

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

1)     产生方式processEngine.getRepositoryService()//流程定义和部署对象相关的service2)     可以产生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<Task> 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
.createHistoric
4000
ProcessInstanceQuery()//创建历史流程实例查询
.processInstanceId(processInstanceId)//使用流程实例ID查询
.orderByProcessInstanceStartTime().asc()
.singleResult();2)查询历史活动List<HistoricActivityInstance> list = processEngine.getHistoryService()//
.createHistoricActivityInstanceQuery()//创建历史活动实例的查询
.processInstanceId(processInstanceId)//
.orderByHistoricActivityInstanceStartTime().asc()//
.list();3)查询历史任务List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
.createHistoricTaskInstanceQuery()//创建历史任务实例查询
.processInstanceId(processInstanceId)//
.orderByHistoricTaskInstanceStartTime().asc()
.list();4)查询历史流程变量List<HistoricVariableInstance> 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 =“小张”;//小张,小李可以查询结果,小王不可以,因为他不是部门经理角色List<Task>list = processEngine.getTaskService()//                .createTaskQuery()//                .taskCandidateUser(userId)//指定组任务查询                .list();

2.6 FormService 可选服务

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

2.7 ManagementService 

    在使用Activiti的定制环境中基本上不会用到。 它可以查询数据库的表和表的元数据。另外,它提供了查询和管理异步操作的功能。 Activiti的异步操作用途很多,比如定时器,异步操作, 延迟暂停、激活,等等。
   *注:文中详细源码例子,可以到github上下载:ActivitiDemo GitHub地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: