Что нового
В данном разделе приведена информация о новой функциональности и возможных несовместимых изменениях в фреймворке 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
— это таблица данных, которая позволяет группировать строки по значениям в одном или нескольких колонках.
Компонент предоставляется дополнением GroupDataGrid, для которого требуется подписка Enterprise или BPM.
Чтобы включить дополнение в ваш проект, убедитесь, что ваш build.gradle
определяет доступ к премиум-репозиторию и добавьте следующую зависимость:
implementation 'io.jmix.groupgrid:jmix-groupgrid-flowui-starter'
Компонент groupDataGrid
может быть использован в экране следующим образом:
<view xmlns="http://jmix.io/schema/flowui/view"
xmlns:groupg="http://jmix.io/schema/groupgrid/ui"
...
<layout>
<groupg:groupDataGrid id="ordersDataGrid" width="100%" minHeight="20em"
dataContainer="ordersDc" columnReorderingAllowed="true">
<groupg:actions>
<groupg:action id="createAction" type="list_create"/>
<groupg:action id="editAction" type="list_edit"/>
...
</groupg:actions>
<groupg:groupBy>
<groupg:columnRef key="client"/>
</groupg:groupBy>
<groupg:columns resizable="true">
<groupg:groupColumn header="Groups"/>
<groupg:column property="client"/>
<groupg:column property="date"/>
...
</groupg:columns>
</groupg:groupDataGrid>
...
Компонент 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> {
@Override
Iterable<Order> findAll(Sort sort, @Nullable FetchPlan fetchPlan);
}
После:
public interface OrderRepository extends JmixDataRepository<Order, UUID> {
@Override
List<Order> findAll(Sort sort, @Nullable FetchPlan fetchPlan);
}
Причина в том, что теперь JmixDataRepository
реализует ListCrudRepository
, как упоминалось выше.