Activiti流程框架的简单使用(我是用的是Idea)
目录
1. 首先在Idea上下载activiti流程构建的插件(用来画流程图)
我在idea的官网进行下载然后进行安装的:
搜索插件名称:
2. 在pom.xml中导入其依赖文件
下面只是activiti相关的依赖文件,还有spring依赖文件可以自行选择导入
<!-- activiti相关的jar包 与工作流相关的-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-process-validation</artifactId>
<version>5.15.1</version>
</dependency>
3. 在Junit测试类中进行activiti依赖表的创建
3.1 流程表数据的初始化
- 首先创建activiti.cfg.xml 配置文件
databaseSchemaUpdate = ”true“ 表示:有表的话会进行使用,没有表的话在进行创建
databaseSchemaUpdate = “false” (也是默认值) 表示:表示用户自己创建
databaseSchemaUpdate = “create-drop” 表示:有表的话会进行删除,在进行创建
其他的一些数据为数据库连接数据
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 流程引擎的配置对象 -->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration">
<property name="databaseSchemaUpdate" value="true" />
<property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/oa?serverTimezone=UTC" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="25002500" />
</bean>
</beans>
- 创建测试方法testActivitiInit
@Test
public void testActivitiInit(){
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(defaultProcessEngine);
}
运行后会在数据库生成23张表
下面为表的相关解释
3.1 资源库流程规则表
-
act_re_deployment 部署信息表
-
act_re_model 流程设计模型部署表
-
act_re_procdef 流程定义数据表
3.2:运行时数据库表
-
act_ru_execution 运行时流程执行实例表
-
act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
-
act_ru_task 运行时任务节点表
-
act_ru_variable 运行时流程变量数据表
3.3:历史数据库表
-
act_hi_actinst 历史节点表
-
act_hi_attachment 历史附件表
-
act_hi_comment 历史意见表
-
act_hi_identitylink 历史流程人员表
-
act_hi_detail 历史详情表,提供历史变量的查询
-
act_hi_procinst 历史流程实例表
-
act_hi_taskinst 历史任务实例表
-
act_hi_varinst 历史变量表
3.4:组织机构表
-
act_id_group 用户组信息表
-
act_id_info 用户扩展信息表
-
act_id_membership 用户与用户组对应信息表
-
act_id_user 用户信息表
4. 创建流程图
4.1 选择创建文件类型
BpmnFile
4.2 进行流程的编辑
4.3 生成图片
- 首先复制Bpmn结尾文件,然后修改为xml文件
这样xml文件会转换为png文件
5. 在Junit中进行流程图的部署
创建流程部署测试方法:testDeployProcess()
/**
* 部署流程图
*/
@Test
public void testDeployProcess(){
//1. 获取流程引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2. 获取流程定义的service
RepositoryService repositoryService = processEngine.getRepositoryService();
//3. 创建流程部署对象
DeploymentBuilder deployment = repositoryService.createDeployment();
//4. 部署资源文件
deployment.addClasspathResource("Hello.bpmn");
deployment.addClasspathResource("Hello.png");
//5.设置部署名称
deployment.name("第三次次署流程图");
//6. 进行部署
Deployment deploy = deployment.deploy();
//7 输出信息
System.out.println("部署名称: " + deploy.getName());
System.out.println("部署id: " + deploy.getId());
System.out.println("部署时间: " + deploy.getDeploymentTime());
}
运行结果:
这时可以进入数据库进行数据查询
act_re_deployment: 部署的相关信息
act_re_procdef:
act_ge_bytearray
6.流程部署的删除方法
输入的501 为该流程的的 id 则为act_re_deployment 表中的id值
@Test
public void testDeleteDeployProcess(){
//1. 获取流程引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2. 获取流程定义的service
RepositoryService repositoryService = processEngine.getRepositoryService();
//3. 调用方法进行删除
repositoryService.deleteDeployment("501");
}
7. 通过流程部署id去查询流程图片(可用于在线查看流程图)
相关方法:
该方法通过getResourceAsStream方法获取流程图片的二进制文件,然后转换为图片存在跟目录下
@Test
public void testFindProcessInsPng(){
//1. 获取流程引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2. 获取流程定义的service
RepositoryService repositoryService = processEngine.getRepositoryService();
//3. 根据部署id和资源名称
InputStream ips = repositoryService.getResourceAsStream("601", "Hello.png");
FileOutputStream ops = null;
try {
ops = new FileOutputStream("./hello.png");
IOUtils.copy(ips, ops);
System.out.println("流程图片复制成功!");
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(ops);
IOUtils.closeQuietly(ips);
}
}
生成的图片:
8. 总结
- activiti工作流是根据bpmn业务流程流转的
- 其中最重要的一个对象为:ProcessEngine
该对象调用的最关键的四个方法- getRepositoryService:流程定义相关的操作都可以通过该对象来执行
- RuntimeService:运行是修改的相关操作东可以通过它来执行
- TaskService: 任务修改的操作可以通过它进行操作
- HistoryService:查询历史记录可以通过该对象进行操作