flowable实战(九)flowable数据库表中流程实例、活动实例、任务实例三者之间关系分析

场景模拟(请假流程):

员工申请请假
部门领导审批
人事审批
员工销假
本文用次例介绍在工作流中出现的几个对象及其之间的关系,以及在Activiti中各个对象是如何关联的。

在线演示实例:http://aws.kafeitu.me:8080/kft-activiti-demo

在开始之前先看看下图,对整个对象结构有个了解,再结合下面的详细介绍理解。
在这里插入图片描述图1 Activiti中几个对象之间的关系

1.ProcessInstance
员工开始申请请假流程,通过runtimeService.startProcessInstance()方法启动,引擎会创建一个流程实例(ProcessInstance)。

简单来说流程实例就是根据一次(一条)业务数据用流程驱动的入口,两者之间是一对一的关系。

擎会创建一条数据到ACT_RU_EXECUTION表,同时也会根据history的级别决定是否查询相同的历史数据到ACT_HI_PROCINST表。

启动完流程之后业务和流程已经建立了关联关系,第一步结束。

启动流程和业务关联区别:

对于自定义表单来说启动的时候会传入businessKey作为业务和流程的关联属性
对于动态表单来说不需要使用businessKey关联,因为所有的数据都保存在引擎的表中
对于外部表单来说businessKey是可选的,但是一般不会为空,和自定义表单类似
关于各种表单之间的区别请参考:比较Activiti中三种不同的表单及其应用

2.Execution
初学者最搞不懂的就是ProcessInstance与Execution之间的关系,要分两种情况说明。

Execution的含义就是一个流程实例(ProcessInstance)具体要执行的过程对象。

不过在说明之前先声明两者的对象映射关系:

ProcessInstance(1)—>Execution(N),其中N >= 1。

值相等的情况:

除了在流程中启动的子流程之外,流程启动之后在表ACT_RU_EXECUTION中的字段ID_和PROC_INST_ID_字段值是相同的。
在这里插入图片描述
图2 ID_和PROC_INST_ID_相等

值不相等的情况:

不相等的情况目前只会出现在子流程中(包含:嵌套、引入),例如一个购物流程中除了下单、出库节点之外可能还有一个付款子流程,在实际企业应用中付款流程通常是作为公用的,所以使用子流程作为主流程(购物流程)的一部分。

当任务到达子流程时引擎会自动创建一个付款流程,但是这个流程有一个特殊的地方,在数据库可以直观体现,如下图。
在这里插入图片描述
图3 ID_和PROC_INST_ID_不相等

上图中有两条数据,第二条数据(嵌入的子流程)的PARENT_ID_等于第一条数据的ID_和PROC_INST_ID_,并且两条数据的PROC_INST_ID_相同。

上图还有一点特殊的地方,字段IS_ACTIVE_的值一个是0一个是1,说明正在执行子流程主流程挂起。

3.Task
刚刚说了ProcessInstance是和业务一对一关联的,和业务数据最亲密;Task是和用户最亲密的(UserTask),用户每天的待办事项就是一个个的Task对象。

从图1中看得出Execution和Task是一对多关系,Task可以是任何类型的Task实现,可以是用户任务(UserTask)、Java服务(ServiceTask)等,在实际流程运行中只不过面向对象不同,用户任务需要有人完成(complete),Java服务需要有系统自动执行(execution)。
在这里插入图片描述
图4 表ACT_RU_TASK

Task是在流程定义中看到的最大单位,每当一个task完成的(complete)时候会引擎把当前的任务移动到历史中,然后插入下一个任务插入到ACT_RU_TASK中。

从图4中可以看出

结合请假流程来说就是让用户点击“完成”按钮提交当前任务是的动作,引擎自动根据任务的顺序流或者排他分支判断走向。

4.Activity
Activity——活动。
在这里插入图片描述
图5 表ACT_HI_ACTINST

Activity包含了流程中所有的活动数据,例如开始事件(图5中的第1条)、各种分支(排他、并行等,图5中的第2条数据)、以及刚刚提到的Task执行记录(如图5中的第3、4条数据)。

有些人认为Activity和Task是多对一关系,其实不是,从上图中可以看出来根本没有Task相关的字段。

结合请假流程来说如Task中提到的当完成流程的时候所有下一步要执行的任务(包括各种分支)都会创建一个Activity记录到数据库,例如领导审核节点点击“同意”按钮就会流转到人事审批节点,如果“驳回”那就流转到调整请假内容节点,每一次操作的task背后实际记录更详细的活动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看懂云计算、虚拟化和容器,这一篇就够啦!

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君来源 | 鲜枣课堂“云计算”这个词,相信大家都非常熟悉。作为信息科技发展的主流趋势,它频繁地出现在我们的眼前。伴随它一起出现的,还有这些概念名词——OpenStack、Hypervisor、KVM…

一张图读懂阿里巴巴一站式研发协同云——云效

摘要: 程序员、测试员、项目经理,你们有freestyle吗?阿里云云效,一站式企业协同研发云,“需求->开发->测试->发布->运维->运营”端到端的协同服务和研发工具支撑,助力企业快速创新迭代和研发…

flowable实战(十)flowable 启动流程到完成所有任务之间的数据库变化

来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化 先给出流程图,很简单的流程,就是两个UserTask: 代码如下: DeploymentBuilder builderrepositoryService.createDeployment(); Deployment deploymentbui…

阿里敏捷教练如何优化优酷需求分析流程?

摘要: 如何帮助优酷迅速融合到阿里研发体系?如何优化优酷的需求分析流程?针对需求信息不明确,开发出来的功能不是产品想要的痛点如何解决? 点此查看原文:http://click.aliyun.com/m/41381/ 导读&#xff1a…

java float 高效加减_java Double 进行加减乘除

Double 工具类package org.fh.util;import java.io.Serializable;import java.math.BigDecimal;import java.math.RoundingMode;/*** double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型* 整型地方法适合于货币…

Gartner预计2019年全球半导体收入将下滑9.6%;苹果中国用户正流向华为;Facebook将支付50亿美元与FTC和解...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

摘要: 标签 PostgreSQL , 多重函数数组 , UDF索引 , 过滤 , 文本处理 背景 PG的数组类型,被广泛应用于 画像系统 , 标签系统。 在一些业务重建中,对数组内容的定义往往包含了多重含义,例如即包含了标签本身&#xff0c…

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要: SQL基础有这些操作(按照执行顺序来排列): from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操…

flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)

一、ACT_RU_EXECUTION 表(很多初学者迷惑的一张表,以为是流程实例表,其实它叫执行实例表):这个表和act_run_task表,一起控制了用户任务的产生与完成等。 这个表是工作流程的核心表,这个表会体现主干与分支…

阿里云大数据MaxCompute计算资源分布以及LogView分析优化

摘要: MaxCompute(原ODPS)的概念 海量数据处理平台,服务于批量结构化数据的存储和计算,提供海量数据仓库的解决方案以及针对大数据的分析建模服务.(官方文档有这里就不多做介绍了)官方文档链接 优势 用户不必关心分布式计算细节&a…

计算机视觉领域还能耍什么花样?

从移动支付的自动贩卖机到刷脸支付的智能货柜;从亲自到柜台验证到人脸核身远程开卡;从排队买票、排队进门的糟糕旅游体验到提前预约,刷脸入园的智慧旅游;……从计算机视觉应用的产业板块上分析,以视频应用为基础的视频…

MaxCompute MapReduce

摘要: 大数据计算服务(MaxCompute)的功能详解和使用心得 点此查看原文:http://click.aliyun.com/m/41384/ 前言 MapReduce已经有文档,用户可以参考文档使用。本文是在文档的基础上做一些类似注解及细节解释上的工作。 功能介绍 MapReduce 说起…

Flowable springboot项目自定义中文字体

Flowable springboot项目自定义中文字体 摘要:在flowable框架中,当我们想要集成springboot框架的时候,可能要设置中文字体,flowable6.4之前的版本因为没有可以设置字体的属性,所以我们没法进行中文字体的设置&#xff…

漫画 | Kubernetes带你一帆风顺去远航

戳蓝字“CSDN云计算”关注我们哦!来源 | Google Cloud如果你是一个狂立学习flag却屡屡打脸的懒癌晚期,或者是一个对云计算方面云里雾里,不知所措的好学者,亦或是一位资深行业专家,都欢迎关注【CSDN云计算公众号】&…

Kubernetes与Docker基本概念与常用命令对照

摘要: Docker是众多用户上手入门的基础容器和编排工具,提供了良好的开发者体验。Kubernetes是强大的容器编排平台,功能丰富。它们有很多概念和操作都有类似之处。我们今天会和大家对比基本概念与常用命令,可以方便熟悉Docker的用户…

flowable 设置流程跟踪高亮线的颜色

背景:在实际情况下,很多人对这个红色的高亮有意见,所以这里我把我的修改颜色的代码分享出来,希望对大家有帮助。(如果有问题可以加QQ群:633168411 里面很多高手,人也都非常善良) 效果…

连续启动 crash 自修复技术实现与原理解析

摘要: 如果 app 连续 crash 两次无法启动,用户往往会选择卸载。本文介绍如何该类 crash 的自修复技术。 点此查看原文:http://click.aliyun.com/m/41487/ 作者:阿里云-移动云-大前端团队 前言 如果 app 连续 crash 两次无法启动…

舞动的桥 阿里云首个百万IOPS云盘的背后

摘要: 近日,阿里云推出了首个百万IOPS的ESSD云盘服务,性能上有50倍的飞跃,同时还具备超高吞吐、超低时延等特性,在真实业务场景中,PostgreSQL数据库的写入速度快了26倍。 如此超高的性能,有人会…

Kubernetes上的服务网格 Istio - 分布式追踪篇

摘要: 2017年5月,Google、IBM和Lyft发布了开源服务网格框架Istio,提供微服务的连接、管理、监控和安全保护。Istio提供了一个服务间通信的基础设施层,解耦了应用逻辑和服务访问中版本管理、安全防护、故障转移、监控遥测等切面的问…

flowable实现流程回退功能

此版本为旧的版本,建议参看新的版本6.4.0 前期项目要求实现流程回退(仅要求回退到上一节点),所使用的flowable版本是6.2.0-SANPSHOT。在网上收到的流程回退的例子都是activity的,然而activity的很多接口在flowable中都…