Доступ к информации о переменных текущего экземпляра процесса из движка 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.

Имейте в виду, что вы запрашиваете базу данных через эти службы. Данные, измененные в текущей транзакции, недоступны через службы, пока транзакция не будет зафиксирована.

Другие вопросы по тегам