Что нового

В данном разделе приведена информация о новой функциональности и возможных несовместимых изменениях в фреймворке 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, как упоминалось выше.

Обязательный код отчета

Код отчета стал обязательным полем. Если вы редактируете отчет без кода, вам придется ввести значение, которое уникально для всех отчетов времени выполнения и времени разработки.

Список изменений

  • Решенные проблемы в Jmix Framework:

  • Решенные проблемы в Jmix Studio: