刷新通过BusinessProcess设置的变量

时间:2013-09-10 09:04:04

标签: java camunda

当我通过org.camunda.bpm.engine.cdi.BusinessProcess.setVariable()设置流程变量时,似乎该值不会自动刷新。

有没有办法在不完成当前用户任务的情况下刷新变量?我认为BusinessProcess.signalExecution()将是解决方案,但它似乎像BusinessProcess.completeTask()一样完成当前任务。

signalExecutioncompleteTask之间究竟有什么区别?

1 个答案:

答案 0 :(得分:1)

变量在请求或对话中缓存,直到工作单元结束,例如通过调用completeTask()。目前没有用于手动刷新缓存变量的开箱即用解决方案。您可以通过编写注入ContextAssociationManager并执行flush的Cdi Bean来解决此问题:

@Inject
private ContextAssociationManager contextAssociationManager;

@Inject 
private TaskService taskService;

public void flushCachedVariables() {
  String taskId = contextAssociationManager.getTask().getId();
  taskService.setVariables(taskId, contextAssociationManager.getCachedVariables());
}

signalExecutioncompleteTask之间的差异如下:

  • completeTask:将使用TaskService
  • 完成当前关联的任务
  • signalExecution:更抽象:它向当前关联的执行发送信号以继续执行。在这种情况下,效果是相同的:任务完成并继续执行。但signalExecution也适用于没有涉及人工任务的情况(即ReceiveTask)。