Activiti工作流对象关系及表结构
activiti的28张表结构

activiti的28张表结构Activiti是一个基于Java的工作流引擎,用于业务流程管理和自动化。
它提供了一套完整的工作流解决方案,包括流程定义、流程实例、任务和用户等管理功能。
以下是Activiti的28张表结构:1. ACT_GE_BYTEARRAY:保存流程引擎相关的资源,如bpmn、png等文件。
2. ACT_GE_PROPERTY:属性表,保存一些基本属性,为k-v格式。
3. ACT_RE_DEPLOYMENT:保存流程部署相关的信息。
4. ACT_RE_MODEL:保存模型相关的信息。
5. ACT_RE_PROCDEF:保存流程定义的相关信息。
6. ACT_RU_EXECUTION:保存流程实例的相关信息。
7. ACT_RU_JOB:保存定时任务的相关信息。
8. ACT_RU_TASK:保存任务的相关信息。
9. ACT_RU_VARIABLE:保存变量相关的信息。
10. ACT_ID_GROUP:保存用户组的信息。
11. ACT_ID_MEMBERSHIP:保存用户与用户组之间的关系。
12. ACT_ID_USER:保存用户的信息。
13. ACT_HI_ATTACHMENT:保存附件的相关信息。
14. ACT_HI_COMMENT:保存评论的相关信息。
15. ACT_HI_DETAIL:保存详细日志的相关信息。
16. ACT_HI_IDENTITYLINK:保存人员与任务之间的关系。
17. ACT_HI_PROCINST:保存流程实例的相关信息。
18. ACT_HI_TASKINST:保存任务实例的相关信息。
19. ACT_HI_VARINST:保存变量实例的相关信息。
20. ACT_IDX_BYTEARRAY:保存索引字节数组的信息。
21. ACT_IDX_DEPLOYMENT:保存索引部署的信息。
22. ACT_IDX_EXECUTION:保存索引执行的信息。
23. ACT_IDX_PROCDEF:保存索引流程定义的信息。
BPMN工作流的基本概念!详解工作流框架Activiti

BPMN⼯作流的基本概念!详解⼯作流框架Activiti⼯作流⼯作流简介⼯作流(Workflow): ⼯作流就是通过计算机技术对业务流程进⾏⾃动化管理。
实现多个参与者按照预定的流程去⾃动执⾏业务流程。
定义: 通过计算机对业务流程⾃动化执⾏管理主要解决的是: 使在多个参与者之间按照某种预定义的规则⾃动进⾏传递⽂档,信息或任务的过程.从⽽实现某个预期的业务⽬标,或者促使此⽬标的实现⼯作流管理系统的⽬标:管理⼯作的流程以确保⼯作在正确的时间被期望的⼈员所执⾏在⾃动化进⾏的业务过程中插⼊⼈⼯的执⾏和⼲预⼯作流框架:Activiti,JBPM,OSWorkFlow,WorkFlow⼯作流框架底层需要有数据库提供⽀持⼯作流术语⼯作流引擎ProcessEngine对象: 这是Activiti⼯作的核⼼.负责⽣成流程运⾏时的各种实例及数据,监控和管理流程的运⾏BPM业务流程管理:是⼀种以规范化的构造端到端的卓越业务流程为中⼼,以持续的提⾼组织业务绩效为⽬的的系统化⽅法常见商业管理教育如EMBA,MBA等均将BPM包含在内BPMN业务流程建模与标注:这些图如何组合成⼀个业务流程图(Business Process Diagram)讨论BPMN的各种的⽤途:包括以何种精度来影响⼀个流程图中的模型BPMN作为⼀个标准的价值BPMN未来发展的远景流对象⼀个业务流程图有三个流对象的核⼼元素事件⼀个事件⽤圆圈来描述,表⽰⼀个业务流程期间发⽣的东西事件影响流程的流动.⼀般有⼀个原因(触发器)或⼀个影响(结果)基于它们对流程的影响,有三种事件:开始事件,中间事件,终⽌事件活动⽤圆⾓矩形表⽰,⼀个流程由⼀个活动或多个活动组成条件条件⽤菱形表⽰,⽤于控制序列流的分⽀与合并。
可以作为选择,包括路径的分⽀与合并内部的标记会给出控制流的类型Activiti开源⼯作流框架Activiti简介Activiti是⼀个开源的⼯作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进⾏流程调度Activiti 作为⼀个遵从 Apache 许可的⼯作流和业务流程管理开源平台,其核⼼是基于Java的超快速,超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌⼊性和可扩展性,同时更加强调⾯向业务⼈员Activiti 流程引擎重点关注在系统开发的易⽤性和轻量性上.每⼀项BPM业务功能Activiti流程引擎都以服务的形式提供给开发⼈员.通过使⽤这些服务,开发⼈员能够构建出功能丰富,轻便且⾼效的BPM应⽤程序Activiti服务结构Activiti系统服务结构图核⼼类:ProcessEngine: 流程引擎的抽象,可以通过此类获取需要的所有服务服务类:XxxService: 通过ProcessEngine获取,Activiti将不同⽣命周期的服务封装在不同Service中,包括定义,部署,运⾏.通过服务类可获取相关⽣命周期中的服务信息RepositoryServiceRepository Service提供了对repository的存取服务Activiti中每⼀个不同版本的业务流程的定义都需要使⽤⼀些定义⽂件,部署⽂件和⽀持数据(例如BPMN2.0XML⽂件,表单定义⽂件,流程定义图像⽂件等),这些⽂件都存储在Activiti内建的Repository中RuntimeServiceRuntime Service提供了启动流程,查询流程实例,设置获取流程实例变量等功能.此外它还提供了对流程部署,流程定义和流程实例的存取服务TaskServiceTask Service提供了对⽤户Task和Form相关的操作.它提供了运⾏时任务查询,领取,完成,删除以及变量设置等功能HistoryServiceHistory Service⽤于获取正在运⾏或已经完成的流程实例的信息,与Runtime Service中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化FormService使⽤Form Service可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单Activiti中的流程和状态Task均可以关联业务相关的数据IdentityServiceIdentity Service提供了对Activiti系统中的⽤户和组的管理功能Activiti中内置了⽤户以及组管理的功能,必须使⽤这些⽤户和组的信息才能获取到相应的TaskManagementServiceManagement Service提供了对Activiti流程引擎的管理和维护功能这些功能不在⼯作流驱动的应⽤程序中使⽤,主要⽤于 Activiti 系统的⽇常维护核⼼业务对象:org.activiti.engine.impl.persistence.entity包下的类,包括Task,ProcessInstance,Execution等根据不同职责实现相应接⼝的⽅法(如需要持久化则继承PersistentObject接⼝),与传统的实体类不同Activiti组件Activiti上下⽂组件Context: ⽤来保存⽣命周期⽐较长,全局性的信息,类似Application.主要包括如下三类:CommandContext: 命令上下⽂-保存每个命令必要的资源,如持久化需要的sessionProcessEngineConfigurationImpl: 流程引擎相关配置信息-整个引擎全局的配置信息.如数据源DataSource等.该对象为单例,在流程引擎创建的时候初始化ExecutionContext: 持有ExecutionEntity对象持久化组件:Activiti使⽤mybatis作OR映射,并在此基础上增加设计了⾃⼰的持久化框架在流程引擎创建时初始化,顶层接⼝Session,SessionFactorySession有两个实现类:DbSqlSession: 负责sql表达式的执⾏AbstractManager: 负责对象的持久化操作SessionFactory有两个实现类:DbSqlSessionFactory: 负责DbSqlSession相关操作GenericManagerFactory: 负责AbstractManager相关操作Event-Listener组件:Activiti允许客户代码介⼊流程执⾏,提供了事件监听组件监听的事件类型:TaskListenerJavaDelegateExpressionExecutionListenerProcessEngineConfigurationImpl持有DelegateInterceptor的某个实例,⽅便调⽤handleInvocation Cache组件DbSqlSession中有cache的实现Activiti基于List和Map来做缓存:如查询时先查缓存,没有则直接查询并放⼊缓存异步执⾏组件Activiti可以执⾏任务,JobExecutor为其核⼼类,JobExecutor包含三个主要属性:JobAcquisitionThreadBlockingQueueThreadPoolExecutor⽅法ProcessEngines在引擎启动时调⽤JobExecutor.start,JobAcquisitionThread 线程即开始⼯作,其run⽅法不断循环执⾏AcquiredJobs中的job,执⾏⼀次后线程等待⼀定时间直到超时或者JobExecutor.jobWasAdded⽅法,因为有新任务⽽被调⽤。
activity工作流表结构分析

activity工作流表结构分析activity工作流表结构分析版权声明:本文为博主原创文章,未经博主允许不得转载。
1、结构设计1.1、逻辑结构设计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),各种情况都使用的数据。
1.2、所有表的含义序号表名说明1 act_ge_bytearray二进制数据表2 act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,3 act_hi_actinst历史节点表4 act_hi_attachment历史附件表5 act_hi_comment历史意见表6 act_hi_identitylink历史流程人员表7 act_hi_detail历史详情表,提供历史变量的查询8 act_hi_procinst历史流程实例表9 act_hi_taskinst历史任务实例表10act_hi_varinst历史变量表11act_id_group用户组信息表12act_id_info用户扩展信息表13act_id_membership用户与用户组对应信息表14act_id_user用户信息表15. act_re_deployment部署信息表16. act_re_model流程设计模型部署表17act_re_procdef流程定义数据表18act_ru_event_subscr throwEvent、catchEvent时间监听信息表19act_ru_execution运行时流程执行实例表20act_ru_identitylink运行时流程人员表,主要存储任务节点与参与者的相关信息21act_ru_job运行时定时任务数据表22act_ru_task运行时任务节点表23act_ru_variable运行时流程变量数据表2、表以及索引信息2.1 二进制数据表(act_ge_bytearray)2.1.1 简要描述 保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。
Activiti工作流数据库表结构

Activiti数据表结构目录1ACTIVITI数据库表结构 ----------------------------------------------------------------------------------------------- 21.1数据库表名说明 ------------------------------------------------------------------------------------------------ 21.2数据库表结构---------------------------------------------------------------------------------------------------- 31.2.1Activiti数据表清单: ---------------------------------------------------------------------------------------- 31.2.2表名:ACT_GE_BYTEARRAY (通用的流程定义和流程资源)-------------------------------- 31.2.3表名:ACT_GE_PROPERTY (系统相关属性) ----------------------------------------------------- 41.2.4表名:ACT_HI_ACTINST (历史节点表) ------------------------------------------------------------ 51.2.5表名:ACT_HI_ATTACHMENT (附件信息)-------------------------------------------------------- 61.2.6表名:ACT_HI_COMMENT (历史审批意见表)-------------------------------------------------- 61.2.7表名:ACT_HI_DETAIL (历史详细信息)----------------------------------------------------------- 71.2.8表名:ACT_HI_IDENTITYLINK (历史流程人员表) ---------------------------------------------- 81.2.9表名:ACT_HI_PROCINST(历史流程实例信息)核心表---------------------------------------- 81.2.10表名:ACT_HI_TASKINST(历史任务流程实例信息)核心表------------------------------ 91.2.11表名:ACT_HI_VARINST(历史变量信息) ------------------------------------------------------ 91.2.12表名:ACT_ID_GROUP(用户组表) ------------------------------------------------------------ 101.2.13表名:ACT_ID_INFO (用户扩展信息表) ---------------------------------------------------- 101.2.14表名:ACT_ID_MEMBERSHIP(用户用户组关联表) -------------------------------------- 111.2.15表名:ACT_ID_USER(用户信息表) ------------------------------------------------------------ 111.2.16表名:ACT_RE_DEPLOYMENT(部署信息表)------------------------------------------------ 121.2.17表名:ACT_RE_MODEL (流程设计模型部署表) ----------------------------------------------- 121.2.18表名:ACT_RE_PROCDEF (流程定义表) ---------------------------------------------------- 131.2.19表名:ACT_RU_EVENT_SUBSCR (运行时事件) ------------------------------------------------- 141.2.20表名:ACT_RU_EXECUTION (运行时流程执行实例) ----------------------------------- 151.2.21表名:ACT_RU_IDENTITYLINK(身份联系) --------------------------------------------------- 151.2.22表名:ACT_RU_JOB(运行中的任务)---------------------------------------------------------- 161.2.23表名:ACT_RU_TASK(运行时任务数据表) ------------------------------------------------------ 161.2.24表名:ACT_RU_VARIABLE(运行时流程变量数据表) ----------------------------------------- 17 2ACTIVITI中主要对象的关系 -------------------------------------------------------------------------------------- 181Activiti数据库表结构1.1数据库表名说明Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。
activiti表结构

1、结构设计1.1、逻辑结构设计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),各种情况都使用的数据。
6 act_hi_identitylink历史流程人员表7 act_hi_detail历史详情表,提供历史变量的查询8 act_hi_procinst历史流程实例表9 act_hi_taskinst历史任务实例表10 act_hi_varinst历史变量表11 act_id_group用户组信息表12 act_id_info用户扩展信息表13 act_id_membership用户与用户组对应信息表14 act_id_user用户信息表15. act_re_deployment部署信息表16. act_re_model流程设计模型部署表17 act_re_procdef流程定义数据表18 act_ru_event_subscrthrowEvent、catchEvent时间监听信息表19 act_ru_execution运行时流程执行实例表20 act_ru_identitylink运行时流程人员表,主要存储任务节点与参与者的相关信息21 act_ru_job运行时定时任务数据表22 act_ru_task运行时任务节点表23 act_ru_variable运行时流程变量数据表2、表以及索引信息2.1 二进制数据表(act_ge_bytearray)2.1.1 简要描述保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。
activiti7表结构说明

Activiti7表结构说明1. 介绍Activiti是一个开源的业务流程管理(BPM)框架,它提供了一套完整的流程引擎和工具,用于设计、执行和管理各种类型的业务流程。
Activiti7是Activiti框架的最新版本,它在前一版本的基础上进行了大量改进和优化。
本文将对Activiti7的表结构进行详细说明,包括表名、字段名、数据类型等信息。
了解Activiti7的表结构对于开发人员来说非常重要,可以帮助我们更好地理解和使用Activiti框架。
2. 表结构说明2.1 ACT_RE_* 表这些表存储了流程定义和流程资源相关的信息。
•ACT_RE_PROCDEF:存储流程定义的信息,包括流程定义ID、名称、版本号等。
•ACT_RE_DEPLOYMENT:存储部署的信息,包括部署ID、名称、时间等。
•ACT_RE_MODEL:存储模型信息,包括模型ID、名称、创建时间等。
•ACT_GE_BYTEARRAY:存储字节数组相关信息。
2.2 ACT_RU_* 表这些表存储了运行时相关的数据,即正在执行中的流程实例和任务。
•ACT_RU_EXECUTION:存储执行实例相关信息。
•ACT_RU_TASK:存储任务相关信息。
•ACT_RU_IDENTITYLINK:存储运行时身份链接信息。
2.3 ACT_HI_* 表这些表存储了历史数据,即已完成的流程实例和任务的相关信息。
•ACT_HI_PROCINST:存储历史流程实例相关信息。
•ACT_HI_TASKINST:存储历史任务实例相关信息。
•ACT_HI_ACTINST:存储历史节点实例相关信息。
2.4 ACT_ID_* 表这些表存储了身份认证和授权相关的数据。
•ACT_ID_USER:存储用户信息。
•ACT_ID_GROUP:存储用户组信息。
•ACT_ID_MEMBERSHIP:存储用户与用户组的关系。
2.5 其他表除了上述核心表外,Activiti7还包括一些其他表,用于存储一些特定功能的数据。
activiti数据库表结构全貌解析

activiti数据库表结构全貌解析下⾯本⼈介绍⼀些activiti这款开源流程设计引擎的数据库表结构,⾸先阐述:我们刚开始接触或者使⽤⼀个新的东西(技术)时我们⾸先多问⼀下⾃⼰⼏个为什么?为什么activiti在⼯作流程领域这么流⾏呢?仅仅是因为开源么?实现如此强⼤的流程引擎,activiti底层设计是如何进⾏的?activiti中依赖哪些技术等?这些可能应该是那些刚接触这个开源流程引擎产品的⼈应该有的疑问。
我们在⽤开源产品的都是其实应该多问⾃⼰为什么?这样才能有所进步,不是么?兴许你⼀时兴起,“起笔”就把⼀款属于你⾃⼰的开源作品给做出来了!了解⼀个开源作品,它的底层很重要。
在使⽤它之前,你是否尝试过了解它的底层。
那么这些尝试是否对你有必要呢?个⼈解决有必要,⾸先这个东西确实在你看来是个有⽤的东西,你对它感兴趣。
兴许将来你在应⽤它的时候可能会发现它的BUG,其实⼤⽜写的东西也未必是完美的,兴许你在使⽤时候就发现其中不满意的东西,那么你就可以向开元社区提交的你的BUG!就⽐如说我们在了解activiti的底层数据结构之后,在我们使⽤activiti的时候发现⼀些数据查询过程中出现性能瓶颈时,我们可以尝试分析activiti的数据查询规则,activiti的数据访问层依赖于mybatis,那么我可以分析打包在jar包⾥的关于mybatis的sql配置部分,看看那些所谓⼤⽜们写的sql是否存在问题。
当你发现问题时,你可以对它进⾏修改,然后重新打包。
从⽽满⾜⾃⼰在项⽬有中的需要。
这些都是⼀些关于进阶了解⼀个开源作品的⽅式。
在这样过程中你会发现你在某⽅⾯会有所进步。
以上内容抛砖引⽟,希望对你有所帮助!好吧,请允许我废话了这么久,下⾯开始解析activiti的数据库底层的模型截图:以上就activiti底层数据库23张表结构,个⼈觉得了解底层数据库模型是有必要的,让我们直观的了解⼀个开源作品的底层设计结构,对⽇后⼤伙使⽤的时候能有很⼤的帮助,特别是activiti的⾼级应⽤。
activiti7表结构说明(一)

activiti7表结构说明(一)Activiti7表结构说明1. 概述本文将介绍Activiti7的表结构,为创作者提供更深入的了解和使用指导。
2. 核心表结构Activiti7的核心表结构主要分为以下几个部分:ACT_RE表系列这些表主要用于存储流程定义相关的信息,包括流程定义的版本管理和发布信息。
•ACT_RE_PROCDEF:存储流程定义的基本信息,如流程定义的key、名称、版本等。
•ACT_RE_DEPLOYMENT:存储流程部署的信息,包括部署时间、部署人等。
ACT_RU表系列这些表主要用于存储流程运行时的数据,包括流程实例、任务和执行对象等。
•ACT_RU_EXECUTION:存储流程实例的执行信息。
•ACT_RU_TASK:存储待办任务的信息,包括任务的处理人、处理时间等。
ACT_ID表系列这些表主要用于存储用户和组织机构等身份认证相关的信息。
•ACT_ID_USER:存储用户的基本信息,如用户名、密码等。
•ACT_ID_GROUP:存储组织机构信息,如组织机构名称、描述等。
3. 扩展表结构除了核心表结构外,Activiti7还支持用户对表结构进行自定义扩展。
ACT_GE表系列这些表主要用于存储通用的流程引擎数据,可用于扩展业务实体。
•ACT_GE_BYTEARRAY:存储通用的字节数据,可用于存储流程变量、附件等。
自定义表结构在Activiti7中,用户可以根据业务需求自定义表结构,并在流程定义和流程实例中使用。
4. 总结本文介绍了Activiti7的表结构,包括核心表结构和扩展表结构。
了解这些表的作用和关系,有助于创作者更好地使用Activiti7进行流程设计和管理。
以上是Activiti7表结构说明的详细内容。
希望本文对您有所帮助,欢迎您的阅读和使用。
参考资料•Activiti官方文档:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Activiti数据表结构和核心对象关系
西安创富电子科技有限公司
二〇一三年九月
版本历史
目录
1ACTIVITI数据库表结构--------------------------------------------------------------------------------------- 4
1.1 数据库表名说明 ---------------------------------------------------------------------------------------- 4
1.2 数据库表结构 ------------------------------------------------------------------------------------------- 4 2ACTIVITI中主要对象的关系 -------------------------------------------------------------------------------- 5
1Activiti数据库表结构
1.1数据库表名说明
Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。
并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配。
◆ACT_GE_* : “GE”代表“General”(通用),用在各种情况下;
◆ACT_HI_*: “HI”代表“History”(历史),这些表中保存的都是历史数
据,比如执行过的流程实例、变量、任务,等等。
当系统中配置history的信息记录级别为“none”时,这一类表也可以不用;
◆ACT_ID_* : “ID”代表“Identity”(身份),这些表中保存的都身份信
息,如用户和组以及两者之间的关系。
如果Activiti被集成在某一系统当中的话,这些表可以不用,可以直接使用现有系统中的用户或组信息;
◆ACT_RE_* : “RE”代表“Repository”(仓库),这些表中保存一些‘静
态’信息,如流程定义和流程资源(如图片、规则等);
◆ACT_RU_*: “RU”代表“Runtime”(运行时),这些表中保存一些流程实
例、用户任务、变量等的运行时数据。
Activiti只保存流程实例在执行过程中的运行时数据,并且当流程结束后会立即移除这些数据,这是为了保证运行时表尽量的小并运行的足够快;
1.2数据库表结构
Activiti数据表清单:
2Activiti中主要对象的关系
本节主要介绍在工作流中出现的几个对象及其之间的关系,以及在Activiti 中各个对象是如何关联的。
在开始之前先看看下图,对整个对象结构有个了解,再结合实例详细介绍理解。
图1.Activiti中几个对象之间的关系
我们模拟一个请假的流程进行分析介绍,该流程主要包含以下几个步骤:
◆员工申请请假
◆部门领导审批
◆人事审批
◆员工销假
ProcessInstance对象
员工开始申请请假流程,通过runtimeService.startProcessInstance()方法启动,引擎会创建一个流程实例(ProcessInstance)。
简单来说流程实例就是根据一次(一条)业务数据用流程驱动的入口,两者之间是一对一的关系。
流程引擎会创建一条数据到ACT_RU_EXECUTION表,同时也会根据history的级别决定是否查询相同的历史数据到ACT_HI_PROCINST表。
启动完流程之后业务和流程已经建立了关联关系,第一步结束。
启动流程和业务关联区别:
◆对于自定义表单来说启动的时候会传入businessKey作为业务和流程的
关联属性
◆对于动态表单来说不需要使用businessKey关联,因为所有的数据都保存
在引擎的表中
◆对于外部表单来说businessKey是可选的,但是一般不会为空,和自定义
表单类似
Execution对象
对于初学者来说,最难理解的地方就是ProcessInstance与Execution之间的关系,要分两种情况说明。
Execution的含义就是一个流程实例(ProcessInstance)具体要执行的过程对象。
不过在说明之前先声明两者的对象映射关系:
ProcessInstance(1)→ Execution(N),(其中N >= 1)。
1)值相等的情况:
除了在流程中启动的子流程之外,流程启动之后在表ACT_RU_EXECUTION中的字段ID_和PROC_INST_ID_字段值是相同的。
图2.ID_和PROC_INST_ID_相等
2)值不相等的情况:
不相等的情况目前只会出现在子流程中(包含:嵌套、引入),例如一个购物流程中除了下单、出库节点之外可能还有一个付款子流程,在实际企业应用中付款流程通常是作为公用的,所以使用子流程作为主流程(购物流程)的一部分。
当任务到达子流程时引擎会自动创建一个付款流程,但是这个流程有一个特殊的地方,在数据库可以直观体现,如下图。
图3. ID_和PROC_INST_ID_不相等
上图中有两条数据,第二条数据(嵌入的子流程)的PARENT_ID_等于第一条数据的ID_和PROC_INST_ID_,并且两条数据的PROC_INST_ID_相同。
执行子流程主流程挂起。
Task对象
前面说了ProcessInstance和业务是一对一关联的,和业务数据最亲密;而Task则和用户最亲密的(UserTask),用户每天的待办事项就是一个个的Task 对象。
从图1中看得出Execution和Task是一对一关系,Task可以是任何类型的Task实现,可以是用户任务(UserTask)、Java服务(Java ServiceTask)等,在实际流程运行中只不过面向对象不同,用户任务(UserTask)需要有人为参与完成(complete),Java服务需要由系统自动执行(execution)。
图4. 表ACT_RU_TASK
Task是在流程定义中看到的最大单位,每当一个Task完成的时候会引擎会把当前的任务移动到历史中,然后插入下一个任务插入到表ACT_RU_TASK中。
结合请假流程来说就是让用户点击“完成”按钮提交当前任务是的动作,引擎自动根据任务的顺序流或者排他分支判断走向。
HistoryActivity(历史活动)
图5. 表ACT_HI_ACTINST
Activity包含了流程中所有的活动数据,例如开始事件(图5表中的第1条数据)、各种分支(排他分支、并行分支等,图5表中的第2条数据)、以及刚刚提到的Task执行记录(如图5表中的第3、4条数据)。
来根本没有Task相关的字段。
结合请假流程来说,如Task中提到的当完成流程的时候所有下一步要执行的任务(包括各种分支)都会创建一个Activity记录到数据库中。
例如领导审核节点点击“同意”按钮就会流转到人事审批节点,如果“驳回”那就流转到调整请假内容节点,每一次操作的Task背后实际记录更详细的活动(Activity)。