流程引擎Camunda开发记录(一)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流程引擎Camunda开发记录(一)相关的知识,希望对你有一定的参考价值。

参考技术A 使用Camunda前,首先介绍几个概念:

ProcessDefinition(流程定义)就是一个流程的步骤说明,比如一个审批流程,申请人王三发起提交申请,李四作为部门经理进行审批,审批完成后,此申请到达下一级总经理王五,进行审批。就这么整个流程说明其实就是流程定义,不过在Camunda中整个流程定义是以helloworld.bpmn与helloworld.png格式存在的。

流程被设计好之后,得到.bpmn或者pngde 文件,那他如何被刘程引擎解析的,这时候就需要将流程定义部署到流程引擎上。流程每部署一次就会得到一个deploymentId

每开启流程一次就会生成一条相应的流程实例,开启流程其实就是将流程运转起来,就像请假流程,只有当用户发出请假申请(开启请假流程),就会生成一条请假实例。
一个流程实例就表示流程从开始到结束最大的流程分支。开启一个流程就只能有一个流程实例

启动流程,首先会创建流程实例,如果存在子流程、多实例、并行网关,会再次创建执行实例,当所有的执行实例按照一定规则结束执行后,流程实例也就随之结束。
执行实例的父级或者父级的父级就是流程实例。
下面是以并行网关为例介绍,流程实例和执行实例之间的关系;

下面是以多实例为例介绍,流程实例和执行实例之间的关系:

执行树的压缩和优化

引入活动实例树的第二个原因是,流程引擎运行时压缩和优化执行树。考虑一个并行网关有两个usertasks的例子。最初T1和T2都是活动的。在执行树中,我们将看到无效的并发根执行等待在并行网关,为每个任务之一。活动实例树具有相同的结构,但根节点对应的流程实例本身,并且它并不等待在并行网关. 当T2完成任务后,将压缩流程引擎执行树,去除T1的执行,并用根执行取代它。如果执行T1引用了变量或任务,那么它们将被移动到根执行中。活动实例树看起来不同的是:它仍然包含一个T1的活动实例和流程定义本身。

这种行为(behavior)的衍生,在执行树种并不存在"节点实例标识"(activity instance identity) 这种概念. 没有唯一标识来描述一个节点的实例。在一般情况下,是无法保证同一个进入节点实例执行将会完全一致的完成它。例如: 在上面的例子中T1 是以执行ID=2开始 以执行ID=1结束。

任务,当流程流转到某个阶段,需要用户审核或者其他操作的时候,这个需要用户来完成的操作就是一个任务,除了用户任务之外,还有系统任务等其他任务

如果需要让某个用户执行某个任务,首先需要将任务分配给用户,一般有3种分配方式

直接指定,这里通过Assignee来直接指定某一个具体的用户(一般是用户ID或者唯一的用户名),支持表达式以支持动态指定

指定候选人,通过candidateUser来指定一系列候选人,如果是多个用户,通过,号分隔

指定候选组,通过candidateGroup来指定某一个组里面的所有用户(实际测试中,发现候选人和候选组是并集关系)

如果指定了候选人和候选组,那么并不意味着所有的候选人都需要执行任务,这些人首先需要进行一个认领的操作,一个任务只能由一个人认领,认领完成后才能执行任务,相对的,也可以取消认领

流程存储服务RepositoryService主要的功能如下:

管理流程定义文件xml和静态资源的服务
对特定流程的暂停和激活
流程定义启动权限管理
部署文件构造器DeploymentBuilder
部署文件查询器DeploymentQuery
流程定义查询对象ProcessDefinition
流程定义的java格式BpmnModel

该类就是启动实例,查询与实例相关的一些信息

以上是关于流程引擎Camunda开发记录(一)的主要内容,如果未能解决你的问题,请参考以下文章

流程引擎之Camunda开发记录(三)

流程引擎之Camunda开发记录(六)流程部署的四种方法

流程引擎之Camunda开发记录(七)从中间节点开启实例

流程引擎Camunda开发记录(四)—表ACT_HI_DETAIL和ACT_HI_PROCINST

流程引擎Camunda开发记录(四)—表 ACT_RE_PROCDEF、ACT_RE_DEPLOYMENT、ACT_RE_MODEL

流程引擎Camunda开发记录(四)—表act_hi_procinst和act_hi_actinst