在任何一步终止进程(jbpm)

Terminate process at any step (jbpm)

我想实现在我的 jbpm 项目的任何用户任务中终止流程实例的能力。我知道理论上我应该能够通过附加到我的工作流程中的任何任务的终止结束事件来执行此操作,但这似乎是一个糟糕的解决方案,因为有这么多终止事件。

有没有更好、更高效、更易读的方法来做到这一点?

我不知道这是否更好,但你可以这样做:

  • 并行建模中间捕获信号,后跟终止事件
  • 使用 Human Task 上的 space "On Exit Script" 来通知提到的信号,使用方法 signalEvent kcontext.getProcessInstance().signalEvent("terminate",null); 其中 "terminate" 是信号事件捕获的信号名称。

这里可以看到一个方法:http://s7.postimg.org/p6ktmvz0r/Screen_Shot_2015_01_18_at_19_45_48.png

我们最终构建的应用程序使用了与 JBPM 服务接口的自定义前端。

为了在任何步骤终止进程,我们在创建主进程实例 ID 时将其记录在我们自己的数据库中。然后我们创建了一个 'cancel project' 函数,它递归地收集单个主进程 ID 下的所有进程 ID,然后通过远程 API 终止它们,从主进程 ID 开始。

请注意,如果您这样做,您需要中止从主进程开始的进程实例列表,然后继续前进。如果不这样做,首先中止子进程可以产生更多进程。

如果要删除进程可以使用以下代码:

processService.abortProcessInstance(processInstanceId);

processService是如下界面:org.jbpm.services.api.ProcessService

这将删除 流程实例 和与之关联的任务

参考此代码使用 org.jbpm:jbpm-services-api:7.65.0.Final

此代码是从与 JBPM 集成的 spring-boot 应用程序中执行的。