Activiti — невозможно получить доступ к списку задач из DelegateExecution.getEngineServices()

#java #activiti

#java #activiti

Вопрос:

У меня в Activti есть ServiceTask с классом Java, который запускает класс

 <serviceTask id="Initialisation" name="Initialisation"   activiti:class="acoss.activiti.DelegateInitialisation"></serviceTask>
  

Сам класс реализует JavaDelegate следующим образом

 public class DelegateInitialisation implements JavaDelegate
{
    @Override
    public void execute(DelegateExecution de) throws Exception
    {
            String processId = de.getProcessInstanceId();
            TaskService tkService = de.getEngineServices().getTaskService();
            List<Task> ltasks = tkService.createTaskQuery().processInstanceId(processId).list();
            for (Task task : ltasks)
            {
                    System.out.println(task.getId());
            }
   }
  

}

Проблема: он выдает мне пустой список задач. Кажется, что идентификатор процесса, который я получаю, не является «реальным» processInstanceId. Поэтому я не могу получить TaskService, runtimeService и т.д.

Лучше всего было бы получить текущий экземпляр processEngine, но я не вижу, как его получить. Большое вам спасибо, если вы видите решение.

Ответ №1:

Используя ваш запрос, вы получаете экземпляры задач, которые ожидают взаимодействия с пользователем, или задачи, которые уже завершены, а не все задачи, которые вы определили в процессе. Если у вас нет какой-либо задачи, которую ожидает процесс, или процесс прошел, вы получите пустой список.
Вам необходимо получить доступ к определению процесса и выполнить итерацию действий, чтобы получить то, что вы хотите.

Ответ №2:

Возможно, попробуйте использовать один из методов ProcessEngines, чтобы найти processEngine экземпляр getProcessEngines() .

Термины, используемые Activiti, могут вводить в заблуждение. Интерфейс задачи «представляет одну задачу для пользователя-человека». Возможно, вам действительно нужен список действий. Вы можете получить их, выполнив что-то вроде:

 RuntimeService runtimeService = de.getEngineServices().getRuntimeService();
String procId = de.getProcessInstanceId();
List<String> activityIds = runtimeService.getActiveActivityIds(procId);
System.out.println("Active activity IDs = "   activityIds);