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

标签 activiti bpmn camunda

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

  1. 包含用户任务的路径

  2. 包含服务任务的路径

see the process picture

如果 ServiceTask 在没有等待用户对 UserTask 使用react的情况下完成计算,则进程必须移至 MoreTasks。

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

我已经尝试使用信号事件,它有效,但信号会影响所有进程实例。我尝试使用消息事件,但 UserTask 没有收到它,可能是因为我没有任何消息处理程序...

最佳答案

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

不幸的是,您无法在卡蒙达执行此操作。 现在,如果您不介意在任务监听器中编写一些 Groovy 脚本,则可以将信号订阅限制为仅当前进程抛出的信号:

RuntimeService.signalEventReceived(String signalName, String executionId);

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

如果这仍然是不可能的,那么我建议您将用户和服务任务包装在嵌入式子流程中,并在服务任务之后立即抛出异常事件。

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

enter image description here

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

当您的服务任务完成时,它将抛出一个错误事件,该事件将冒泡到边界监听器并关闭嵌入式子流程中的所有任务。

希望这有帮助。

关于activiti - 如何使用 Camunda/Activity BPMN fork 并按事件杀死分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35174562/

相关文章:

javascript - NodeJS 的 BPMN 引擎,类似于 Activiti 或 jBPM

java - 如何将动态值传递给Camunda Fluent Builder API

javascript - 在 Camunda 进程中,如何使用 JavaScript 和 Spin 从 JSON 中检索 bool 值?

java - Java分布式计算,应用服务器的选择

jbpm - BPM 中的中间事件或计时器

java - Activiti Tomcat 配置

javascript - Camunda 跳转到下一个用户任务

javascript - 如何在 Activiti 脚本任务中获取和设置属性对象的属性值

java - 多实例 Activiti 6 设置中的作业取消

java - 如何通过JDOM解析xml文件以找到主要属性的内容