1

我试图在工作流执行完成后设置变量。

在 WorkflowStart 类中实例化工作流,然后获取值

ProcessInstance pi = runtimeService.startProcessInstanceByKey("workflowName");
System.out.println("runtimeService.getVariables(getId()) "+runtimeService.getVariables(pi.getId()));   

上述命令启动工作流程,并执行所有执行。所以当我写

 public class FlowDelegate  implements JavaDelegate {
    public void execute(DelegateExecution execution) throws Exception {
        execution.setVariable("abc123", "123");
        System.out.println("Execution variables - "+execution.getVariables());      
 }
}

上面的行打印

{
  abc123 => Value '123' of type 'PrimitiveValueType[string]'
}

因此,在 processInstance 执行工作流并尝试访问变量之后,我得到了这个堆栈跟踪

并执行

 System.out.println("runtimeService.getVariables(getId()) "+runtimeService.getVariables(pi.getId()));


ENGINE-16004 Exception while closing command context: execution e575eb8b-7b84-11e8-a237-54e1ad4a38ce doesn't exist: execution is null
 org.camunda.bpm.engine.exception.NullValueException: execution e575eb8b-7b84-11e8-a237-54e1ad4a38ce doesn't exist: execution is null
4

1 回答 1

2

进程完成后,将无法再通过运行时 api 访问它。您可以使用。HistoryService#createHistoricVariableInstanceQuery 以访问这些值。

更新:同时 camunda 支持流程启动的返回值,您可以使用RuntimeService.html#createProcessInstanceById然后executeWithVariablesInReturn()立即获取启动实例的变量,而无需对历史变量进行额外(昂贵的)查询。

于 2018-06-30T12:21:57.480 回答