1.Activiti介绍
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架
1、Activiti基于Apache许可的开源BPM平台
2、Activiti和业界也用的多的JBPM历史渊源。
创始人Tom Baeyens是JBoss jBPM4的项目架构师,后来去Alfresco做了继承和发展了Activiti.而Jboss公司抛弃了JBPM4的设计思想,重新设计开发了JBPM5.所以原来习惯于JBPM4的大部分用户都使用Activiti
3、它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。 并且提供了Demo,可以从里面抽取流程在线设计器。比较强大。
2. 什么是工作流?
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在“多个参与者”之间按照某种“预定义的规则”传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是工作流。
3.准备环境
3.1 先安装插件
activiti拖拽插件,反编译插件(看源码)
3.2 导包(activiti-所需要的环境jar包)
wars/rest项目/web-inf/lib(官方给我们的案例)
ssm+activiti
4.配置-配置文件
4.1 硬编码
配置信息
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
// jdbc 连接信息
processEngineConfiguration.setJdbcUrl("jdbc:mysql:///activiti?createDatabaseIfNotExist=true");
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("123456");
// 自动创建表
processEngineConfiguration.setDatabaseSchemaUpdate("true");
// 服务核心对象
ProcessEngine buildProcessEngine = processEngineConfiguration.buildProcessEngine();
System.out.println(buildProcessEngine);
}
4.2 config 配置文件
ProcessEngineConfiguration createProcessEngineConfigurationFromResource =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(“activiti.cfg2.xml”);
4.3 默认自动加载方式加载配置文件
@Test
public void testConnect3() throws Exception {
// 获取核心对象-别名(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);
}
4.4 自定义配置文件
@Test
public void testConnect2() throws Exception {
// 加载配置类的对象
ProcessEngineConfiguration createProcessEngineConfigurationFromResource = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg2.xml");
// 核心对象
ProcessEngine buildProcessEngine = createProcessEngineConfigurationFromResource.buildProcessEngine();
System.out.println(buildProcessEngine);
}
5.resportyService 仓库
5.1 发布流程
// 添加发布部署
@Test
public void testDeloy() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//仓库
RepositoryService repositoryService = processEngine.getRepositoryService();
//获取流程发布对象
DeploymentBuilder createDeployment = repositoryService.createDeployment();
createDeployment.addClasspathResource("MyProcess.bpmn");
createDeployment.addClasspathResource("MyProcess.png");
//部署发布
Deployment deploy = createDeployment.deploy();
System.out.println(deploy);
}
5.2 查询部署列表
// 查询部署列表
@Test
public void testQuery() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//仓库
RepositoryService repositoryService = processEngine.getRepositoryService();
//查询对象
DeploymentQuery createDeploymentQuery = repositoryService.createDeploymentQuery();
//设置查询条件
List<Deployment> list = createDeploymentQuery.list();
for (Deployment deployment : list) {
System.out.println(deployment);
}
}
5.3流程定义的列表
// 查询流程定义列表
@Test
public void testQueryProcessDef() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//仓库
RepositoryService repositoryService = processEngine.getRepositoryService();
//获取查询对象
ProcessDefinitionQuery createProcessDefinitionQuery = repositoryService.createProcessDefinitionQuery();
List<ProcessDefinition> list = createProcessDefinitionQuery.list();
for (ProcessDefinition processDefinition : list) {
System.out.println(processDefinition);
}
}
5.4删除-真删除
@Test
public void testDelete() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//仓库
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.deleteDeployment("5001");
}
5.5假删除(挂起和激活)
@Test
public void testUpdateDelete() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//仓库
RepositoryService repositoryService = processEngine.getRepositoryService();
//挂起
repositoryService.suspendProcessDefinitionByKey("myProcess");
//激活
repositoryService.activateProcessDefinitionByKey("myProcess");
}
5.6查看流程图
@Test
public void testShowPng() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//仓库
RepositoryService repositoryService = processEngine.getRepositoryService();
//获取输入流对象
String deploymentId = "1";
String resourceName = "MyProcess.png";
InputStream resourceAsStream = repositoryService.getResourceAsStream(deploymentId, resourceName);
//模拟输出本地硬盘
IOUtils.copy(resourceAsStream, new FileOutputStream("g:/a.png"));
}
6. runtimeService 运行时 和 tasksService 任务 接口
6.1 启动流程
//启动流程实例
@Test
public void testStartInstance() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//runtimeService运行
RuntimeService runtimeService = processEngine.getRuntimeService();
//根据流程的定义key启动
ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey("myProcess");
System.out.println(startProcessInstanceByKey);
}
6.2 查询任务列表
@Test
public void testQueryTask() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//任务
TaskService taskService = processEngine.getTaskService();
//获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
List<Task> list = createTaskQuery.list();
for (Task task : list) {
System.out.println(task);
}
}
6.3 查询某个人的列表
@Test
public void testQueryTaskByName() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//任务
TaskService taskService = processEngine.getTaskService();
//获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
//设置查询条件
createTaskQuery.taskAssignee("zs");
List<Task> list = createTaskQuery.list();
for (Task task : list) {
System.out.println(task);
}
}
6.4TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
6.5 获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
6.6设置条件 : list 分页
6.7 完成私有任务
私有任务 (一个人)
公有任务 (多个人)
@Test
public void testCompleTaskByName() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//任务
TaskService taskService = processEngine.getTaskService();
String taskId = "10004";
taskService.complete(taskId);
}
6.8 完成公有任务
①.先认领任务
@Test
public void testCaimTask() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 完成任务
String taskId = "2504";
String userId="zs";
taskService.claim(taskId, userId);
}
6.9 查询实例状态是否就结束
@Test
public void testIsEnd() throws Exception {
//获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// RuntimeService 运行
RuntimeService runtimeService = processEngine.getRuntimeService();
// 查询对象
ProcessInstanceQuery createProcessInstanceQuery = runtimeService.createProcessInstanceQuery();
//根据id
ProcessInstance singleResult = createProcessInstanceQuery.processInstanceId("2501").singleResult();
// 如果singleResult找到说明流程还没有结束
if(singleResult!=null){
System.out.println("流程未结束或不存在");
}else{
System.out.println("流程结束");
}
}
7 .历史 historyService 就是运行时完成流程那数据就进入到历史表中
有多少次执行这个实例流程,也就是有多少人离职
@Test
public void queryHisprocessdef(){
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
//获取历史服务
HistoryService historyService = defaultProcessEngine.getHistoryService();
//获取查询对象
HistoricProcessInstanceQuery createHistoricProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery();
//设置查询条件
createHistoricProcessInstanceQuery.processDefinitionKey("myProcess");
//获取列表
List<HistoricProcessInstance> list = createHistoricProcessInstanceQuery.list();
System.out.println("离职人数:" + list.size());
}
获取活动节点日志(查询那些人办理任务)
@Test
public void queryAci(){
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
//获取历史服务
HistoryService historyService = defaultProcessEngine.getHistoryService();
//获取查询对象
HistoricActivityInstanceQuery createHistoricActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
//设置查询条件
createHistoricActivityInstanceQuery.processInstanceId("2501");
//获取列表
List<HistoricActivityInstance> list = createHistoricActivityInstanceQuery.list();
for (HistoricActivityInstance ac : list) {
System.out.println("=================");
System.out.println(ac.getActivityId());
System.out.println(ac.getActivityName());
System.out.println(ac.getStartTime());
System.out.println(ac.getEndTime());
}