![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
activiti
波波仔86
生活与技术并发!
展开
-
Activiti监听器使用
一、前言上一篇在讲分配处理人时其实就已经有用到监听器了,Activiti最灵活的点便是其提供了多种多样的监听器及对应的监听事件,能实现绝大部分业务需求,因此学会使用监听器也是掌握Activiti非常重要的一个步骤。二、监听器使用场景在使用Activiti时,其通常作为底层引擎使用,而引擎通常与业务是分开的,因此需要引擎去推动业务,即流程执行到某个阶段时,我们才去执行相对应的业务逻辑,这便依赖Activiti的监听器。常见的场景有:1、环节人员动态分配2、某个环节开始或结束时需要记录环节信转载 2021-05-23 18:16:29 · 8470 阅读 · 0 评论 -
activiti开发中流程变量中,setVariable和setVariableLocal的区别
setVariable:设置流程变量的时候,流程变量名称相同的时候,后一次的值替换前一次的值,而且可以看到TASK_ID的字段不会存放任务ID的值setVariableLocal:1:设置流程变量的时候,针对当前活动的节点设置流程变量,如果一个流程中存在2个活动节点,对每个活动节点都设置流程变量,即使流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值,它会使用不同的任务ID作为标识,存放2个流程变量值,而且可以看到TASK_ID的字段会存放任务ID的值例如act_hi_varinst转载 2021-05-23 17:52:01 · 1658 阅读 · 0 评论 -
Activiti--流程变量
什么是流程变量?流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)。例如:流程变量学了它这货有什么用?当然是传递数据- 比如请假天数,请假原因等等~怎么配置流程变量四种设置1.启动时设置2.任务完成时设置3.runtimeService.setvars…()4.task转载 2021-05-23 17:45:37 · 1489 阅读 · 0 评论 -
activity串行多实例会签
1、串行会签定义 不同于并行会签(根据任务提交时,指定的处理人数量,生成对应数量的任务),串行会签,任务提交时虽然也指定了处理人集合,但是只会生成一个任务,等当前任务处理完成后,才会生成第2个任务,依次类推,按照指定处理人集合中用户的顺序,设置对应的处理人。2、流程图定义,Sequential勾选,对应的bpmn文件isSequence为true,表示串行。2、启动流程,查看act_ru_execution、act_ru_task、act_ru_variable表: p...原创 2021-04-15 22:34:41 · 2334 阅读 · 1 评论 -
activity删除act_ru_task表中正在执行的任务
通过调用taskService.deleteTask方法删除当前正在执行的任务,activity抛出异常提示不能删除正在执行的任务,如果调用complete完成任务,再去历史表中删除,但是调用complete,流程自动往前推进,不想推进的情况下删除当前任务,解决方案如下:1、首先自定义命令,这里继承了NeedsActiveTaskCmd表示当前任务不能挂起(没有这个需求,直接结成TaskCmd即可)import org.activiti.engine.impl.cmd.NeedsActiveTas原创 2021-04-15 22:17:18 · 6905 阅读 · 1 评论 -
ActivitiOptimisticLockingException:was updated by another transaction concurrently
org.activiti.engine.ActivitiOptimisticLockingException: Task[id=dgdfccc542755, name=申请人] was updated by another transaction concurrentlyat org.activiti.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:872) 代码如下://更新TaskmanagementServic.转载 2021-04-15 21:55:39 · 8771 阅读 · 0 评论 -
activiti 中国式自由流任意节点的跳转
工作流目前只能支持按照预先设置好的线,判断线的预制条件才能按照模板进行跳转 。假设一个场景 a提交到 b b提交到c c提交到d d在一直提交下去。但是退回如何控制呢。假如d-a一直退回。貌似要画很多的线进去,线上配置条件。这样流程才能运转下去。在这里我们不想去画线,但是还期望流程能在制定的模板节点中运行。所以这个场景就是中国式流程。目前版本是5.141.实现的代码如如下:import java.util.Map;import org.activiti.engine.delegate.Ta...转载 2021-03-21 16:29:47 · 1252 阅读 · 2 评论 -
activiti并行和串行区别
多实例还有并行、串行区分。以下解释一下什么是并行与串行并行代表同时进行,如把任务分给5个人来处理,这5个人同时会收到任务,并且可以同时处理,不受各自的影响。串行代表工作或任务由一个人完成后,再由另一个人去处理,直至全部完成,每个任务依赖于前一个任务完成。...转载 2021-03-19 16:32:13 · 1649 阅读 · 0 评论 -
activity默认流转
上图中是默认流转条件,当且仅当其他流转条件无法满足时才会走默认流转节点,即使传输的条件不符合默认流转的表达式,例如,该节点有flow_1:流转条件是${a==1},flow_2:流转条件是${a==2},flow_3:流转条件是${a==3},默认流转。此时传入a=4,flow_1、flow_2都不满足,因为flow_3设置了默认流转,则即使也不满足flow_3的条件(条件会被忽略),此时也会通过flow_3进行流转。注意:该节点有flow_1:流转条件是${a==1},flow_2:...原创 2021-03-18 22:40:07 · 1017 阅读 · 0 评论 -
Activity bpmn.xml类似的解析时,会遇到‘XXX‘ 不是 ‘NCName‘ 的有效值的问题
主要原因是:xml中或类xml的文件中有些关键属性的值不符合NCName命名规范,例如我遇到的是流程的bpmn文件中,id的属性值命名的数字开头:NCName 不包含冒号 (:) 的 XML 名称。NCName 以字母或下划线 (_) 字符开头,后接 XML 规范中允许的任意字母、数字、重音字符、变音符号、句点 (.)、连字符 (-) 和下划线 (_) 的组合。NCName 的一些示例:x_aaabbb.ccccatalogpart-number _-._-......转载 2021-03-01 21:30:46 · 661 阅读 · 0 评论 -
Juel 表达式使用
JUEL包的结构如下:1.1.1.Juel maven仓库配置目前最新的版本是2.2.7,使用的时候在pom.xml中添加仓库坐标即可。<dependency> <groupId>de.odysseus.juel</groupId> <artifactId>juel-spi</artifactId> <version>2.2.7</version> </dependency> &l..转载 2021-02-25 22:09:51 · 1711 阅读 · 0 评论 -
Activiti委托与解决委托
我们常常在业务场景中会有这样的需求,我需要将自己的任务委托给另外一个人,同时需要获取委托人和被委托人的信息,也需要知道此任务是正在被委托,还是委托人已完成此时,我们就需要用到Activiti中的委托功能:这是一条普通的任务,现在我们看数据库act_ru_task表,对比任务的id我们看到第一条是当前我们需要观测的数据:1、接下来我们开始委托功能/** * 将指定任务进行委托处理 * * @param taskId * @param assignee */p...转载 2020-07-16 20:43:45 · 3339 阅读 · 2 评论 -
Activiti设置流程发起用户信息
先来看一段API调用:List hpis = historyService.createHistoricProcessInstanceQuery() .startedBy(userCode).list();查询结果为空,这是为什么?1.原因说明当通过runtimeService接口启动(startProcessInstance[Byxxx])流程的时候会设置一个变量,代码片段(ProcessDefinitionEntity.java#createProcessInst转载 2020-07-08 21:32:14 · 898 阅读 · 2 评论 -
activiti 5.16 businessKey 为null 处理
activiti版本 5.16产生原因:创建子流程时,businesskey 不传递。解决如下:1、创建监听类:import org.activiti.engine.delegate.event.ActivitiEntityEvent;import org.activiti.engine.delegate.event.ActivitiEvent;import org.activiti.engine.delegate.event.ActivitiEventListener;import转载 2020-07-08 21:00:38 · 835 阅读 · 0 评论 -
Activity子流程——调用子流程
BPMN2.0区分一般的子流程,通常也称作嵌入式子流程,与调用活动,尽管他们看起来很像。从概念上说,两者都在流程执行到达该活动时,调用一个子流程。区别在于:调用活动引用一个流程定义外部的流程,而subprocess嵌入在原有流程定义内。调用活动的主要使用场景,是它有一个可重复使用的流程定义,可以在多个其他流程定义中调用。 当流程执行到大call activity时,会创建一个新的执行,作为达到调用活动的执行的子执行。这个子执行之后用于执行子流程,潜在地创建了类似普通流程的并行子...原创 2020-06-14 12:11:54 · 4412 阅读 · 3 评论 -
Activity子流程——嵌入式流程
子流程时包含其他的活动、网关、事件等的活动。其本身构成一个流程,并作为更大流程的一部分。子流程完全在父流程中定义(这就时为什么经常被称作嵌入式子流程)。子流程有两个主要的使用场景:子流程可以分层建模。很多建模工具都可以折叠子流程,隐藏子流程的所有细节,而只显示业务流程的高层端到端总览。 子流程创建了新的事件范围。在子流程执行中抛出的事件,可以通过子流程边界上的边界事件捕获。因此为该事件创建了限制在子流程内的范围。使用子流程也要注意以下几点:子流程只能有一个空启动事件,而不允...原创 2020-06-14 00:08:06 · 3526 阅读 · 2 评论 -
Activiti任务认领
Activiti任务认领TaskService taskService;taskService.setAssignee(String taskId, String userId);taskService.claim(String taskId, String userId);taskService.setOwner(String taskId, String userId);关于上面三个方法的区别:setAssignee和claim两个的区别是在认领任务时,claim会检查该任务是否已经被认领原创 2020-06-04 23:17:37 · 3238 阅读 · 1 评论 -
Activiti6自学之路(七)——个人任务和组任务
Activiti6 任务有个人任务和组任务之分,理解两者的区别并且知道如何操作对应的任务是学习activiti重要一步。本章承接上文章节,这里就不详细描述了一、个人任务与组任务区别个人任务:流程中的某个任务由指定的user来执行组任务:流程中的某个任务由指定的group来完成,其中group由多个user组成实例分析1、填写请假申请任务:个人任务,比如张三提交请假申请2、总监审批任务:组任务,这里我简单将总监理解为另一组权限的用户,不和实际意义相关;如 张三提交了请假申请后,转载 2020-05-21 22:04:46 · 765 阅读 · 0 评论 -
org.activiti.bpmn.exceptions.XMLException: src-resolve: 无法将名称 'extension' 解析为 'element declaration'
一、错误信息org.activiti.bpmn.exceptions.XMLException: src-resolve: 无法将名称 'extension' 解析为 'element declaration' 组件。由于activiti项目的所在路径中存在中文,所以报错!修改项目路径不包含中文就可以了!!!!...原创 2020-05-13 17:05:29 · 1941 阅读 · 0 评论 -
并行网关(ParallelGateWay)
并行网关: 可以同时执行多个流程, 直到总流程的结束. 可以对流程进行分支和聚合,注意:这时的流程实例和执行对象是不一样的.一. 设计流程图含有并行网关的流程并没有比较复杂的属性配置(只需要配置id,name和任务办理人即可),因为是并行的, 并没有流程走向的控制, 也就没有什么连线条件配置.二. 流程(并行网关)部署启动后相关表数据变化正在执行的执行对象表ac...转载 2020-04-02 23:05:10 · 4014 阅读 · 0 评论 -
ProcessDefinition/ProcessInstance/Execution/Task关系和区别
ProcessDefinition :这个最好理解,就是流程的定义,也就相当于规范。ProcessDefinition也有id,这个id是 {key}-{version},在部署过程中,会把一个id分配给流程定义。 这个id的格式为{key}-{version}, key和version之间使用连字符连接。如果没有提供key, 会在名字的基础自动生成。 生成的key会把所...转载 2020-03-30 22:36:48 · 5042 阅读 · 0 评论 -
Activiti BpmnModel方式部署
使用该方式复杂点在于客户端需要手动构造流程引擎中的BpmnModel实例对象,如果开发人员平时设计流程文档时过多依赖图形化工具,可能对流程文档中定义的元素含义与引擎内部相对的元素属性承载类不熟悉,这里举个简单例子,部署下图文档:public void addBpmnModel(){ SequenceFlow flow1 = new SequenceFlow...原创 2020-03-21 12:30:58 · 2842 阅读 · 1 评论 -
Activiti设置流程发起人用户信息
在启动一个流程时,我们会有将当前用户启动的流程保存起来,作为流程发起人(启动人、申请人、提交人),而在保存这个流程启动者信息,api 没有明确规范该怎么存。先看一段API调用List hpis = historyService.createHistoricProcessInstanceQuery() .startedBy(userCode).list();查询...转载 2020-03-16 21:35:40 · 4517 阅读 · 0 评论 -
流程虚拟机
流程文档中的元素解析完毕之后,是不可以直接使用的,还需要对其属性承载类实例(解析结果)进行一次加工,因为流程文档中定义的事件、网关、活动(流程三大要素)等信息最终交给流程虚拟机管理,而流程虚拟机的运转机制仅依赖ActivityImpl实例对象或者TransitionImpl实例对象(连线),并非元素解析后的BaseElement实例对象。1、流程虚拟机原理流程模型解析为流程虚拟...原创 2020-03-05 20:24:26 · 360 阅读 · 0 评论 -
Activiti流程文档生命周期
流程文档上部署的生命周期如下所示:分为四大步骤:(1)定义流程文档:客户端根据自己的业务需求定义流程文档。(2)启动流程引擎:流程引擎启动之后会自动构造ProcessEngine实例对象,这样客户端就可以通过该实例对象获取各种各样的服务类实例对象。例如,TaskService实例对象,这一系列的服务类实例对象为客户端的操作提供便利。(3)部署流程文档:调用流程文档部署命令进行部...原创 2020-03-05 16:22:41 · 399 阅读 · 0 评论 -
Activiti流程变量
作用:在流程进行的过程可以附带一些数据,控制流程的走向。1.启动流程时设置变量/** * 启动流程设置流程变量 */ @Test public void startProcess() { //1,得到启动流程的service RuntimeService runtimeService = this.processEngi...转载 2020-03-03 20:57:08 · 327 阅读 · 0 评论 -
Activiti会签
1.什么是会签a)在流程业务管理中,任务是通常都是由一个人去处理的,而多个人同时处理一个任务,这种任务我们称之为会签任务。2.会签的种类a)按数量通过:达到一定数量的通过表决后,会签通过。b)按比例通过:达到一定比例的通过表决后,会签通过。c)一票否决:只要有一个表决时否定的,会签通过。d)一票通过:只要有一个表决通过的,会签通过...转载 2020-03-03 00:37:26 · 2866 阅读 · 1 评论 -
Activiti工作流框架学习:个人任务和组任务
个人任务流程中的某个任务由指定的user来执行组任务流程中的某个任务由指定的group来完成,其中group由多个user组成场景:1.提交报销申请为个人任务2.财务人员审批为组任务,因为财务人员有多个,而且每个财务人员都有权限处理审批3.财务总监审批为个人任务1、个人任务对应的属性为Assignee,指定一个人物来执行该任务2、组任务候选人...转载 2020-03-02 12:32:42 · 623 阅读 · 0 评论 -
SpringMVC整合activiti Modeler
接上一章,activiti工作流引擎虽然运行了起来,但是什么都没有。activiti官方在其安装包中是给了两个war的demo包的,一个是activiti-explorer.war,一个是activiti-rest.war。第一个就是用在web端对activiti工作流引擎的一个展示,可以看到具体内容。第二个是对activiti提供的rest接口的一个demo。这两个war包可以...转载 2020-02-27 11:48:31 · 836 阅读 · 0 评论 -
activiti之流程变量值Business_key
今天以请假为例,我们在做工作流的时候一定是需要将我们的业务和工作流来关联起来的,而Activiti给我们提供了一个便利就是Business_key,而这个字段就是专门用来存储我们的业务关键字。例如我们有一个请假的业务,而我的请假信息都已经编写到数据库的表(tb_leaveBill)中了,但是我怎么样把我的请假信息关联到activiti的数据库表中,对了,就是用给定的...转载 2020-02-26 11:22:00 · 5299 阅读 · 0 评论 -
比较Activiti中三种不同的表单及其应用
这个恐怕是初次接触工作流最多的话题之一了,当然这个不是针对Activiti来说的,每个工作流引擎都会支持多种方式的表单。目前大家讨论到的大概有三种。动态表单 外置表单 普通表单具体选择哪种方式只能读者根据自己项目的实际需求结合现有技术或者架构、平台选择!!!1、动态表单这是程序员最喜欢的方式,同时也是客户最讨厌的……因为表单完全没有布局,所有的表单元素都是顺序输出显示在页面。...转载 2020-02-20 20:28:33 · 1185 阅读 · 1 评论 -
activiti学习之pvm篇
PVM是做什么的?PVM主要就是负责流程整个运行期的执行、流转等所有运行过程。activiti对pvm的实现都放在org.activiti.engine.impl.pvm包里。PVM何时被调用?PVM从启动开始,一直到流程的结束,包括启动、停止、审批流程等有关于改变流程的操作,都要调用pvm来实现。activiti是通过bpmn2.0规范来设计,每个流程包括开始节点、结束节点、Task...转载 2020-02-16 21:06:21 · 2905 阅读 · 0 评论 -
Activiti的全局事件机制及其监听处理
概述Activiti在5.15以后的版本后,增加了统一的事件入口,不需要再像以前那样,监听流程的事件时,在流程定义的BPMN文件中为每个节点及流程增加以下的配置,以实现监听事件的做法,这种做法导致我们发布流程时,需要对bpmn文件进行设置,非常不方便,若调整其XML或Class类名或包名,都需要对BPMN文件重新修改并且发布,难度可想而知。为了规避这种问题,我们重新引入统一监控机制,其思路...转载 2020-02-12 20:11:42 · 1880 阅读 · 0 评论 -
Activiti任务监听器
Activiti提供了任务监听器,允许在任务执行的过程执行特定的Java程序或者表达式。任务监听器只能添加到流程定义中的用户任务中。注意它必须定义在BPMN 2.0 extensionElements的子元素中, 并使用activiti命名空间,因为任务监听器是activiti独有的结构。首先,定义一个任务监听器,代码如下:import org.activiti.engine.del...转载 2020-02-12 20:42:32 · 2928 阅读 · 0 评论 -
BPM、BPMN介绍
BPMBPM(Business Process Management),即业务流程管理,是一种以规范化的构造端到端的卓越 业务流程为中心,以持续的提高组织业务绩效为目的系统化方法。 常见商业管理教育如 EMBA、MBA等均将 BPM 包含在内。 企业流程管理主要是对企业内部改革,改变企业职能管理机构重叠、中间层次多、流程不闭环等,做到机构不重叠、业务不重复,达到缩短流程周期、节约运作资本...转载 2020-02-12 14:33:48 · 3084 阅读 · 0 评论 -
Activiti架构与组件
Activiti架构modeling:Activiti Modeler, Activiti Designer,Activiti Kickstart.Runtime:Activiti EngineManagement:Activiti Explorer,Activiti REST组件Activiti Engine:最核心模块,针对BPMN2.0规范的解析,执行,创建,管理(任务,流程...转载 2020-02-11 16:11:50 · 308 阅读 · 0 评论 -
解决idea中Activiti的bpmn编辑器的中文乱码问题
1.安装Activiti流程编辑器插件。1.1网上资料很多,这里简要说一下:File->Settings->Plugins,然后输入actiBPM,双击搜索结果或点击Install plugin安装即可。但是!我每次都安装失败0.x所以和我一样运气超棒的同学可以使用下面这种方法。1.2File->Settings->Plugins,然后点击弹出窗口右下角的那...原创 2020-02-10 08:54:01 · 2234 阅读 · 0 评论 -
activiti数据库表名说明
Activiti的所有数据库表都以ACT_开头。第二部分是说明表用途的两字符标示符。服务API的命名也大略符合这个规则。ACT_RE_*: 'RE’代表 repository 。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片、规则等)。 ACT_RU_*: 'RU’代表 runtime 。这些表存储运行时信息,例如流程实例(process instance)、用户任务(use...原创 2020-02-08 14:31:37 · 1426 阅读 · 0 评论