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

时间:2016-02-03 10:33:11

标签: activiti bpmn camunda

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

  1. 用户任务的路径

  2. 服务任务的路径

  3. see the process picture

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

RuntimeService.signalEventReceived(String signalName, String executionId);

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

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

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

enter image description here

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

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

希望这有帮助。

答案 1 :(得分:0)

我曾经有类似的要求,但我没有没有编码java 约束,我必须使这个解决方法使其工作:

  • 我创建了一个用JAVA开发的服务任务
  • 在我的服务任务中,我执行了任务查询以从其他分支获取任务
  • 推出新线程以强制完成任务(延迟一段时间后)

它不干净,但工作正常,我的客户对结果感到满意。