【activiti】工作流入门基础概念

Activiti

      • 为什么使用activiti
      • activiti流程步骤
      • 表结构分四种:
      • 四个重要的服务类
      • BusinessKey
      • 挂起
      • 流程变量:
      • 注意:
      • 网关:精细控制流程走向
      • 组任务分配:
      • 抄送:
      • activiti工作流获取流程定义中所有的节点:

为什么使用activiti

状态-------------------------------------------------->引擎engin(业务变动不影响程序的进行)
每个人只能看到个人负责的,流程变更困难 bpmn建模语言

activiti流程步骤

步骤:
1、部署流程
2、定义流程
3、部署流程定义:使用activiti中的API把流程定义存储,在Acitivti执行过程汇总可以查询定义的内容,通过数据库来存储业务流程
4、启动流程实例:ProcessInstance,启动流程实例代表开始一次业务流程的运作。【提交某个申请后-开启流程-推动审批进行】
5、用户查询待办任务(task):系统业务已经交给了activiti管理,通过activiti就可以查询当前流程执行到哪个步骤,
6、用户办理任务:用户查到待办任务后,办理某个业务【如果业务办理还需要其他用户办理,就可以由activiti帮我们把工作流程往后面推动】
7、流程结束:任务办理没有下一个任务节点后,流程实例就执行完成了。

表结构分四种:

表结构:
re:流程定义,流程静态资源
ru:runtime任务
hi:历史信息
ge:通用属性

//示例:
SELECT * FROM act_re_deployment #流程定义部署表,记录流程部署信息
SELECT * FROM act_re_procdef #流程定义表,记录流程定义信息
SELECT * FROM act_ge_bytearray #资源表 (文件存储地方)

四个重要的服务类

ProcessEngine:HistoryService,RepostoryService,RuntimeService,TaskService,ManagementService(开发维护使用)

bpmn设计:id(定义的文件后缀前的东西) name assignee(审批人) 流程设计 id name
bpmn文件:definnitions配置—>process(多个也可,正常一个)定义的工作流程---->bpmndi画布图形
图png

流程定义:ProcessDefinition是BPMN文件定义的一个具体的业务流程,
流程实例:ProcessInstance则是指一个具体的业务流程
某人发起什么就会实例化什么 不同流程实例之间按时互相不影响的 【定义部署后就形成了流程实例,数据库就存在了】

BusinessKey

BusinessKey:在ru_execution表中----------> 【绑定业务ID】
流程发起后,审批人在此之前要知道相关审批单信息【请假时间、请假理由】是如何绑定到流程中呢?

挂起

挂起:就是说每月最后一天不处理出差申请,这个流程暂停至此
流程定义挂起,该流程下就不能启动新的流程定义
如果是激活状态,改为挂起状态。参数一:流程定义id 参数2:是否暂停 参数3:暂停的时间
repositoryService.suspendProcessDefinitionById( , , );

流程实例挂起,则此流程不再执行,如果进行完成操作将报错
runtimeService.suspendProcessInstanceById( instanceId );

概念:
之前我们已经测试了如何删除一个流程,有很多时候,我们只是需要暂时停止一个流程,过一段时间就要恢复。
例如月底不接受报销审批流程,年底不接受借贷审批流程,或者非工作日不接受售后报销流程等,这个时候,就可以将流程进行挂起操作。
挂起后的流程就不会再继续执行。

挂起任务?不可以

流程变量:

之前定义的请假流程并没有用到流程变量,每个步骤都是非常固定的,但是当我们需要实现一些复杂的业务流程,
比如请假3天以内由部门经理审批,3天以上需要增加总经理审批这样的流程时,就需要用到流程变量

注意:

【和之前介绍的业务关键字有些相似,都可以携带业务信息,并且可以通过activiti的api查询出来。但在使用中应减少流程变量中的业务信息】
流程变量的类型是Map<String,Object>。
所以,流程变量比业务关键字要强大很多。变量值不仅仅是字符串,也可以是POJO对象。
但是当需要将一个POJO对象放入流程变量时,要注意这个对象必须要实现序列化接口serializable
Map<String,Object> variables = new HashMap<>();
流程变量作用域:Global和Local两种 使用:${ 流程变量 } ${ 流程变量<3 }

  • Global变量:
    这个是流程变量的默认作用域,表示是一个完整的流程实例。(定义一个变量,在这整个流程中会传递下去)
    Global变量中变量名不能重复,如果设置了相同的变量名,后面设置的值会直接覆盖前面设置的变量值。

    • 启动流程时设置变量
      在启动流程实例时设置流程变量,这时流程变量的作用域是整个流程实例。相当于是Global作用域。核心代码:
      ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, map);
    • 任务办理时设置变量
      在完成任务时设置流程变量,该流程变量只有在该任务完成后其它结点才可使用该变量,
      它的作用域是整个流程实例,如果设置的流程变量的key在流程实例中已存在相同的名字则后设置的变量替换前边设置的变量。
      核心代码:taskService.complete(task.getId(), map); 任务完成交给的下一个人
      注意:这种方式设置流程变量,如果当前执行的任务ID不存在,则会抛出异常,流程变量也会设置失败。
    • 通过当前流程实例 设置………………
  • Local变量:
    Local变量的作用域只针对一个任务或一个执行实例的范围,没有流程实例大。
    Local变量由于作用在不同的任务或不同的执行实例中,所以不同变量的作用域是互不影响的,变量名可以相同。
    Local变量名也可以和Global变量名相同,不会有影响。

    ………………

网关:精细控制流程走向

线条联系已将无法支持,复杂流程需要用网关【排他网关,并行网关,包含网关,事务网关】
  1. ExlusiveGateway排他网关:决定接下来走哪一条线,如果从网关出去的线所有条件都不满足系统则抛出异常。
    所有条件满足的话,会选择“id”小的那一条去走

  2. ParallelGateway并行网关:允许将流程分成多条分支,也可以把分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的。
    fork分支:并行后的所有外出顺序流,为每个顺序流都创建一个并发分支
    join汇聚:所有到达并行网关,在此等待的进入分支,直到所有进入顺序流的分支都到达以后,流程就会通过汇聚网关。
    注意:每一条分支都会走,条件会被忽略,技术经理和财务经理都会执行,会汇聚,才会完成后续的流程

  3. InclusiveGateway包含网关:可以看作是排他和并行的结合体

  4. 事务网关:不常用

组任务分配:

  • 多个经理找哪个经理批(在候选人中任选一个)
    taskService.claim(taskId, candidateUser_定 义任务领取人) //拾取任务
  • 退还任务:把负责人设置为null
    taskService.setAssigine(taskId,null)

抄送:

抄送:抄送是指将你的审批抄送给【需要了解审批内容但不具备决定权】的人。

activiti工作流获取流程定义中所有的节点:

将xml定义文件解析成BpmnModel对象,使用BpmnModel的 getMainProcess()获取一个Process对象,
该对象实际是一个继承自BaseElement、FlowElementContainer的节点容器,通过 getFlowElements()获取当前流程定义文件中所有的节点对象

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

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

相关文章

[JVM] 5. 运行时数据区(2)-- 程序计数器(Program Counter Register)

一、概述 JVM中的程序计数器&#xff08;Program Counter Register&#xff09;是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间&#xff0c;几乎可以忽略不记。也是运行速度最快的存储区域。在 JVM 规范中&#xff0c;每个线程都有它自己的程序计数器&#xff0c;是…

redis之主从复制、哨兵、集群

文章目录 一、redis的高可用1.1 redis高可用的概念1.2 Redis的高可用技术 二、redis 主从复制2.1主从复制的原理2.2搭建Redis 主从复制 三、Redis 哨兵模式3.1搭建Redis 哨兵模式3.2启动哨兵模式3.3查看哨兵信息3.4故障模拟 四、Redis 群集模式4.1搭建Redis 群集模式 一、redis…

【Excel】excel多个单元格的内容合并到一个单元格,并使用分隔符

方法一&#xff1a;使用连接符 & 左键单击选中“D2”单元格&#xff0c;在D2单元格中输入公式“A2&B2&C2”&#xff0c;按“Enter”即可实现数据合并。 ------如果想连接的时候&#xff0c;中间加分隔符&#xff0c;可以使用&#xff1a;公式A2&"&#xf…

常用的rsync使用方式

发送文件夹并保持文件属性不变 rsync -avr path xxx192.168.x.x:~/path 关于rsync的说明&#xff1a; rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm. Usage: rsync [OPTION]... SRC [SRC]... DEST or rsyn…

STL unordered_set的eraseyong fa

如下unordered_set的erase操作导致程序崩溃&#xff0c;crash。 #include <iostream> #include <string> #include <unordered_set> int main () { std::unordered_set<std::string> myset {"USA","Canada","France&qu…

Azure Kinect 之 Note(一)

Azure Kinect Azure Kinect DK 是一款开发人员工具包&#xff0c;配有先进的AI 传感器&#xff0c;提供复杂的计算机视觉和语音模型。 Kinect 将深度传感器、空间麦克风阵列与视频摄像头和方向传感器整合成一体式的小型设备&#xff0c;提供多种模式、选项和软件开发工具包(S…

面试题更新之-HTML5的新特性

文章目录 导文新特性有哪些&#xff1f;HTML5的新特性带来了许多好处 导文 面试题更新之-HTML5的新特性 新特性有哪些&#xff1f; HTML5引入了许多新特性和改进&#xff0c;以下是一些HTML5的新特性&#xff1a; 语义化标签&#xff1a;HTML5引入了一系列的语义化标签&#…

远程在Ubuntu20.04安装nvidia显卡驱动

第零步&#xff0c;找人装一个todesk。 在终端运行&#xff1a; ifconfig 记住ip地址&#xff0c;后面要用。 第一步&#xff0c;安装软件&#xff1a; sudo apt-get update sudo apt-get install g gcc make 第二步&#xff0c;下载显卡驱动&#xff1a; 官方驱动 | NVI…

【ThinkPHP】实现一个逆向工程生成model

ThinkPHP为了节省一些重复的步骤&#xff0c;写了个简单版的生成model的工具&#xff0c;逆向生成model代码&#xff0c;节省时间&#xff0c;专注写业务代码。 ThinkPHP中的命令行也提供了一些生成代码的命令&#xff1a; make:controller 创建控制器 make:model 创建模型 m…

医院制剂研发与真实世界评价论坛圆满闭幕

医院制剂是新药的摇篮和宝库&#xff0c;现代科技为医院制剂的研发和转化赋能。在新时代新政策下&#xff0c;2023年07月16日&#xff0c;由湖南省药学会医院制剂研发与真实世界评价专业委员会&#xff08;下称“专委会”&#xff09;主委单位湖南易能生物医药有限公司&#xf…

划片机的技术分解

划片机是一种切割设备&#xff0c;主要用于将硬脆材料&#xff08;如硅晶圆、蓝宝石基片、LED基片等&#xff09;分割成较小的单元。其工作原理是以强力磨削为划切机理&#xff0c;通过空气静压电主轴带动刀片与工件接触点的划切线方向呈直线运动&#xff0c;将每一个具有独立电…

MVVM模式的具体实现

MVVM即Model-View-ViewModel的简写。即模型-视图-视图模型。 模型&#xff08;Model&#xff09;指的是后端传递的数据。 视图(View)指的是所看到的页面。 视图模型(ViewModel)是mvvm模式的核心&#xff0c;它是连接view和model的桥梁。 它有两个方向&#xff1a; 一是将视图(V…

概率论的学习和整理18:为什么 P(至少成功1次) = Σ P(几何分布) ,总结几何分布和连续失败概率的关系,二项分布和累计成功k次的关系

目录 1 先说结论&#xff1a; 2 Σ几何分布的P(xn) P(n次试验至少成功1次) 2.1 几何分布的概率 2.2 这个是可以证明的&#xff0c;下面是推导过程 2.3 怎么理解呢&#xff1f; 3 另外&#xff0c;P(累计成功k次) ΣP(成功k次的二项分布) 3.1 成功k次的概率 和 累计成…

回收站怎么看当天删除的文件?在回收站中找不到被删除文件怎么回事

在日常使用电脑的过程中&#xff0c;我们常常会遭遇删除文件的错误&#xff0c;这时回收站就像是一剂“后悔药”。然而&#xff0c;当回收站中堆积了许多已删除的文件时&#xff0c;我们如何才能找到当天删除的文件呢&#xff1f;如果回收站在这时无法提供文件&#xff0c;我们…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章&#xff1a;本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

Python应用实例(二)数据可视化(一)

数据可视化&#xff08;一&#xff09; 1.安装Matplotlib2.绘制简单的折线图2.1 修改标签文字和线条粗细2.2 矫正图形2.3 使用内置样式2.4 使用scatter()绘制散点图并设置样式2.5 使用scatter()绘制一系列点2.6 自动计算数据2.7 自定义颜色2.8 使用颜色映射2.9 自动保存图表 数…

Visual Studio 自定义的颜色字体不生效

问题描述&#xff1a; 1、dll1中引用第三方库的类不识别&#xff0c;颜色黑白&#xff0c;自定义颜色不生效&#xff1b;定义的是结构体 2、在dll2引用另一个dll1中的结构体。结构体不识别&#xff0c;今天成员函数cpp中自定义颜色不生效。 问题解决方式&#xff1a; 全部清…

【MySQL备份与还原、索引、视图】练习

一、备份与还原 /***************************样例表***************************/CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Lear…

ArrayUtil java

文档&#xff1a;ArrayUtil.note 链接&#xff1a;http://note.youdao.com/noteshare?id36896c50b63c788468746a5e32cd0554&sub18EC1C3C5721449CBB8B022BDCBBB6D9 添加链接描述 package top.starp.util;//import netscape.javascript.JSObject;import java.util.List;pub…

Debezium同步之限制目标端数据库写入条数

前言 当我们用debezium进行数据同步 目标端数据库为关系型数据库的时候&#xff0c;源端数据库产生的数据量比较多&#xff0c;当Kakfa抽取过来的数据 大批量同步到目标库数据库的时候&#xff0c;会造成写入条数的拥挤。此事我们需要 在目标端json文件配置限制写入条数。 jso…