Доступ к информации о переменных текущего экземпляра процесса из движка Camunda BPMN
Я хочу, чтобы вся информация об экземпляре запущенного процесса сохранялась в базе данных H2 в таблице act_proc_in_ (например, время начала, время окончания, автор..)
Я нахожусь в методе ExecutionListener (в классе, реализующем интерфейс JavaDelegate), откуда мне нужно пересылать информацию дальше.
Я знаю об интерфейсе RuntimeService с методом createExecutionQuery(), но во всех примерах, которые я видел, он, похоже, сопоставлен с каким-то классом сущностей. Я не понимаю. Извините, но я новичок в Camunda BPM двигателя.
public class ProcessRequestDelegate implements JavaDelegate {
private final static Logger LOGGER = Logger.getLogger("LOAN-REQUESTS");
public void execute(DelegateExecution execution) throws Exception { LOGGER.info("Processing request by '"+execution.getVariable("customerId")+"'...");
System.out.println(execution.getVariable("amount"));
int Amount= ((Double) execution.getVariable("amount")).intValue(); System.out.println("Amountis"+Amount);
ProcessEngine processEngine = BpmPlatform.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
ResulstSet rs= runtimeService.createExecutionQuery("What to write here?");
while (rs.next()) {
String author=rs.getString("AUTHOR");
Date start = rs.getDate("START_TIME");
int sales = rs.getInt("SALES");
} }
1 ответ
Начиная с Camunda BPM 7.2, вы можете использовать метод execute.getProcessEngineServices() для доступа к службам движков в классе делегата java. Используйте HistoryService или RuntimeService для создания (Historic-)ProcessInstanceQuery, например
HistoryService historyService = execution.getProcessEngineServices().getHistoryService();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(execution.getProcessInstanceId()).singleResult();
Затем вы можете получить доступ к информации об HistoricProcessInstance.
Имейте в виду, что вы запрашиваете базу данных через эти службы. Данные, измененные в текущей транзакции, недоступны через службы, пока транзакция не будет зафиксирована.