Миграция с 7.22 на 7.23
#
Изменения в сборке- Добавлена поддержка Java 17
- Версия Spring Boot изменена на 2.5.12
#
Изменения в XML APIУпразднены устаревшие схемы:
page-2.0
,region-1.0
Добавлены новые схемы:
application-3.0
иquery-5.0
.Атрибуты
ref-page
полей иtarget-page
действия<copy>
упразднены с сохранением обратной совместимости. Атрибутtarget-page-id
действийshow-modal
/open-drawer
был удален. Для обращения к источнику данных родительской страницы рекомендуется использовать<parent-datasource>
.Атрибуты
visibility-condition
иenabling-condition
упразднены.Упразднено действие
<perform>
. Вместо него необходимо использовать действие<action>
.
#
Переход на application-3.0- Необходимо перенести элемент
<sidebar>
во внутрь элемента<sidebars>
. Таким образом добавлена поддержка нескольких<sidebar>
, отображающихся в зависимости от url страницы, который должен соответствовать атрибутуpath
.
Пример как работало в схемах application-1.0 и application-2.0
<?xml version='1.0' encoding='UTF-8'?><application xmlns="http://n2oapp.net/framework/config/schema/application-1.0"> <sidebar src="test" class="test" title="Test Sidebar" home-page-url="http://google.com/"> <nav ref-id="testMenu"/> </sidebar></application>
Пример как работает в схеме application-3.0
<?xml version='1.0' encoding='UTF-8'?><application xmlns="http://n2oapp.net/framework/config/schema/application-3.0"> <sidebars> <sidebar path="/home" src="home" class="home" title="Home Sidebar" home-page-url="http://google.com/"> <nav ref-id="homeMenu"/> </sidebar> <sidebar path="/profile" src="profile" class="profile" title="Profile Sidebar"> <nav ref-id="profileMenu"/> </sidebar> </sidebars></application>
#
Переход на query-5.0- Все фильтры полей необходимо вынести в новый тэг
<filters>
, указав при этом в атрибутеfield-id
фильтра значение идентификатора поля, соответствующего данному фильтру.
Пример как работало в схеме query-4.0
<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-4.0">
<fields> <field id="id"> <select/> <filters> <eq filter-id="id"/> </filters> </field> <field id="name"> <select/> <filters> <eq filter-id="nameEq"/> <like filter-id="nameLike"/> </filters> </field> </fields></query>
Пример как работает в схеме query-5.0
<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-5.0"> <!-- фильтры вынесены отдельно от полей --> <!-- для привязки к полю укажите field-id --> <filters> <eq field-id="id" filter-id="id"/> <eq field-id="name" filter-id="nameEq"/> <like field-id="name" filter-id="nameLike"/> </filters>
<fields> <field id="id"/> <field id="name"/> </fields></query>
- Атрибуты
mapping
,default-value
иnormalize
элемента<select>
необходимо перенести в<field>
. Тело элемента<select>
переносится в атрибутselect-expression
.
note
В новой схеме все поля по умолчанию участвуют в выборке.
Поэтому во всех элементах <field>
с отсутствующим тегом <select>
необходимо прописать select="false"
.
После указанных преобразований элемент <select>
должен быть удален из поля.
Пример как работало в схеме query-4.0
<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-4.0">
<fields> <field id="personName"> <select mapping="['name']" default-value="unknown" normalize="#this.toUpperCase()">name: $$name</select> </field> <!-- поле не участвует в выборке --> <field id="personAge"/> </fields></query>
Пример как работает в схеме query-5.0
<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-5.0">
<fields> <field id="personName" mapping="['name']" select-expression="name: $$name" default-value="unknown" normalize="#this.toUpperCase()"/> <!-- поле не участвует в выборке (задан select="false") --> <field id="personAge" select="false"/> </fields></query>
- Значение атрибута
mapping
элемента<sorting>
переносится в атрибутsorting-mapping
тега<field>
. Тело элемента<sorting>
переносится в атрибутsorting-expression
.
note
В новой схеме все поля по умолчанию не являются сортируемыми (как и раньше).
Поэтому во всех элементах <field>
с указанным тегом <sorting>
необходимо прописать sorting="true"
.
После указанных преобразований элемент <sorting>
должен быть удален из поля.
Пример как работало в схеме query-4.0
<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-4.0">
<fields> <field id="name"> <sorting/> </field> <field id="price" domain="integer"> <sorting mapping="['price']">$$price: price</sorting> </field> </fields></query>
Пример как работает в схеме query-5.0
<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-5.0">
<fields> <field id="name" sorting="true"/> <field id="price" domain="integer" sorting="true" sorting-mapping="['price']" sorting-expression="$$price: price"/> </fields></query>
- Также в новой схеме введена возможность задавать иерархию полей с помощью элементов
<field>
,<reference>
,<list>
. Группы полей, использующих точку вmapping
элемента<select>
(или по умолчанию в идентификаторе), напримерmapping="['employee.name']"
иmapping="['employee.age']"
илиid="cars.id"
иid="cars.price"
можно задавать как<reference>
и<list>
поля.
Пример как работало в схеме query-4.0
<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-4.0">
<fields> <field id="readerId"> <select mapping="['reader.id']"/> </field> <field id="readerEmail"> <select mapping="['reader.email']"/> </field> <field id="booksTitle"> <select mapping="['reader.books.title']"/> </field> <field id="booksAuthor"> <select mapping="['reader.books.author']"/> </field> </fields></query>
Пример как работает в схеме query-5.0
<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-5.0">
<fields> <reference id="reader" mapping="['reader']"> <field id="readerId" mapping="['id']"/> <field id="readerEmail" mapping="['email']"/> <list id="books" mapping="['books']"> <field id="booksTitle" mapping="['title']"/> <field id="booksAuthor" mapping="['author']"/> </list> </reference> </fields></query>
- В
query-5.0
упразднены дочерние элементы<expression>
и<join>
тега<fields>
.
#
Изменения в сборке FrontendУдалены модули
* n2o-auth - содержимое перенесено в n2o-framework/core/auth/* n2o-notifications - содержимое перенесено в n2o-framework/sagas/notifications/* n2o-ecp-plugin
#
Изменения в Java API- Метод
setCriteriaResolver
классаN2oQueryProcessor
был переименован вsetCriteriaConstructor
. - Изменилась сигнатура метода
buildSuccessMessage класса
классаAlertMessageBuilder
:buildSuccessMessage(String, RequestInfo, DataSet)
->buildSuccessMessage(ActionRequestInfo<DataSet>, DataSet)
- Классы из пакета
net.n2oapp.framework.api.metadata.event.action.*
перемещены в пакетnet.n2oapp.framework.api.metadata.action.*
. - Класс
net.n2oapp.framework.api.metadata.application.Event
перемещен в пакетnet.n2oapp.framework.api.metadata.meta.event.Event
#
Изменения в API автотестов- Интерфейс
Dropdown
переименован вExpandable
- Метод
tooltip
был перемещен из интерфейсаPage
в интерфейсы, использующих его компонентов (StandardButton
,IconCell
,TooltipListCell
) - Методы
expand
\collapse
компонентовDateInput
,DateInterval
,Select
,InputSelect
,TimePicker
,InputSelectTree
объявлены deprecated. Вместо них рекомендуется использовать методыopenPopup
\closePopup
- В автотестах теперь необязательно указывать application.xml файл, если он не используется явно.
Как следствие этого, файл
net/n2oapp/framework/autotest/blank.application
был удален. Если он использовался в ваших автотестах, то необходимо удалить его из тестовых классов. - Обращение к алертам через
page.alerts().alert(0)
объявлено deprecated. Рекомендуется использовать следующий вызовpage.alerts(Alert.Placement.top).alert(0)
. - Методы
clickLink
\firstTitleShouldHaveText
\titleShouldHaveText
\titleByIndexShouldHaveText
компонента Breadcrumb объявлены deprecated. Для обращения к хлебным крошкам рекомендуется использовать следующий вызовpage.breadcrumb.crumb(0)
.