2

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

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

signalExecution和 和到底有什么区别completeTask

4

1 回答 1

1

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

@Inject
private ContextAssociationManager contextAssociationManager;

@Inject 
private TaskService taskService;

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

signalExecution和的区别completeTask如下:

  • completeTask: 将使用 TaskService 完成当前关联的任务
  • signalExecution: 更抽象:它向当前关联的执行发送信号以继续执行。在这种情况下,效果是一样的:任务完成并继续执行。但signalExecution也适用于不涉及人工任务的情况(即ReceiveTask)。
于 2013-09-10T12:04:15.233 回答