Подскажите, если в call activity выбрасывается ошибка, как ее обработать и продолжить дальнейшую работу. Обычные делегаты у меня обрабатываются через error start event, а call avticity не воспринимает его и при ошибке просто заканчивает работы bpmn
1 лайк
Добрый день!
- Обрабатываются только ошибки BpmnError. Создать их можно следующим образом:
Embedded Engine / Java Delegates:
throw new BpmnError(String errorCode)
External Task
externalTaskService.handleBpmnError(externalTask, ErrorConstant.CONNECT_ERROR);
User Task / Embedded Forms - по кнопке
<button cam-error-code="bpmn-error-543"
cam-error-message="anErrorMessage" />
Или можно использовать соответствующие методы REST API для User Task и External Task.
- Обработать созданные ошибки можно с помощью Error Boundary Event или Event Subprocess стартующий с Error Event.
Подозреваю, что в Call Activity у вас делегаты, создающие не BpmnError, а обычное исключение (порождающее в свою очередь инцидент в Camunda). Если вы хотите обрабатывать технические ошибки делегатного кода с помощью Error Event, необходимо оборачивать исключения в try/catch блок и создавать BpmnError.
try {
// может быть ошибка
List<Issue> issueList = new ArrayList<>();
ResponseEntity<RedmineResponse> responseEntity = redmineClient
.findIssuesByProjectAndStatus(statusId, projectId);
delegateExecution.setVariable(
ProcessVariables.ISSUE_LIST, issueList);
} catch (Exception e) {
log.error("{} {}", Errors.GET_INCIDENTS_ERROR, e.getMessage());
throw new BpmnError(Errors.GET_INCIDENTS_ERROR, e.getMessage());
}