activiti简介

简介

目前选用的版本是 5.22.0, 入门 activiti 需要了解的内容:

1.bpmn 规范, activiti 提供的 Service , activiti 内置的表;

2.流程定义,流程部署,启动流程,流程查询,任务表单

3.重构用户组,动态分配任务,集成 modeler ,定时任务

推荐参考: 咖啡兔, 官网API

spring boot,mybatis,activiti

bpmn规范

bpmn 用于定义业务流程图, activiti 支持 bpmn2.0 规范,并加入了一些自定义的属性;

阅读 demo 中的 bpmn 文件即可大致了解;

流程与表之间的基本关联描述

1.deploy

流程部署成功后,打包上传的 bpmnpng 文件属于静态资源文件,保存在 act_ge_bytearray 中;

除了资源文件外,生成的部署信息和流程定义分别保存在 act_re_deploymentact_re_procdef 中;

2.model

流程的一种形式,以 model 形式保存流程,信息保存在表 act_re_model,act_ge_bytearray 中;

model 流程的部署同 bpmn 流程, 生成 bpmnpng 文件保存在 act_ge_bytearray

3.processInstance

流程每次启动都会生成一个流程实例,保存在 act_hi_procint 表中, proc_inst_id_ 是流程实例的 id ;

4.execution

execution 指一个流程实例要执行的过程对象,保存在 act_ru_execution 表中;

execution 表的 id_ 字段通常与 proc_inst_id_ 字段一致,不一致时代表该 execution 是子流程;

5.task

流程图中的每个节点都是一个任务,上一个任务完成后,下一个任务就会被插入到 act_hi_taskinstact_ru_task 表中;

6.变量

执行任务过程中产生的变量信息(也包含动态表单的信息)存储在 act_ru_variableact_hi_varinst 表中;

任务完成后,历史变量信息会被存储在 act_hi_detail 表中(该表存储哪些信息由配置中的 HistoryLevel 决定)

7.执行者

任务的执行者信息存储在 act_ru_identitylinkact_hi_identitylink 表中;

activiti提供的Service

activiti 提供了如下七类接口便于部署、启动、执行、查询流程实例、任务及表单信息;

可参考 demo 项目和官方api;

RepositoryService管理流程定义,查询、部署流程
RuntimeService执行管理,包括启动、推进、删除流程实例等操作,查询正在运行的流程信息
TaskService任务管理,如查询某个人的代办任务
HistoryService历史数据管理
IdentityService组织机构管理,查询activiti内置的用户组织结构信息
FormService一个可选服务,任务表单管理,如查询动态表单属性值
ManagementServiceService for admin and maintenance operations on the process engine. These operations will typically not be used in a workflow driven application, but are used in for example the operational console.

流程内置的表

activiti 内置25张表,表字段详情参考

内置表以 ACT 开头,表名第二部分代表表的类型,如:

ACT_GE_* -> General, ACT_HI_* -> History, ACT_ID_* -> Identity, ACT_RE_ -> Repository, ACT_RU_* -> Runtime;

表分类表名解释
一般数据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运行时变量表

表单

bpmn文件中有两种定义表单的方式:

1.动态表单

<userTask activiti:candidateGroups="emp" activiti:exclusive="true" id="usertask6" name="员工发起请假申请">
    <extensionElements>
        <activiti:formProperty datePattern="yyyy-MM-dd" id="startTime" name="开始时间" type="date"/>
        <activiti:formProperty datePattern="yyyy-MM-dd" id="endTime" name="结束时间" type="date"/>
        <activiti:formProperty id="restReason" name="请假原因" type="string"/>
    </extensionElements>
</userTask>

可通过 formService 获取表单属性、赋值、提交并完成当前任务;

2.外置表单(普通表单)

<userTask activiti:candidateGroups="fz" activiti:exclusive="true" activiti:formKey="audit.jsp" id="usertask11" name="审批"/>

可通过 formService 获取 formKey 自行处理,formKey一般来说是路径+名称;

自定义用户组

activiti 内置了一套用户组以及认证管理,结构较为简单,不符合使用场景,需要替换为自定义用户组管理;

参考博客:重构用户组数据的多种方案比较

目前采用的是自定义 sessionFactory 的方式,即替换 activiti 原生的用户组查询模块,实现描述如下:

1.配置 activiti 使用自定义 sessionFactory

2.自定义 UserManagerFactoryGroupManagerFactory 实现 SessionFactory 接口

3.继承 activiti 定义的 UserEntityManagerGroupEntityManager , 重写主要方法

替换后可删除表 act_id_* ;

该方案在使用的时候需要避免调用未重写的方法;

任务的动态分配

任务的动态分配与指派有多种实现方式,适用于不同场景,按需选择;

1.实现 TaskListener 接口,如:

bpmn中的定义:

<userTask activiti:candidateGroups="2" activiti:exclusive="true" activiti:formKey="audit_bz.jsp" id="usertask7" name="项目组长审批">
    <extensionElements>
        <activiti:taskListener event="create" class="com.xxx.TaskListenerImpl"/>
    </extensionElements>
</userTask>

TaskListenerImpl 的实现:

	
public class TaskListenerImpl implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        delegateTask.deleteCandidateGroup("manager");
        delegateTask.addCandidateGroup("president");
    }
}
	

2.直接指定办理人,如:

<userTask id="hrAudit" name="人事审批" activiti:assignee="${hrUserId}" />

任务完成后传递该变量;


Map variables = new HashMap();
variables.put("hrUserId", hrUserId);
taskService.complete(taskId, variables);

注意 assigneecandidateGroups 的查询方式不同,故不能混用;

activiti modeler

activiti 提供的网页绘制工具,已集成至 demo 项目,参考博客;

定时任务

act_ru_job,尚未在demo中尝试运用

spring boot

采用注解取代xml配置项

配置文件application.yml

流程回退&撤销

需要自定义扩展

owner和assignee

指定办理人 > claim || setAssignee

发生委托,A委托给B

则 任务的办理人由A变成B 同时owner被赋值A

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值