activi工作流学习
- 概念及简介
- eclipse插件安装
- 第一步:
- 第二步:
- 第三步:
- 第四步:
- 第五步:
- 工程创建
- 流程图绘制
- 工作流表说明
- 创建工作流表
- 部署流程
- 启动流程实例
- 查看流程任务
- 完成任务
- 查看历史任务
概念及简介
这个网上很多,大家自己查阅就行了
由于IDEA的activiti插件比较难用,反人类设计,所以使用eclipse进行设计学习.此次我使用的是氧气版eclipse.
eclipse插件安装
第一步:
第二步:
第三步:
Name: Activiti BPMN 2.0 designer
Location: http://activiti.org/designer/update/
将这两个内容填入即可.其中name可变.
填写完成后点击OK
第四步:
完成后一直点击OK,finish即可.
第五步:
点击Window-preferences
出现Activiti说明安装成功.将这里点上勾
工程创建
建一个springboot工程,maven管理.
pom文件引入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
</dependency>
流程图绘制
更新完成后.开始画一个简单的流程图.
resources目录下,右键新建other,
创建该文件
面板中绘制一个简单的流程图.
点击流程
完成后保存即可生成一个
这样的文件.
这样,流程图操作完成.
工作流表说明
Activiti使用到的表都是ACT_开头的。
- ACT_RE_: RE表示repository(存储),RepositoryService接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
- ACT_RU_: RU表示runtime,运行时表-RuntimeService。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。 这就保证了这些运行时的表小且快。
- ACT_ID_: ID表示identity (组织机构),IdentityService接口所操作的表。用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。
- ACT_HI_: HI表示history,历史数据表,HistoryService。就是这些表包含着流程执行的历史相关数据,如结束的流程实例,变量,任务,等等
- ACT_GE_: 全局通用数据及设置(general),各种情况都使用的数据。
表分类 | 表名 | 说明 |
通用数据 | ACT_GE_BYTEARRAY | 通用的流程定义和流程资源 |
ACT_GE_PROPERTY | 系统相关属性 | |
流程历史记录 | ACT_HI_ACTINST | 历史的流程实例 |
ACT_HI_ATTACHMENT | 历史的流程附件 | |
ACT_HI_COMMENT | 历史的说明性信息 | |
ACT_HI_DETAIL | 历史的流程运行中的细节信息 | |
ACT_HI_IDENTITYLINK | 历史的流程运行过程中用户关系 | |
ACT_HI_PROCINST | 历史的流程实例 | |
ACT_HI_TASKINST | 历史的任务实例 | |
ACT_HI_VARINST | 历史的流程运行中的变量信息 | |
用户用户组表 | ACT_ID_GROUP | 身份信息-组信息 |
ACT_ID_INFO | 用户扩展信息表 | |
ACT_ID_MEMBERSHIP | 身份信息-用户和组关系的中间表 | |
ACT_ID_USER | 身份信息-用户信息 | |
流程定义表 | ACT_RE_DEPLOYMENT | 部署单元信息 |
ACT_RE_MODEL | 模型信息 | |
ACT_RE_PROCDEF | 已部署的流程定义 | |
运行实例表 | ACT_RU_EVENT_SUBSCR | 运行时事件 |
ACT_RU_EXECUTION | 运行时流程执行实例 | |
ACT_RU_IDENTITYLINK | 运行时用户关系信息 | |
ACT_RU_JOB | 运行时作业 | |
ACT_RU_TASK | 运行时任务 | |
ACT_RU_VARIABLE | 运行时变量表 |
创建工作流表
activiti.cfg.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false&useSSL=false" />
<property name="jdbcUsername" value="root"/>
<property name="jdbcPassword" value="123456" />
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
@Test
public void createActiviti() {
//读取配置文件 创建ProcessEngine实例 生成activiti23张表
ProcessEngineConfiguration pec = ProcessEngineConfigurationImpl
.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine pe = pec.buildProcessEngine();
}
运行后数据库生成23张表
部署流程
// 读取配置文件 创建ProcessEngine实例 生成activiti23张表
ProcessEngineConfiguration pec = ProcessEngineConfigurationImpl
.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine pe = pec.buildProcessEngine();
/**
* 部署设计资源 即之前创建的流程设计图
*/
@Test
public void deploy() {
pe.getRepositoryService().createDeployment().addClasspathResource("MyProcess.png")
.addClasspathResource("MyProcess.bpmn").name("第一个工作流").deploy();
}
结果:
这张表中生成数据
——————————————————
这张表生成数据
这张表生成
部署工作流程序这个阶段就结束
启动流程实例
/**
* 启动流程实例
* 此时act_ru_execution act_ru_task 两张表中有数据
*/
@Test
public void start() {
//通过id启动 启动时赋予流程执行人即 刚才${}中的值
Map<String, Object> map = new HashMap<>();
//如果是多个人同时的话,这里user的值可以用,隔开
//或者说还有 student techer这种的 再put就行了
map.put("user", "小妹");
ProcessInstance pi = pe.getRuntimeService().startProcessInstanceById("myProcess:1:10004",map);
}
创建实例还有这些方法:
startProcessInstanceByKey()
startProcessInstanceByKeyAndTenantId()
startProcessInstanceByMessage()
startProcessInstanceByMessageAndTenantId()
查看流程任务
/**
* 查看流程任务
*/
@Test
public void findTask() {
//创建流程查询
List<Task> list = pe.getTaskService().createTaskQuery().list();
list.forEach(item->{
System.out.println("任务id"+item.getId());
System.out.println("任务名称"+item.getName());
System.out.println("任务创建时间"+item.getCreateTime());
System.out.println("任务执行人"+item.getAssignee());
});
}
执行结果:
任务id22506
任务名称工作流
任务创建时间Wed Jan 22 09:45:56 CST 2020
任务执行人小妹
完成任务
/**
* 完成任务
* 此时act_ru_execution act_ru_task 两张表中没有数据
* 相对应的 在历史表中有数据
*/
@Test
public void completeTask() {
Task task = pe.getTaskService().createTaskQuery().singleResult();
pe.getTaskService().complete(task.getId());//通过任务id来完成任务
}
查看历史任务
/**
* 查看历史任务数据
*/
@Test
public void findHistoryTask() {
HistoricTaskInstance hti = pe.getHistoryService().createHistoricTaskInstanceQuery().singleResult();
System.out.println("历史任务id"+hti.getId());
System.out.println("历史任务名称"+hti.getName());
System.out.println("历史任务创建时间"+hti.getCreateTime());
System.out.println("历史任务结束时间"+hti.getEndTime());
System.out.println("历史任务执行人"+hti.getAssignee());
}
结果:
历史任务id22506
历史任务名称工作流
历史任务创建时间Wed Jan 22 09:45:56 CST 2020
历史任务结束时间Wed Jan 22 10:00:29 CST 2020
历史任务执行人小妹