当前位置: 首页 > news >正文

Flowable学习笔记

Flowable的实体基本概念:

1 流程定义(Process Definition)和流程实例(Process Instance)。

前者定义流程的模板(比如请假的审批规则),后者是每个运行时生成的流程实例(比如某次请假的审批申请)。所以前者使用Flowable的RepositoryService管理,后者使用RuntimeService管理。

2 事件(event)、任务(task)、顺序流(sequence flow)、网关(gateway)

事件是系统预设的操作节点,常用的事件有startEvent和endEvent,标记一个流程定义的起始和结束。

任务是最常见的操作节点,是工作流的核心组成部分。用户任务是需要用户界面操作的(比如上级审批、老板审批),服务任务是系统处理的(比如执行某些条件后,标记完成向下流转)等。用户任务需指定任务执行人,服务任务需指定执行的服务(如java类)。

流是将不同的事件或任务连接起来的有向箭头。流上可以附加条件,仅条件满足时才流动。

网关用于统筹不同的流,通过排他网关(根据条件N选1),并行网关(无条件N个并行),相容网关(根据条件N选m),事件网关(根据事件和逻辑决定选择),实现流的条件。排他网关举例:请假<4天,A审批;>=4天,B审批。

3 活动(activity)

是BPMN 2.0概念,意为每个执行节点。event、task、flow、gateway都是一个activity。每个活动有一个id,唯一标志。

4 执行(execution)

指当前流程实例执行到的节点,可以理解为一个指针,指向当前活跃的活动(activity)。一个流程实例同一时间点可能有多个执行(如并行网关指向多个task)。

其他概念:

1 部署(deployment)

指将定义的流程xml作为流程定义存储到数据库,使其支持生成流程实例的过程。

2 任务执行人

执行人可以通过assignee(指定某个人执行)、candidateUsers(指定某些人执行)、candidateGroups(指定某些组合执行)来完成一个或多个执行人指定。执行人按先到先得的规则进行任务执行。

3 事件监听器(Listener)

Flowable对不同实体定义了许多事件(注意:该事件不是上文提到的event实体,而是一个动作触发的告知事项)。事件(在可用时)提供typeexecutionIdprocessInstanceIdprocessDefinitionId

事件监听器对上述事件进行监听可以对指定的activity定义一个Listener。

常用的示例:
1)TaskListener:对task的监听关联的create, assignment, comleted, deleted四种事件。可以使用TaskListener对指定的Task进行监听。TaskListener 的事件类型和执行时机是与任务相关的,它可以访问任务相关的信息,并可以对任务进行操作(例如设置任务的执行人  指定任务的代理人  发送通知等),因此通常用于处理与任务相关的事件。
2)ExecutionListener:对activity(包括sequenceFlow)的监听关联的start, take, end三种事件,可以使用ExecutionListener监听(也可以对event节点监听),可以捕获的事件:1.流程实例的启动和结束。2.流程执行转移。3.活动的启动和结束。4.网关的启动和结束。5.中间事件的启动和结束。6.启动事件的结束,和结束事件的启动。ExecutionListener 的事件类型和执行时机都是固定的,它不能直接访问任务相关的信息(例如任务的候选人、任务的执行者等)。
3)FlowableEventListener,资料较少,目前理解是全局事件监听器,用于定义整个流程实例中,指定的event执行逻辑(包括每种实例的每个event),对processInstance中的所有task对应的event生效。功能更普适,但配置成本更高,且对所有同类型事件生效(如Task-Created等)。和上述的两种Listener互为补充。

中文用户文档:Flowable BPMN 用户手册 (v 6.3.0)

代码攻略:采用springboot+flowable快速实现工作流_spring boot 工作流 vue-CSDN博客

https://www.cnblogs.com/zhlblogs/p/14041899.html

https://juejin.cn/post/7250044327882948667

事件监听器 :: Jmix 文档

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • NISP 一级 —— 考证笔记合集
  • ISO26262和Aspice之间的关联
  • TulingMember进销存系统
  • 2409atl,atl3.0到7.0的变化
  • 828华为云征文|Flexus云服务器X实例快速部署在线测评平台,适用各种信息学教学
  • EvoSuite使用总结
  • 【重学 MySQL】十四、显示表结构
  • git的简单学习
  • Node.js 入门:中间件与安全性深度解析
  • 项目9-网页聊天室9(测试报告)
  • scrapy 爬取微博(一)【最新超详细解析】:创建微博爬取工程
  • 华为 HCIP-Datacom H12-821 题库 (4)
  • dubbo是什么?,能做什么?以及其工作流程
  • vue3.5新特性整理
  • pytest实战演练
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Fundebug计费标准解释:事件数是如何定义的?
  • Git 使用集
  • mongodb--安装和初步使用教程
  • PaddlePaddle-GitHub的正确打开姿势
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • React组件设计模式(一)
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 三栏布局总结
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 国内开源镜像站点
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • (1)Jupyter Notebook 下载及安装
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (转)iOS字体
  • .equals()到底是什么意思?
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /etc/fstab 只读无法修改的解决办法
  • @Transactional 竟也能解决分布式事务?
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [20161214]如何确定dbid.txt
  • [AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
  • [BeginCTF]真龙之力
  • [BT]BUUCTF刷题第9天(3.27)
  • [C/C++]关于C++11中的std::move和std::forward
  • [C++] C++11详解 (一)
  • [C++]spdlog学习
  • [CSS]中子元素在父元素中居中
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [java/jdbc]插入数据时获取自增长主键的值
  • [java后端研发]——文件上传与下载(2种方式)
  • [java基础揉碎]文件IO流
  • [JDK工具-5] jinfo jvm配置信息工具