spring boot 整合Activiti工作流学习笔记

一、了解工作流

刚开始接触的是工作流关于请假和审批的一些自动化流程。这里记录下以后复习备用。
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

常见的工作流框架
Activity5.13、JBPM4.4、OSWorkFlow、WorkFlow
工作流框架底层需要有数据库提供支持,activiti5.13版本,有23张表。JBPM4.4框架底层有数据库支持,18张表。JBPM底层使用hibernate操作数据库。Activiti框架底层使用的mybatis操作数据库。


二、初始化表结构

1.使用Activiti框架提供的建表语句
下载的Activiti框架的包中 /activiti-x.xx/database/ceate/ 目录中提供各种数据库的建表语句。


2.使用Activiti框架自动建表

2.1 不使用配置文件

使用步骤

代码如下(示例):

    @Test
    public void test1() {
        //    创建一个流程引擎配置对象
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();

        //    设置数据源信息
        configuration.setJdbcDriver("com.mysql.jdbc.Driver");
        configuration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti");
        configuration.setJdbcUsername("root");
        configuration.setJdbcPassword("");

        //    设置自动建表
        configuration.setDatabaseSchemaUpdate("true");

        //    创建一个流程引擎对象,在创建流程引擎对象中会自动建表
        ProcessEngine processEngine = configuration.buildProcessEngine();
    }

##2.2 使用yml配置文件

代码如下(示例):

    spring:
  datasource:
    url: jdbc:mysql://localhost:3306/active
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
  activiti:
    database-schema-update: true
    check-process-definitions: true
    process-definition-location-prefix: classpath:/process/
    history-level: full

Activiti框架中的二十三张表
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。

ACT_RE_: 'RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_
: 'RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_: 'ID’表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_
: 'HI’表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下。


Activiti框架的使用

1.1 使用Eclipse或Idea的BPMN编辑插件绘制流程图,并导出 流程图.bpmn和 流程图.png。(插件的安装及使用自行百度)
API详解
RepositoryService
是Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。

  1. 产生方式
    processEngine.getRepositoryService()//流程定义和部署对象相关的service
  2. 可以产生DeploymentBuilder,用来定义流程部署的相关参数
    Deployment deployment= processEngine.getRepositoryService()//流程定义和部署对象相关的service
    .createDeployment()//创建部署对象
    .name(“第一条流程”)
  3. 删除流程定义
    Deployment deployment= processEngine.getRepositoryService()//流程定义和部署对象相关的service
    .deleteDeployment(deploymentId)//删除部署对象

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

TaskService 任务服务类
1)任务相关操作
List list = processEngine.getTaskService()//与正在执行任务相关的service
.createTaskQuery()//创建任务查询对象
.taskAssignee(“当前处理人”)
.list();
2)完成任务
processEngine.getTaskService()//任务相关service
.complete(“108”);
System.out.println("—任务已完成—");

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

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(“小李”, “部门经理”);//建立组和用户关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wyangcsdb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值