流程引擎概念

目录

一、流程定义

二、查询流程定义

三、ID与版本

四、挂起流程定义

五、流程实例

六、执行

七、活动实例

八、任务与任务定义


本部分说明了流程引擎的概念

一、流程定义

流程定义定义了流程的结构。

Camunda BPM使用BPMN2.0作为主要的建模语言,可以将BPMN 2.0XML格式部署到流程引擎中。

二、查询流程定义

List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery()
    .processDefinitionKey("invoice")
    .orderByProcessDefinitionVersion()
    .asc()
    .list();

也支持通过RestAPI进行查询。

三、ID与版本

流程定义ID是流程定义的逻辑标识符,最主要是用于启动流程实例。

<process id="invoice" name="invoice receipt" isExecutable="true">
  ...
</process>

如果相同的ID不是多个,则为流程定义的多个版本。

四、挂起流程定义

使用RuntimeService支持挂起、激活流程定义,当处于挂起阶段时无法实例化流程定义。

五、流程实例

  • 流程实例概念

流程实例是流程定义的单独执行。

流程引擎负责创建流程实例并管理状态。

  • 启动流程实例

支持传入变量

Map<String, Object> variables = new HashMap<String,Object>();
variables.put("creditor", "Nice Pizza Inc.");
ProcessInstance instance = runtimeService.startProcessInstanceByKey("invoice", variables);
  • 在任一活动中启动流程实例

创建流程实例使用startProcessInstanceByKeystartProcessInstanceById

ProcessInstance instance = runtimeService.createProcessInstanceByKey("invoice")
  .startBeforeActivity("SendInvoiceReceiptTask")
  .setVariable("creditor", "Nice Pizza Inc.")
  .startBeforeActivity("DeliverPizzaSubProcess")
  .setVariableLocal("destination", "12 High Street")
  .execute();
  • 返回变量

使用executeWithVariablesInReturn返回变量

ProcessInstanceWithVariables instance = runtimeService.createProcessInstanceByKey("invoice")
  .startBeforeActivity("SendInvoiceReceiptTask")
  .setVariable("creditor", "Nice Pizza Inc.")
  .startBeforeActivity("DeliverPizzaSubProcess")
  .setVariableLocal("destination", "12 High Street")
  .executeWithVariablesInReturn();
  • 查询流程实例
runtimeService.createProcessInstanceQuery()
    .processDefinitionKey("invoice")
    .variableValueEquals("creditor", "Nice Pizza Inc.")
    .list();
  • 流程实例操作

触发:继续执行。

取消:RuntimeService.deleteProcessInstance(...)。

开始\取消任何活动:修改流程实例。

  • 挂起流程实例

单个实例:RuntimeService的suspendProcessInstanceById(...)来挂起流程实例。

流程定义下所有实例:RepositoryService的suspendProcessDefinitionById(...)。

六、执行

流程引擎在流程实例内部创建两个并发执行。

  • 查询执行
runtimeService.createExecutionQuery()
    .processInstanceId(someId)
    .list();

七、活动实例

活动实例表示活动的单个实例。

  • 检索活动实例
ActivityInstance rootActivityInstance = runtimeService.getActivityInstance(processInstance.getProcessInstanceId());
  • 标识唯一性

每个活动实例都一个唯一的标识ID,是持久性的,相同的活动实例返回相同的ID。

  • 与执行的关系

一个活动实例可能会有多个执行。

八、任务与任务定义

  • 概念

流程定义包含一个Job Executor的组件,负责执行异步后台任务。

部署流程后,流程引擎会为流程中的每个活动创建任务定义,这将在运行时创建任务。

  • 查询任务
managementService.createJobQuery()
  .duedateHigherThan(someDate)
  .list()
  • 查询任务定义
managementService.createJobDefinitionQuery()
  .processDefinitionKey("orderProcess")
  .list()
  • 挂起\激活任务执行

不同级别执行暂停:

任务实例级别;

任务定义级别。

List<JobDefinition> jobDefinitions = managementService.createJobDefinitionQuery()
        .processDefinitionKey("orderProcess")
        .activityIdIn("processPayment")
        .list();

for (JobDefinition jobDefinition : jobDefinitions) {
  managementService.suspendJobDefinitionById(jobDefinition.getId(), true);
}

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值