Activiti6.0学习笔记

2024-06-20 22:58
文章标签 学习 笔记 activiti6.0

本文主要是介绍Activiti6.0学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、运行官方例子

activiti-admin.war

activiti-app.war

 

工作流平台:localhost:8080/activiti-app admin test

管理平台:localhost:8080/activiti-admin admin admin

 

二、流程引擎配置

1、指定自己的配置文件

ProcessEngineConfiguration processEngineConfiguration = 
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti.xml");ProcessEngineConfiguration processEngineConfiguration = 
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti.xml", "beanName");

2、数据库更新策略

3、历史配置

 

三、组件

RepositoryService:管理流程定义,流程部署。

RuntimeService:流程运行时,对管理流程实例。

TaskService:管理流程任务,如任务提醒、任务完成、创建任务、分配任务。

IdentityService:管理流程角色数据,包括用户组、用户以及它们之间的关系。

ManagementService:管理、维护流程引擎。

HistoryService:操作流程的历史数据,包括查询、删除这些历史数据。

DynamicBpmnService:使用该服务,可以不需要重新部署流程模型,就可以实现对流程模型的部分修改。

 

三、表设计

ACT_GE(general):通用数据

ACT_GE_BYTEARRAY:流程图、流程流、流程过程中的图

ACT_GE_PROPERTY:activiti内置数据

ACT_RE(repository):保存流程定义、部署信息

ACT_RE_DEPLOYMENT:一次部署可能包含多个流程

ACT_RE_PROCDEF:流程定义表

ACT_ID(identity):身份数据表,没有与流程做关联

ACT_ID_USER:用户表

ACT_ID_GRUP:分组表

ACT_ID_MEMBERSHIP:用户分组表

ACT_ID_INFO:保存用户账号、用户信息 (type: account, userinfo, NULL,patient_id:自关联),类似EVA,一条userinfo表示一个column。

ACT_RU(runtime):保存流程运行时的数据,流程实例、执行流、任务、参数等

ACT_RU_EXECUTION:保存流程实例,执行流

ACT_RU_TASK:任务表

ACT_RU_VARIABLE:任务参数、流程参数

ACT_RU_IDENTITYLINK:流程任务与身份的关系表

ACT_RU_JOB:一般工作表

ACT_RU_TIMER_JOB:定时执行工作表

ACT_RU_SUSPENDED_JOB:中断工作表

ACT_RU_DEADLETTER_JOB:无法执行的工作表

ACT_RU_EVENT_SUBSCR:事件描述表,流程到达事件节点写入事件数据

ACT_HI(history):历史数据表,跟运行时相对应

ACT_HI_PROCINST:流程实例的历史数据

ACT_HI_TASKINST:历史任务表,流程到达某个任务点时写入数据

ACT_HI_VARINST:历史参数表

ACT_HI_ACTINST:历史行为表,追踪完整流程信息

ACT_HI_ATTACHMENT:附件表

ACT_HI_COMMENT:评论表

ACT_DMN:activiti自带规则引擎的表

 

四、查询

createXxxQuery()

Query:

asc()

desc()

count()

list()

listPage()

singleResult()

 

五、

流程部署

查询流程文件/图

删除部署资源

 

六、

流程定义

中止、激活

 

七、任务

任务角色:

任务候选人(组)

任务持有人

任务代理人

 

taskService.claim

taskService.complete

 

任务参数设置和获取

任务参数

本地参数:作用域本流程节点。taskService.setVariableLocal,taskService.complete之后,重新查询出task的对应variable为空

全局参数:作用域整个流程。taskService.setVariable 或者 配置<dataObject>到<process>里

附件:设置附件,taskService.createAttachment。获取附件,taskService.getAttachment

 

八、

执行流

Execution <— ProcessInstance

主执行流,子执行流(当前产生的分支)

可以根据任务获取执行流

 

启动流程

runtimeService.startProcessInstanceById

runtimeService.startProcessInstanceByKey

runtimeService.startProcessInstanceByMessage

 

流程参数

本地参数:runtimeService.setVariableLocal

全局参数:runtimeService.setVariable

 

九、

receiveTask

receiveTask用trigger,onlyChildExecutions查找子执行流

 

signal

信号事件:广播

捕获事件:添加信号事件配置<intermediateCatchEvent><signalEventDefinition>和<signal>

抛出事件:执行runtimeService.signalEventReceived("signalId")

 

message

消息事件:订阅投递

捕获事件:添加消息事件配置<intermediateCatchEvent><messageEventDefinition>和<message>

抛出事件:执行runtimeService.messageEventReceived("msgId", execution.getId())

 

十、

serviceTask

工作

异步任务

配置异步执行器asyncExecutorActivate为true

配置<serviceTask activiti:class="xxx.MyDelegateClass" activiti:async="true">(不是BPMN规范)

MyDelegateClass实现JavaDelegate,实现execute方法

定时事件

添加定时事件配置<intermediateCatchEvent><timerEventDefinition>和内部的<timeDuration>或<timeCycle>

暂停的工作

runtimeService.suspendProcessInstanceById

runtimeService.activateProcessInstanceById

无法执行的工作

 

十一、

事件

开始事件

无指定开始事件

定时器开始事件

消息开始事件

错误开始事件:事件子流程

结束事件

无指定结束事件

错误结束事件——错误开始事件/错误边界事件

取消结束事件:事务子流程——取消边界事件

终止结束事件

中间事件

定时器中间事件

信号中间事件

消息中间事件

边界事件

定时器边界事件

错误边界事件

信号边界事件

补偿边界事件

 

十二、任务

ServiceTask

分类

Java Service Task

activiti:class指定的类为JavaDelegate ActivityBehavior的实现类

activiti:delegateExpression="${myDelegation}"且设置参数,其类需实例化

activiti:expression="${myBean.print(execution)}" 或 activiti.expression="${execution.setVariable('myName', myBean.name)}"

Shell Task

Java执行shell脚本方式

java.lang.Runtime

java.lang.ProcessBuilder

activiti扩展配置 activiti:type="shell",可以配置输入参数及输出结果到流程实例参数

Web Service Task

SendTask

邮件任务

activiti:type="mail"并配置发、收邮件信息

发邮件需配置activiti的bean的mail属性

ReceiveTask

类似捕获事件

runtimeService.trigger

UserTask

候选人(用户、用户组)、代理人(一个代理人)

设置权限方法

可在xml按照BPMN规范配置

或者可在xml按照activiti扩展配置

或者可用api设置

或者在任务监听器(xml配置)里用api设置

或者JUEL在xml里结合activiti扩展配置进行动态配置(流程定义时,调用的实例需参数化,其类需序列化)

ManualTask

类似抛出事件

BusinessRuleTask

ScriptTask

 

十三、监听器

任务监听器(activiti扩展,用于UserTask)

<activiti:taskListener>

 

指定方式

class="" activiti配置activiti:taskListener监听类及监听触发条件event,监听类需实现TaskListener

delegateExpression="${myDelegation}",需实现序列化和TaskListener

expression="${myBean.testBean(task)}",实现序列化,不需实现TaskListener

 

event

create 用户任务产生时

assignment 用户任务指定代理人时

complete 用户任务完成时

 

给监听器注入参数

<activiti:field name="userName" stringValue="zhangsan" />

 

流程监听器

<activiti:executionListener>

指定方式(类似用户任务监听器)

可以监听

流程的开始、结束

活动的开始、过渡、结束

流程网关的开始

中间事件的开始、结束

开始事件的结束,结束时间的开始

 

十四、子流程

嵌入式子流程

调用式子流程(适用于有公共流程)

(若一个子流程,因为两个流程则产生四条执行流)

runtimeService.createProcessInstanceQuery().superProcessInstanceId()

输入参数,输出参数

事件子流程:由各种事件触发的子流程

可终止的事件子流程

不可终止的事件子流程

事务子流程

也是一种嵌入式子流程,触发补偿

特殊子流程

子流程内任务没有特定顺序(配置【并行】或者 【按顺序但不由配置指定而是由API指定】),多个执行流

 

十五、顺序流、网关

顺序流

 

条件顺序流

源:网关、流程活动

配置在<sequenceFlow>内

所有条件不满足,抛出异常->流程实例是否会结束/删除?->经实操,会删除流程实例。

都满足呢?->报错

 

默认顺序流

不配置条件

如果是多个默认顺序流都满足呢?

 

网关

单向网关

就是普通的条件顺序流

并行网关

分叉、合并,没有条件

兼容网关

可以单向、可以并行

事件网关

哪个事件先触发就触发哪个事件的流程

组合网关

activiti6.0不支持

 

十六、流程活动

多实例活动

<multiInstanceLoopCharacteristics>

设置参数

方式一:<loopDataInputRef>

方式二:activiti:collection

获取参数

<inputDataItem name="data">

内置参数

nrOfInstances

nrOfActiveInstances

nrOfCompletedInstances

loopCounter

循环结束条件

<completionCondition>

 

十七、Drools规则引擎:关注业务规则的匹配

关键字

package, rule, when, then, function

 

全局变量 global

 

规则属性

activation-group "xxx" 规则分组

salience 10 优先级

条件语法

when 后面 && ||

行为语法

then

向WorkingMemory insert update delete

 

与Activiti整合:

1、activiti配置处配置规则部署器

2、bpmn文件配置输入、输出参数

3、部署bpmn时加载bpmn配置文件和drools配置文件

 

十八、DMN(Decision Model and Notation)规范:定义规则引擎的规范,定义决策模型

<difinitions>

<decision>

                <decisionTable>

                           <input>

                           <output>

                            <rule>

 

DMN框架类似activiti,配置dmn,编写dmn配置文件,部署,启动及使用DMN API

 

十九、MVEL表达式

简单参数表达式

对象执行表达式

自定义函数表达式

 

二十、activiti-rest.war

部署并修改数据库

http://localhost:9990/activiti-rest/service/management/properties 测试rest部署成功与否

Activiti API 文档: https://www.activiti.org/userguide

查询所有processDefinitions: GET http://localhost:9990/activiti-rest/service/repository/process-definitions

 

二十一、Activiti表单

方法一:taskService根据流程定义查询出配置的多个表单字段,可以遍历显示到页面,达到动态表单的效果。

方法二:配置文件引用外部表单

 

二十二、流程图与流程操作

流程图

节点:一个位置信息

衔接:两个位置信息

 

activiti-bpmn-converter-6.0.0.jar(还需要activiti-bpmn-model-6.0.0.jar)

BpmnXMLConverter可以通过代码的方式生成xml配置(包含process和diagram)

 

流程操作

 

流程回退

方法一:业务处理

方法二:补偿事件

会签(按数量通过、按比例通过、一票否决、一票通过)

多实例,设置不同完成条件

这篇关于Activiti6.0学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079502

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件