Activiti6.0学习笔记

本文全面解析Activiti流程引擎的架构与应用,涵盖官方示例、配置、组件、表设计、查询、部署、定义管理、任务操作、执行流、事件处理、规则引擎整合等内容,深入探讨流程活动、监听器、子流程、顺序流、网关、表单、流程图与操作等高级特性。
摘要由CSDN通过智能技术生成

一、运行官方例子

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)

 

流程操作

 

流程回退

方法一:业务处理

方法二:补偿事件

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门催学不吹雪ㅤ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值