Запустите процесс внутри Activiti Java Delegate и задайте запрос - PullRequest
0 голосов
/ 06 июля 2018

Я запускаю процесс внутри Java-делегата Activiti. После запуска процесса я пытаюсь выполнить запрос к первой задаче и установить некоторые свойства / переменные для этой задачи. Проблема в том, что запрос задачи возвращает ноль. Задача будет только нулевой, если я выполню код в делегате. Если я делаю то же самое за пределами делегата, все работает нормально.

public class MyDelegate implements JavaDelegate {

@Override
public void execute(DelegateExecution execution) throws Exception {
    ProcessInstance instance = execution.getEngineServices()
                                        .getRuntimeService()
                                        .startProcessInstanceById("processId"); // instance is created and has an id

    Task task = execution.getEngineServices()
                         .getTaskService()          
                         .createTaskQuery()
                         .processInstanceId(instance.getProcessInstanceId())
                         .singleResult();  // returns null
    // set dueDate, assignee, variablesLocal ... 
}

}

Версия Activiti: 5.19.0.3

1 Ответ

0 голосов
/ 06 июля 2018

Определяется ли задача как синхронная или асинхронная? Я спрашиваю, потому что, если это асинхронно, создание первой задачи само будет делегировано исполнителю работы. Это означает, что он может быть недоступен сразу после запуска процесса. Помните, что BPM-системы не являются системами реального времени (это факт для ВСЕХ BPM-систем).

Если задача является синхронной, то она должна выполняться в том же потоке, что и делегат, но все еще может не отображаться в вашем запросе, поскольку сохранение резервной копии хранилища (базы данных), возможно, еще не произошло.

Итог, вам нужно дождаться первого задания. Убедитесь, что это синхронно (или вы можете долго ждать), а затем вставьте ожидание в ваш код делегата.

...