6.1. ProcActionsFragment
ProcActionsFragment
– фрагмент для работы с процессными действиями. После инициализации во фрагменте автоматически отобразятся:
-
кнопка запуска процесса, если процесс не запущен;
-
кнопки, соответствующие выходам из задачи, если процесс запущен, и текущий пользователь имеет активную задачу;
-
кнопка отмены процесса;
-
информация о задаче (имя и дата создания).
Каждому из действий возможно задать предикат, вычисляемый перед выполнением этого действия, что позволяет сделать проверку возможности выполнения действия в настоящее время (например, выполнить коммит экрана и в случае неудачи не выполнять процессное действие). Также можно задать слушатель, который будет выполнен после завершения действия (например, закрыть экран редактирования сущности и отобразить сообщение пользователю).
ProcActionsFragment
должен быть связан с экземпляром ProcInstance
. Связывание происходит во время инициализации фрагмента.
Пример инициализации фрагмента:
procActionsFragment.initializer()
.setBeforeStartProcessPredicate(() -> {
getScreenData().getDataContext().commit();
return true;
})
.setAfterStartProcessListener(() -> {
notifications.create()
.withCaption(messageBundle.getMessage("processStarted"))
.withType(Notifications.NotificationType.HUMANIZED)
.show();
})
.init(PROCESS_CODE, getEditedEntity());
-
Метод
initializer()
возвращает объект, используемый для инициализации фрагмента. -
Метод
setBeforeStartProcessPredicate
устанавливает предикат, который будет вычислен перед выполнением запуска процесса. Если предикат вернетfalse
, запуск процесса будет прерван. -
Метод
setAfterStartProcessListener
задает слушатель, который будет вызван после завершения действия запуска процесса. -
Самое главное – метод
init
– принимает два параметра: код процесса и экземпляр сущности. При вызове этого метода происходит поиск объектаProcInstance
, связанного с указанным экземпляром сущности и ссылающимся наProcDefinition
с указанным кодом. ЕслиProcInstance
существует, фрагмент связывается с ним, если нет, то создается новый объектProcInstance
.
Самый простой способ проинициализировать ProcActionsFragment
– использовать метод standard()
:
procActionsFragment.initializer()
.standard()
.init(PROCESS_CODE, getEditedEntity());
Стандартная инициализация делает следующее:
-
создает предикаты, которые вызывают коммит редактора сущности перед процессным действием запуска процесса или завершения задачи;
-
создает слушатели, показывающие сообщения "Процесс запущен", "Задача завершена" после процессного действия, а также вызывающие повторную инициализацию
ProcActionsFragment
.
Полный список методов, которые можно использовать для работы с фрагментом:
- Жизненный цикл процесса
-
-
initializer()
– возвращает экземпляр инициализатора фрагмента.
-
init()
– пробует найти экземпляр процесса по переданному коду и ссылке на сущность. Если существующий процесс не найден, создаётся новый. Затем происходит инициализация UI, отображающего действия, доступные для этого процесса и для текущего пользователя.
-
- Конфигурация процесса
-
-
setStartProcessEnabled()
– устанавливает разрешение или запрет на запуск процесса.
-
setCancelProcessEnabled()
– устанавливает разрешение или запрет на отмену процесса.
-
setCompleteTaskEnabled()
– устанавливает разрешение или запрет на завершение задачи.
-
setClaimTaskEnabled()
– устанавливает разрешение или запрет на выбор задачи самим пользователем.
-
setTaskInfoEnabled()
– управляет видимостью контейнера, отображающего локализованное имя задачи и дату её начала.
-
setButtonWidth()
– устанавливает ширину кнопок управления процессом. По умолчанию кнопки имеют ширину 150 px.
-
addActionButton()
– позволяет добавить к фрагменту дополнительную кнопку, помимо создаваемых автоматически.
-
- Предикаты
-
-
setBeforeStartProcessPredicate()
– устанавливает предикат, который должен быть вычислен перед запуском процесса. Если предикат вернётfalse
, запуск процесса будет прерван.
-
setBeforeCompleteTaskPredicate()
– устанавливает предикат, который должен быть вычислен перед завершением задачи. Если предикат вернётfalse
, завершение задачи будет прервано.
-
setBeforeClaimTaskPredicate()
– устанавливает предикат, который должен быть вычислен перед назначением задачи на пользователя. Если предикат вернётfalse
, назначение задачи будет прервано.
-
setBeforeCancelProcessPredicate()
– устанавливает предикат, который должен быть вычислен перед отменой задачи. Если предикат вернётfalse
, задача не будет отменена.
-
- Слушатели процесса и задач
-
-
setAfterStartProcessListener()
– задаёт слушатель, который будет вызван после запуска процесса.
-
setAfterCompleteTaskListener()
– задаёт слушатель, который будет вызван после завершения задачи.
-
setAfterClaimTaskListener()
– задаёт слушатель, который будет вызван после выбора задачи пользователем.
-
setAfterCancelProcessListener()
– задаёт слушатель, который будет вызван после отмены выполнения процесса.
-
- Поставщики переменных и параметров
-
-
setStartProcessActionProcessVariablesSupplier()
– задаёт поставщик переменных процесса. Поставщик возвращает мэп переменных процесса, которые должны быть добавлены к экземпляру процесса Activiti при запуске процесса.
-
setCompleteTaskActionProcessVariablesSupplier()
– задаёт поставщик переменных процесса. Поставщик возвращает мэп переменных процесса, которые должны быть добавлены к экземпляру процесса Activiti при завершении задачи.
-
setStartProcessActionScreenParametersSupplier()
– задаёт поставщик параметров экрана процессной формы. Поставщик возвращает мэп параметров экрана, которые должны быть переданы в процессную форму, отображаемую с помощьюStartProcessAction
.
-
setCompleteTaskActionScreenParametersSupplier()
– задаёт поставщик параметров экрана процессной формы. Поставщик возвращает мэп параметров экрана, которые должны быть переданы в процессную форму, отображаемую с помощьюCompleteTaskAction
.
-
- ProcActionsFragment API
- Initializer API
-
init – setAfterCancelProcessListener – setAfterClaimTaskListener – setAfterCompleteTaskListener – setAfterStartProcessListener – setBeforeCancelProcessPredicate – setBeforeClaimTaskPredicate – setBeforeCompleteTaskPredicate – setBeforeStartProcessPredicate – setButtonWidth – setCancelProcessEnabled – setClaimTaskEnabled – setCompleteTaskActionProcessVariablesSupplier – setCompleteTaskActionScreenParametersSupplier – setCompleteTaskEnabled – setStartProcessActionProcessVariablesSupplier – setStartProcessActionScreenParametersSupplier – setStartProcessEnabled – setTaskInfoEnabled