Бонита 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 должен использовать текущее состояние процесса, а не запрашивать базу данных.

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