Бонита BPM не ждите окончания функции Бонита
Я создаю приложение JAVA, использующее Bonita BPM API, и использую простой код, подобный следующему:
ProcessInstance processInstance = App.getProcessAPI().startProcess(App.getProcessDefinitionId(),App.getListOperation(), listVariablesSerializable);
processId = processInstance.getId();
Thread.sleep(1000);
App.getBuilder().filter(ProcessInstanceSearchDescriptor.STARTED_BY, App.getAPISession().getUserId());
App.setPendingTasks(0, 30, null);
Этот код запускает новый процесс и устанавливает новые задачи для пользователя. Но работает только с Thread.sleep(1000)
так как App.setPendingTasks(0, 30, null)
не хочет ждать App.getProcessAPI().startProcess(App.getProcessDefinitionId(),App.getListOperation(), listVariablesSerializable);
в конец.
я знаю это Thread.sleep(1000)
это не хорошая практика программирования, и мне нужно другое решение, пожалуйста.
1 ответ
Вы, очевидно, испытываете состояние гонки между моментом создания экземпляра и сохранением его подробностей в базе данных.
Так как у вас есть ProcessInstance, возвращенный из команды запуска. Почему бы вам просто не получить действия (задачи) для экземпляра напрямую, используя ProcessAPI?
List<ActivityInstance> activities = App.getProcessAPI().getActivities(processId, 0, 10);
Этот API должен использовать текущее состояние процесса, а не запрашивать базу данных.