当我通过org.camunda.bpm.engine.cdi.BusinessProcess.setVariable()
设置流程变量时,似乎该值不会自动刷新。
有没有办法在不完成当前用户任务的情况下刷新变量?我认为BusinessProcess.signalExecution()
将是解决方案,但它似乎像BusinessProcess.completeTask()
一样完成当前任务。
signalExecution
和completeTask
之间究竟有什么区别?
答案 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());
}
signalExecution
和completeTask
之间的差异如下:
completeTask
:将使用TaskService signalExecution
:更抽象:它向当前关联的执行发送信号以继续执行。在这种情况下,效果是相同的:任务完成并继续执行。但signalExecution
也适用于没有涉及人工任务的情况(即ReceiveTask)。