Как сбросить бизнес-ошибку Camunda?

Мой вопрос о том, чтобы выбросить бизнес-ошибку. Например, у меня есть некоторая диаграмма, и я запускаю процесс из метода Spring REST Controller. Как я могу поймать «Error-CheckNoneAZNOperationIsExist» в методе test () и выбросить его?

Схема процесса Camunda

@RestController
public class TestEndpoint{
    @Autowired
    ProcessEngine processEngine;

    @GetMapping(path = "account-close")
    public String test(){
        ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("account_close_flow");
        return "hi";
    }
}

Наконец, я хочу выдать исключение потребителю, когда происходит «Событие окончания ошибки», например, как JSON

{
    “errorMessage”: “CheckNoneAZNOperationIsExist”, 
    “errorCode”: 123 
}

person Rashad Khalafov    schedule 16.08.2019    source источник


Ответы (1)


Наконец, я нашел решение.

1) Я добавил переменную кода ошибки (например, globalError) ко всем своим граничным событиям.

2) После выполнения процесса я проверяю экземпляр исторической переменной (Camunda Java API)

@RestController
public class TestEndpoint{
    @Autowired
    ProcessEngine processEngine;

    @GetMapping(path = "x")
    public String test(){
        ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("account_close_flow");
        HistoricVariableInstanceEntity variable = (HistoricVariableInstanceEntity) processEngine.getHistoryService()
                .createHistoricVariableInstanceQuery()
                .processInstanceId(processInstance.getId())
                .variableName("globalError").singleResult();
        if(variable != null)
           throw new ResponseStatusException(HttpStatus.BAD_REQUEST, processInstance.getId() +" "+variable.getTextValue());

        return "hi";
    }
}

3) При возникновении ошибки globalError заполняется Camunda Engine «Именем ошибки».

Пример диаграммы Камунды

Результат кода выше

{
    "timestamp": "2019-08-18T10:34:49.928+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "ce72ca30-c1a3-11e9-bb0b-0a0027000005 ErrorUserIsFrozen",
    "path": "/x"
}
person Rashad Khalafov    schedule 18.08.2019
comment
Полагаясь на исторические запросы, вы станете проблемой производительности, как только ваша история разрастется. Проверьте, может ли executeWithVariablesInReturn быть лучшим решением для решения вашей проблемы: docs.camunda.org/manual/7.9/user-guide/process-engine/ - person Jan Galinski; 18.08.2019
comment
Идеальный! Спасибо - person Rashad Khalafov; 19.08.2019