企业内部门户网站建设方案,wordpress手机端粘性菜单,wordpress 用户分组管理,网站建设整改实施方案#x1f496;专栏简介
✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。
✔️文章中只包含演示核心代码及测试数据#xff0c;完整代码可查看作者的开源项目snail-camunda
✔️请给snail-camunda 点颗星吧#x1f618;
#x1f496;流程定义 … 专栏简介
✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。
✔️文章中只包含演示核心代码及测试数据完整代码可查看作者的开源项目snail-camunda
✔️请给snail-camunda 点颗星吧
流程定义
流程定义就是对流程的结构进行建模Camunda是使用BPMN2.0来对流程定义进行建模。相关内容在认识BPMN2.0中也有提及。
挂起流程定义
挂起流程定义会暂时禁用它即在挂起时无法实例化它。当然可以激活流程定义来撤消此效果。
Key和版本
流程定义的Key是它的标识符也就是xml中的这个id如果使用同一个Key多次部署流程定义则流程引擎会视为同一个流程定义的不同版本。 Camunda流程引擎支持以下功能
每次部署相关Key的流程定义则会在数据库中获得新版本。正在运行的流程实例将继续在启动它们的版本中运行。除非明确指定否则新的流程实例将在新版本中运行。在特定限制范围内支持将流程实例迁移到新版本。
流程实例
流程实例与流程定义的关系就像Java中对象和类之间的关系。【实例扮演着对象定义扮演着类】。
流程引擎负责创建流程实例并管理其状态。如果启动包含等待状态的流程实例例如用户任务那么流程引擎必须确保捕获流程实例的状态并将其存储在数据库中直到等待状态离开用户任务完成。
启动流程实例
可以在启动流程实例时传入一些变量。流程变量可用于流程实例中的所有任务【流程变量是全局变量】并在流程实例达到等待状态时自动保存到数据库中。
MapString, Object variables new HashMapString,Object();
variables.put(creditor, 武松);
ProcessInstance instance runtimeService.startProcessInstanceByKey(invoice, variables);
返回变量
如果流程实例结束或达到等待状态则返回。返回的对象包含流程实例和最新变量的信息。
ProcessInstanceWithVariables instance runtimeService.createProcessInstanceByKey(invoice)
.startBeforeActivity(UserTaskOne)
.setVariable(creditor, 武磊)
.executeWithVariablesInReturn();
挂起流程实例
挂起流程实例可以确保它不会进一步执行。例如如果流程变量处于不需要的状态则可以挂起实例并安全地更改。具体来说挂起意味着禁止所有更改实例令牌状态的操作即当前执行的活动。属于它的所有任务都将被挂起。因此将无法再调用对任务生命周期有影响的操作即用户分配、任务委派、任务完成等。但是可以进行一些不影响令牌状态的操作比如设置或删除变量以及添加注释。
执行
执行是分层的流程实例中的所有执行组成树结构流程实例是树中的根节点。注意:流程实例本身是一个执行。执行是可变范围的这意味着动态数据可以与它们关联。可以查询返回给定流程实例的所有执行。
runtimeService.createExecutionQuery().processInstanceId(processInstanceId).list();
活动实例
活动实例概念与执行概念类似但采用不同的视角。通常情况下【活动实例】与【执行】之间是1对多的关系
多实例活动由一个multi-instance body和内部活动组成。多实例体是围绕内部活动的作用域并收集内部活动的活动实例。
ProcessInstancereceive payment - Multi-Instance Bodyreceive paymentreceive paymentship order - Multi-Instance Bodyship order
可以通过以下接口来检索活动实例
ActivityInstance rootActivityInstance runtimeService.getActivityInstance(processInstance.getProcessInstanceId());