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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
主要内容: 2:工作流的执行过程 演示程序:Activiti控制台 3:Activiti介绍 Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。 3.1:工作流引擎 ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。 3.2:BPMN 业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram) 3.3:数据库(先学后看) Activiti数据库支持: Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。 ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。 ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。 ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。 ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。 表结构操作: 3.3.1:资源库流程规则表 1)act_re_deployment 部署信息表 2)act_re_model 流程设计模型部署表 3)act_re_procdef 流程定义数据表 3.3.2:运行时数据库表 1)act_ru_execution 运行时流程执行实例表 2)act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息 3)act_ru_task 运行时任务节点表 4)act_ru_variable 运行时流程变量数据表 3.3.3:历史数据库表 1)act_hi_actinst 历史节点表 2)act_hi_attachment 历史附件表 3)act_hi_comment 历史意见表 4)act_hi_identitylink 历史流程人员表 5)act_hi_detail 历史详情表,提供历史变量的查询 6)act_hi_procinst 历史流程实例表 7)act_hi_taskinst 历史任务实例表 8)act_hi_varinst 历史变量表 3.3.4:组织机构表 1)act_id_group 用户组信息表 2)act_id_info 用户扩展信息表 3)act_id_membership 用户与用户组对应信息表 4)act_id_user 用户信息表 这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足 3.3.5:通用数据表 1)act_ge_bytearray 二进制数据表 2)act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录, 3.4:activiti.cfg.xml(activiti的配置文件) Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数。 定义数据库配置参数: jdbcUrl: 数据库的JDBC URL。 jdbcDriver: 对应不同数据库类型的驱动。 jdbcUsername: 连接数据库的用户名。 jdbcPassword: 连接数据库的密码。 基于JDBC参数配置的数据库连接 会使用默认的MyBatis连接池。 下面的参数可以用来配置连接池(来自MyBatis参数): jdbcMaxActiveConnections: 连接池中处于被使用状态的连接的最大值。默认为10。 jdbcMaxIdleConnections: 连接池中处于空闲状态的连接的最大值。 jdbcMaxCheckoutTime: 连接被取出使用的最长时间,超过时间会被强制回收。 省略...

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值