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