Что нового
В данном разделе приведена информация о новой функциональности и возможных несовместимых изменениях в фреймворке Jmix и Jmix Studio версии 2.7. Примите их во внимание при обновлении с предыдущей версии фреймворка.
|
Для создания новых проектов в Jmix 2.7 или для апгрейда существующего проекта требуется Studio 2.7 или более поздней версии, поэтому в первую очередь обновите плагин Jmix Studio. Минимальная требуемая версия IntelliJ IDEA / OpenIDE - 2025.1. |
Раздел Апгрейд проекта содержит информацию о том, как обновить проект с помощью Studio. Процедура автоматической миграции вносит следующие изменения в ваш проект:
-
Обновляет версию Jmix BOM, которая, в свою очередь, определяет версии всех зависимостей.
-
Обновляет версию Jmix Gradle plugin.
См. полный список критических изменений, которые могут затронуть ваш проект после обновления.
Обновленные зависимости
Vaadin обновлен до версии 24.9.
Новая и улучшенная функциональность
Улучшения в Studio
-
Дизайнер ресурсных ролей теперь отбражает иерархию наследования ролей и позволяет выбирать базовые роли. Разрешения, унаследованные от базовых ролей, отображаются в виде элементов только для чтения. На вкладке разрешений Entities теперь доступные и недоступные элементы выделяются разными цветами.
-
Действие Add attribute from DB в дизайнере сущностей позволяет использовать подход «database-first» при разработке модели данных. Вы можете сначала создать колонку в таблице базы данных, а затем импортировать ее в модель данных в качестве атрибута, отображенного на колонку.
-
Если включить новый флажок Create Data Repository в диалоговом окне New JPA Entity, Studio автоматически создаст репозиторий данных для новой сущности и запомнит состояние флажка для следующего создания сущности. При создании экранов для сущности с помощью мастера Create Jmix View, Studio теперь автоматически выбирает флажок Use Data Repositories, если для этой сущности существует репозиторий данных.
Компонент GroupDataGrid
Компонент groupDataGrid — это таблица данных, которая позволяет группировать строки по значениям в одном или нескольких колонках.
Документация по дополнению Grouping Data Grid содержит полную информацию об установке и использовании компонента.
Компонент Card
Компонент card — это контейнер, предназначенный для представления содержимого в формате карточки. Он предоставляет возможности настройки компоновки и внешнего вида, позволяя организовать связанное содержимое и действия.
Компонент GridLayout
Компонент gridLayout размещает дочерние компоненты в адаптивной, двухмерной системе сетки на основе CSS Grid Layout. Он позволяет отображать отдельные компоненты, карточки или фрагменты и может быть удачной альтернативой таблиц данных.
Компонент UserMenu
Новый компонент userMenu позволяет наглядно и визуально привлекательно отображать данные вошедшего в систему пользователя вместе с такими связанными действиями, как Замещение пользователя и Выход.
Раскрывающееся меню компонента может содержать предопределенные и пользовательские действия, а также вложенные элементы и другие UI-компоненты.
Новый шаблон проекта теперь включает компонент userMenu в главный экран.
Фильтрация по дате
Компоненты genericFilter и propertyFilter теперь предоставляют новую операцию сравнения: date equals. Она игнорирует время в значениях даты и времени и позволяет пользователям легко проверять, попадает ли значение даты и времени в определенную дату.
Диалоговое окно Date Interval поддерживает произвольные начальную и конечную даты и может использоваться вместо создания двух условий >= и < при проверке, находится ли значение даты и времени в пределах диапазона.
Репозитории данных
-
Интерфейс
JmixDataRepositoryтеперь расширяетorg.springframework.data.repository.ListCrudRepository, и все его методыfindAll(), которые ранее возвращалиIterable, теперь возвращаютList. -
Репозитории данных Jmix теперь поддерживают запросы, возвращающие скалярные значения и агрегаты. См. примеры использования аннотации @Query.
-
Методы
JmixDataRepository, возвращающиеPage, выполняют дополнительныйcountзапрос к базе данных, чтобы предоставить общее количество элементов и страниц в объектеPage. Если количество страниц не требуется в вашей логике, используйте новые методыfindAllSlice(), возвращающиеSlice. Это снизит нагрузку на базу данных. -
Новые обработчики loadFromRepositoryDelegate и totalCountByRepositoryDelegate упрощают использование репозиториев данных в экранах. Они позволяют вызывать репозитории данных напрямую без преобразования параметров из объекта
LoadContext. Если вы установите флажок Use Data Repositories в Мастере создания экранов, созданный экран будет использовать новые делегаты.
Отчеты времени разработки
Дополнение Reports теперь поддерживает определение структуры отчета в аннотированных Java-классах во время разработки. Этот подход дает следующие преимущества:
-
Определения отчетов управляются системой контроля версий (Git).
-
Обновления отчетов включаются в новую версию приложения.
-
Разработчики могут использовать пошаговый отладчик и другие инструменты IDE при работе над загрузкой данных и другой логикой отчета.
Недостаток по сравнению с отчетами времени выполнения заключается в том, что пользователи не могут изменять отчет в работающем приложении.
Примеры создания отчетов во время разработки смотрите в руководстве Report Generation.
REST DataStore
Дополнение REST DataStore теперь позволяет совместно использовать сущности и интерфейсы сервисов между интегрированными приложениями. Это приводит к более тесной связи между приложениями, но сокращает дублирование кода и усилия по разработке.
Более подробную информацию смотрите в разделе REST DataStore: Выделение общего кода приложений.
Entity Log
Журнал сущностей теперь может отслеживать изменения в атрибутах many-to-many на владеющей стороне.
Критические изменения
Переопределенные методы JmixDataRepository
Если вы переопределили методы findAll из JmixDataRepository, которые ранее возвращали Iterable, вам следует изменить тип результата на List. Например:
public interface OrderRepository extends JmixDataRepository<Order, UUID> {
// before
@Override
Iterable<Order> findAll(Sort sort, @Nullable FetchPlan fetchPlan);
// after
@Override
List<Order> findAll(Sort sort, @Nullable FetchPlan fetchPlan);
}
Причина в том, что теперь JmixDataRepository реализует ListCrudRepository, как упоминалось выше.