当我通过它设置一个过程变量时org.camunda.bpm.engine.cdi.BusinessProcess.setVariable()
,该值似乎不会自动刷新。
有没有办法在不完成当前用户任务的情况下刷新变量?我认为BusinessProcess.signalExecution()
这将是解决方案,但它似乎就像完成当前任务一样BusinessProcess.completeTask()
。
signalExecution
和 和到底有什么区别completeTask
?
变量缓存在请求或对话中,直到工作单元结束,例如通过调用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)。