Как получить переменную процесса в Camunda-bpm?

Во время чтения (https://docs.camunda.org/manual/7.5/user-guide/process-engine/variables/) Я не знаю, как получить переменную?

На данный момент я изо всех сил пытаюсь выяснить, как получить доступ к ранее установленным переменным процесса. Я пробовал:

У меня есть простой процесс bpmn, в котором у меня есть начальное событие, 1 служебная задача и конечное событие, я запускаю свой процесс, передавая 2 переменные (a и b), и моя служебная задача реализует следующий класс java:

public class Addition implements JavaDelegate {

    public void execute(DelegateExecution exe) throws Exception {

        System.out.println("Inside calculator again");

        Integer x = (Integer) exe.getVariable("a");
        Integer y = (Integer) exe.getVariable("b");
        int add = x+y;
        System.out.println("Addition of two number is"+add);
        exe.setVariable("add",add);
}

Я начинаю свой процесс следующим образом:

public void sayHello(ProcessEngine processEngine)
{
    Map<String,Object> variables = new HashMap<String, Object>();
    variables.put("a", 3);
    variables.put("b", 5);
    ProcessInstance instance=  processEngine.getRuntimeService().startProcessInstanceByKey("Process_3", variables);
}

Я хочу получить доступ к переменной add (присутствует в классе Addition) в классе sayHello? Поскольку процесс был завершен, я не могу использовать runtimeService, поэтому я попытался использовать службу истории, но не смог найти никакого решения.

Есть ли какой-нибудь Java API, который я могу использовать, или есть другой способ?


person Community    schedule 12.07.2016    source источник


Ответы (1)


Если вы хотите получить все исторические экземпляры переменных, используйте метод list в HistoricVariableInstanceQuery.

Например

List<HistoricVariableInstance> variables = processEngine.getHistoryService().createHistoricVariableInstanceQuery.list();

Если вы хотите получить определенные переменные с заданным именем, вы можете использовать метод variableName(String)

Например:

List<HistoricVariableInstance> variables = processEngine.getHistoryService().createHistoricVariableInstanceQuery().variableName("myVar").list();

Чтобы получить переменные конкретного экземпляра процесса, используйте метод processInstanceId

Например:

 List<HistoricVariableInstance> variables = processEngine.getHistoryService().createHistoricVariableInstanceQuery().processInstanceId(processInstance.getId()).variableName("myVar").list();

Дополнительную информацию см. В документации по HistoryService и HistoricVariableInstanceQuery

person Zelldon    schedule 13.07.2016