#spring #camunda
Вопрос:
У меня есть бизнес с какой-то служебной задачей, которую эксклюзивный шлюз решает переключить между ними. поэтому для добавления других переменных для обработки в следующей задаче обслуживания мне нужно запросить api camunda orderBestProviders
, но он ничего не возвращает! смотрите мой код:
@Override
@Transactional
public void startProcess(MerchantRequestDto dto) {
dto.setId(UUID.randomUUID().toString());
Map<String, Object> map = new HashMap<>();
map.put("modelId", dto.getId());
map.put("input", dto);
log.info(map.get("modelId"));
runtimeService.createProcessInstanceByKey("SwitchEngine")
.setVariables(map)
.businessKey(switchProcessKey dto.getId())
.execute();
}
@Override
@Transactional
public void orderBestProviders(String modelId) {
Stack<Long> orderedProviders = new Stack<>();
orderedProviders.push(10L);
orderedProviders.push(1L);
orderedProviders.push(2L);
ProcessInstance instance = runtimeService.createProcessInstanceQuery()
.processInstanceBusinessKey(switchProcessKey modelId)
.singleResult();
Map<String, Object> map = new HashMap<>();
map.put("providers", orderedProviders);
map.put("providerExists", orderedProviders.size() > 0);
String processInstanceId = instance.getProcessInstanceId();
runtimeService.setVariables(
processInstanceId, map
);
}
что случилось?
есть ли другой способ решить это требование?
Ответ №1:
основываясь на управлении транзакциями в камунде (см. Эту ссылку), транзакция не фиксируется до тех пор, пока процесс не увидит состояния ожидания, поэтому я не могу получить переменные процесса из такого запроса:
runtimeService.createProcessInstanceQuery()
.processInstanceBusinessKey(switchProcessKey modelId)
.singleResult();
наконец, для решения этой проблемы я ввожу выполнение в метод, и моя проблема решена
import org.camunda.bpm.engine.runtime.Execution;
@Override
public void orderBestProviders(Execution execution) {
Stack<Long> orderedProviders = new Stack<>();
orderedProviders.push(10L);
orderedProviders.push(1L);
orderedProviders.push(2L);
Map<String, Object> map = new HashMap<>();
map.put("providers", orderedProviders);
map.put("providerExists", orderedProviders.size() > 0);
runtimeService.setVariables(
execution.getId(), map
);
}