4. Использование перечислений
В предыдущих главах вы реализовали управление отделами и шагами онбординга. Ваше приложение по умолчанию также имеет управление пользователями, которое взято из шаблона проекта.
В этой главе вы добавите атрибут onboardingStatus в сущность User и отобразите его в пользовательском интерфейсе. Этот атрибут может иметь одно из трех значений: Not started, In progress, Completed.
Создание перечисления
Перечисление - это набор констант, который определяется во время разработки и не изменяется пользователями во время выполнения.
Давайте создадим перечисление для использования в атрибуте onboardingStatus.
Если ваше приложение запущено, остановите его с помощью кнопки Stop () на главной панели инструментов.
В окне инструментов Jmix нажмите New () → Enumeration:
В окне New Jmix Enumeration введите OnboardingStatus в поле Class и выберите Integer в переключателях Id type:
Нажмите на кнопку OK.
Студия покажет дизайнер перечисления:
Добавьте необходимые константы (NOT_STARTED, IN_PROGRESS, COMPLETED), нажав на кнопку Add Value () на панели инструментов таблицы Values:
Value - это значение Java enum, Id - соответствующее значение, хранящееся в базе данных. Например, вместо значения IN_PROGRESS или его порядковой позиции (1) база данных будет содержать число 20.
Мы рекомендуем использовать строковые идентификаторы перечисления, за исключением случаев, когда константы перечисления должны быть отсортированы в определенном порядке. Перечисление OnboardingStatus является хорошим примером необходимости сортировки: вы захотите отобразить константы именно в этом порядке.
|
Вы можете увидеть исходный код перечисления, если перейдете на вкладку Text:
Добавление атрибута к сущности и пользовательскому интерфейсу
Давайте добавим атрибут onboardingStatus к сущности User:
Дважды щелкните на сущность User в окне инструментов Jmix и выберите его последний атрибут (чтобы добавить новый атрибут в конец):
Нажмите Add () на панели Attributes. В диалоговом окне New Attribute введите
onboardingStatus в поле Name, выберите ENUM в раскрывающемся списке Attribute type и OnboardingStatus в раскрывающемся списке Type:
Нажмите на кнопку OK.
Выберите атрибут onboardingStatus и нажмите на кнопку Add to Screens () на панели Attributes:
В появившемся диалоговом окне будут показаны все экраны, на которых отображается сущность User. Выберите оба экрана User.edit и User.browse:
Нажмите на кнопку OK.
Studio добавит атрибут onboardingStatus в компонент таблицы экрана User.browse и в компонент формы экрана User.edit.
Запуск приложения
Нажмите кнопку Debug () на главной панели инструментов.
Перед запуском приложения Studio сгенерирует Liquibase changelog:
Как вы можете видеть, changelog содержит команду для добавления столбца ONBOARDING_STATUS в таблицу USER_. Столбец имеет тип INT, который соответствует типу Integer идентификатора перечисления.
Нажмите на кнопку Save and run.
Студия выполнит changelog, затем соберет и запустит приложение.
Откройте http://localhost:8080 в вашем веб-браузере и войдите в приложение с учетными данными администратора (admin / admin).
Раскройте меню Application и нажмите на подпункт Users. Вы увидите столбец Onboarding status на экране User.browse:
Вы можете скрыть ненужные столбцы, чтобы освободить место для новых атрибутов. Наведите указатель мыши на правый угол заголовка таблицы, чтобы открыть кнопку управления (
), щелкните ее и отмените выбор неиспользуемых столбцов во всплывающем списке:
Нажмите на кнопку Create. Компонент UI для выбора статуса показан в нижней части формы:
Установка начального значения для атрибута
Для вновь созданного пользователя атрибут onboardingStatus должен быть автоматически установлен в значение Not started. В этом разделе вы узнаете, как настроить экран User.edit для инициализации этого атрибута.
Откройте класс UserEdit.java и найдите его метод onInitEntity():
Этот метод представляет собой обработчик событий, вызываемый фреймворком при открытии экрана редактирования для нового экземпляра сущности. Объект event, переданный методу, содержит новую сущность.
Добавьте следующие строки в конец тела метода:
@Subscribe
public void onInitEntity(InitEntityEvent<User> event) {
usernameField.setEditable(true);
passwordField.setVisible(true);
confirmPasswordField.setVisible(true);
isNewEntity = true;
User user = event.getEntity();
user.setOnboardingStatus(OnboardingStatus.NOT_STARTED);
}
Если вы переключитесь на запущенное приложение, закроете экран редактора и снова нажмете Create, вы увидите, что Onboarding status инициализируется автоматически:
|
Чтобы сгенерировать обработчик событий с нуля, нажмите Generate Handler на панели действий в верхней части редактора кода и выберите
|
Резюме
В этом разделе вы добавили атрибут Onboarding status в сущность User. Этот атрибут представляет собой перечисление с тремя возможными значениями: Not started, In progress, Completed.
Вы узнали, что:
-
Перечисления представляют собой наборы констант, которые определяются во время разработки.
-
В Jmix константа перечисления имеет значение и идентификатор. Идентификатор хранится в базе данных вместо константы или ее порядкового значения.
-
Вновь созданный атрибут сущности можно легко добавить к существующим экранам с помощью кнопки Add to Screens (
) на панели Attributes дизайнера сущностей.
-
Обработчик InitEntityEvent можно использовать для инициализации атрибутов нового экземпляра сущности на экране редактирования. Заглушка обработчика может быть сгенерирована Studio, если вы нажмете Generate Handler на панели действий редактора кода.