5.1. ProcActionsFrame

ProcActionsFrame - фрейм для работы с процессными действиями. После инициализации во фрейме автоматически отобразятся:

  • кнопка запуска процесса, если процесс не запущен;

  • кнопки, соответствующие выходам из задачи, если процесс запущен и текущий пользователь имеет активную задачу;

  • кнопка отмены процесса;

  • информация о задаче (имя и дата создания).

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

ProcActionsFrame должен быть связан с экземпляром ProcInstance. Связывание происходит во время инициализации фрейма.

Пример инициализации фрейма:

procActionsFrame.initializer()
        .setBeforeStartProcessPredicate(this::commit)
        .setAfterStartProcessListener(showNotification(getMessage("processStarted"), NotificationType.HUMANIZED))
        .init(PROCESS_CODE, entity);
  • Метод initializer() возвращает объект, используемый для инициализации фрейма.

  • Метод setBeforeStartProcessPredicate устанавливает предикат, который будет вычислен перед выполнением запуска процесса. Если предикат вернет false, запуск процесса будет прерван.

  • Метод setAfterStartProcessListener задает слушатель, который будет вызван после завершения действия запуска процесса.

  • Самое главное - метод init принимает два параметра: код процесса и экземпляр сущности. При вызове этого метода происходит поиск объекта ProcInstance, связанного с указанным экземпляром сущности и ссылающимся на ProcDefinition с указанным кодом. Если ProcInstance существует, фрейм связывается с ним, если нет, то создается новый объект ProcInstance.

Полный список методов, которые можно использовать для работы с фреймом:

Жизненный цикл процесса
  • initializer() - возвращает экземпляр инициализатора фрейма.

  • init() - пробует найти экземпляр процесса по переданному коду и ссылке на сущность. Если существующий процесс не найден, создаётся новый. Затем происходит инициализация UI, отображающий действия, доступные для этого процесса и для текущего пользователя.

Конфигурация процесса
  • setStartProcessEnabled() - устанавливает разрешение или запрет на запуск процесса.

  • setCancelProcessEnabled() - устанавливает разрешение или запрет на отмену процесса.

  • setCompleteTaskEnabled() - устанавливает разрешение или запрет на завершение задачи.

  • setClaimTaskEnabled() - устанавливает разрешение или запрет на выбор задачи самим пользователем.

  • setTaskInfoEnabled() - управляет видимостью контейнера, отображающего локализованное имя задачи и дату её начала.

  • setButtonWidth() - устанавливает ширину кнопок управления процессом. По умолчанию кнопки имеют ширину 150 px.

Предикаты
  • setBeforeStartProcessPredicate() - устанавливает предикат, который должен быть вычислен перед запуском процесса. Если предикат вернёт false, запуск процесса будет прерван.

  • setBeforeCompleteTaskPredicate() - устанавливает предикат, который должен быть вычислен перед завершением задачи. Если предикат вернёт false, завершение задачи будет прервано.

  • setBeforeClaimTaskPredicate() - устанавливает предикат, который должен быть вычислен перед назначением задачи на пользователя. Если предикат вернёт false, назначение задачи будет прервано.

  • setBeforeCancelProcessPredicate() - устанавливает предикат, который должен быть вычислен перед отменой задачи. Если предикат вернёт false, задача не будет отменена.

Слушатели процесса и задач
  • setAfterStartProcessListener() - задаёт слушатель, который будет вызван после запуска процесса.

  • setAfterCompleteTaskListener() - задаёт слушатель, который будет вызван после завершения задачи.

  • setAfterClaimTaskListener() - задаёт слушатель, который будет вызван после выбора задачи пользователем.

  • setAfterCancelProcessListener() - задаёт слушатель, который будет вызван после отмены выполнения процесса.