我需要在两条路径上使用 fork 进行处理:
包含用户任务的路径
包含服务任务的路径
如果 ServiceTask 在没有等待用户对 UserTask 使用react的情况下完成计算,则进程必须移至 MoreTasks。
如何在 ServiceTask 完成后自动完成 UserTask,无需在 java 上编码(仅使用 camunda bpmn 表示法)?
我已经尝试使用信号事件,它有效,但信号会影响所有进程实例。我尝试使用消息事件,但 UserTask 没有收到它,可能是因为我没有任何消息处理程序...
最佳答案
好吧,这是 Camunda 删除 Activiti 引擎中一项有用功能的相当罕见的情况之一。 在 Activiti 中,可以(在 BPMN 内部)定义信号是全局抛出(默认)还是仅抛出到当前流程实例。虽然这可能不符合 BPMN 规范,但它对于像您这样的场景非常有用。
不幸的是,您无法在卡蒙达执行此操作。 现在,如果您不介意在任务监听器中编写一些 Groovy 脚本,则可以将信号订阅限制为仅当前进程抛出的信号:
RuntimeService.signalEventReceived(String signalName, String executionId);
有关更多详细信息,请参阅 Camunda 文档。
如果这仍然是不可能的,那么我建议您将用户和服务任务包装在嵌入式子流程中,并在服务任务之后立即抛出异常事件。
现在,在嵌入式子流程上附加一个错误边界事件处理程序。
类似这样的东西(图表来自文档),但没有 OR 网关。
当您的服务任务完成时,它将抛出一个错误事件,该事件将冒泡到边界监听器并关闭嵌入式子流程中的所有任务。
希望这有帮助。
关于activiti - 如何使用 Camunda/Activity BPMN fork 并按事件杀死分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35174562/