Неверное заполнение свойства user в outcome

Добрый день.

bproc-1.1.3
Сейчас при использовании Замещения свойство user при выполнении задачи заполняется замещаемым (замещаемый = assignee), а не замещающим (непосредственно исполнителем задачи).
Такое поведение мне кажется неверным. Мы теряем сведения о фактическом исполнителе задачи.

Добрый день.
Уточните, пожалуйста, о каком именно свойстве user идёт речь? В каком объекте?

Outcome.user

@gorbunkov
Напишу тут же…

  1. Запрос возвращает экземпляры ProcessInstanceData, свойство suspended которых всегда установлено в false.
bprocHistoricService.createHistoricProcessInstanceDataQuery()
            .list() 
  1. Также из полученного списка невозможно установить был ли конкретный ProcessInstanceData завершен или отменен (deleted) - свойство endTime будет заполнено и у тех и у других.
    Из вышенаписанного также следует, что экран Process Instances тоже отображает “неверную” информацию. Например удаленный инстанс фильтруется, как Completed.
    Считаю, что тут просто необходим какой-то статус инстанса: ACTIVE/COMPLETED/SUSPENDED/CANCELED, ну или хотя бы возможность это определить…
    image

Outcome.user

Завели тикет

Запрос возвращает экземпляры ProcessInstanceData , свойство suspended которых всегда установлено в false.

Тикет завел, но боюсь, он не решится. Проблема в том, что Flowable использует разные типы сущностей для рантайм и исторических данных. В исторических данных по process instance нет информации о suspended, т.е. получить их нам тоже неоткуда. BprocRuntimeService вернёт объекты с правильно заполненными полями suspended.

Также из полученного списка невозможно установить был ли конкретный ProcessInstanceData завершен или отменен (deleted) - свойство endTime будет заполнено и у тех и у других.

Завёл тикет.

1 симпатия

Т.е. если я правильно понял, то вы предлагаете по каждому процессу выполнить запрос в рантайм-сервис для получения информации о приостановленных задачах?

Нет, я лишь говорю, что запрос типа

        bprocRuntimeService.createProcessInstanceDataQuery()
                .list();

должен вернуть список ProcessIntanceData с правильно заполненным полем suspended.

В этом запросе даже можно сразу только suspended запросить, если вдруг нужно такое:

        bprocRuntimeService.createProcessInstanceDataQuery()
                .suspended()
                .list();

Добрый день,
@sergeevms не могли бы вы приложить небольшой тестовый проект, в котором устанавливается неверное свойство Outcome.user и как вы это определяете?
к сожалению, воспроизвести данную проблему пока не удалось.

Думал, как проще тест-кейс оформить, ничего приличного не придумал:

  1. Создаем новый проект с аддонами bproc и runtimediagnose
  2. Добавляем тестового пользователя test, который замещает administrator
  3. Импортируем это определение процесса process.bpmn20 (1).xml (3.1 КБ)
  4. Меняем id в assignee на id своего пользователя administrator
  5. Разворачиваем и запускаем 2 процесса.
  6. Выполняем одну задачу пользователем administrator
  7. Логинимся под test. Переключаем на замещаемого administrator
  8. Выполняем задачу
  9. Выполняем groovy:
import com.haulmont.addon.bproc.data.OutcomesContainer
import com.haulmont.addon.bproc.engine.variable.OutcomesContainerVariableType
import com.haulmont.addon.bproc.service.BprocHistoricService
import com.haulmont.cuba.core.global.AppBeans

def historicService = AppBeans.get(BprocHistoricService.NAME, BprocHistoricService.class)
def variableInstanceDataList = historicService.createHistoricVariableInstanceDataQuery()
        .list()


return variableInstanceDataList.stream()
        .filter {OutcomesContainerVariableType.TYPE_NAME.equals(it.getVariableTypeName()) ||
                        it.getValue() instanceof OutcomesContainer}
        .map {(OutcomesContainer) it.getValue()}
        .flatMap {outcomesContainer -> outcomesContainer.getOutcomes().stream()}
        .map {it.user}
        .collect()

  1. Видим примерно такой результат:
    [60885987-1b61-4247-94c7-dff348347f93, 60885987-1b61-4247-94c7-dff348347f93]