我需要在两个路径上使用fork进行处理:


用户任务的路径
服务任务路径




如果ServiceTask完成计算而没有等待用户对UserTask的反应,则流程必须移至MoreTasks。

如何在ServiceTask完成后自动完成UserTask而无需在Java上进行编码(仅使用camunda bpmn表示法)?

我已经尝试过使用信号事件,并且它可以工作,但是信号会影响所有过程实例。我尝试使用消息事件,但是UserTask没有收到它,可能是因为我没有任何消息发送者...

最佳答案

好的,这是Camunda删除Activiti引擎中一个有用的功能的罕见情况之一。
在Activiti中,可以(在BPMN内部)定义是全局(默认)还是仅向当前流程实例抛出信号。尽管这可能与BPMN规范不符,但是对于诸如您这样的场景,它非常有用。

不幸的是,您无法在Camunda做到这一点。
现在,如果您不介意在任务侦听器中编写一些Groovy脚本,则可以将信号订阅限制为仅由当前进程抛出的那些信号:

RuntimeService.signalEventReceived(String signalName, String executionId);


有关更多详细信息,请参考Camunda文档。

如果仍然无法解决问题,那么我建议您将“用户和服务”任务包装在嵌入式子进程中,并在“服务”任务之后立即引发异常事件。

现在,在嵌入式子进程上附加一个错误边界事件处理程序。

activiti - 如何使用Camunda/Activity BPMN分支并按事件杀死分支?-LMLPHP

像这样的东西(图表来自文档),但是没有OR网关。

服务任务完成后,它将引发一个错误事件,该事件将冒泡到边界侦听器并关闭嵌入式子进程中的所有任务。

希望这可以帮助。

09-05 05:32