Миграция с 7.20 на 7.21
Изменения в XML API
-
Атрибут
datasource
вpage-3.0
удален. Если нужен одинdatasource
на несколько виджетов, необходимо использовать схемуpage-4.0
с элементом<datasources>
. -
Появились новые схемы
page-4.0
,widget-5.0
,toolbar-2.0
,datasource-1.0
,action-2.0
,region-3.0
,button-2.0
,cell-3.0
,fieldset-5.0
,control-3.0
. -
У виджетов упразднен атрибут
route
, теперь все пути вложенных и модальных страниц строятся от корня страницы. Если на странице несколько виджетов открывающих вложенные (<open-page>
) или модальные страницы (<show-modal>
), рекомендуется изменить ихroute
так, чтобы они не совпадали. Если уroute
виджета использовался параметр пути, то необходимо эти параметры пути скопировать в действия вызова страниц и окон. -
Атрибут
validate="page"
у<button>
упразднен. Для всех кнопок действует проверка только текущей формы, если необходимо проверить несколько форм, следует использовать атрибутvalidate-datasources
, в котором перечисляется список источников данных для валидации. -
Если у
<button>
задан атрибутwidget-id
, то после успешного выполненияinvoke
обновится именно тот виджет, который указанный в атрибуте, а не виджет, в котором находится кнопка. Чтобы этого избежать, нужно во всех кнопках, где указан widget-id указать refresh-widget-id равный виджету, в котором находится кнопка. -
Упразднен атрибут
fetch-on-init
. Теперь он вычисляется автоматически. -
Атрибут
search-widget-id
стал обязательным в<search-bar>
страницы с поисковой строкой для схемpage-2.0
иpage-3.0
Переход на page-4.0
- Атрибуты
query-id
иobject-id
виджетов необходимо перенести в элеме нт<datasource>
страницы или виджета
Пример как работало в схемe page-3.0
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-3.0">
<regions>
<form query-id="data" object-id="data">
...
</form>
</regions>
</page>
Пример как работает в схемe page-4.0
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-4.0">
<!-- использование источника на странице -->
<datasources>
<datasource id="ds" query-id="data" object-id="data"/>
</datasources>
<regions>
<form datasource="ds">
...
</form>
</regions>
</page>
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-4.0">
<regions>
<form>
<!-- использование внутреннего источника данных виджета -->
<datasource query-id="data" object-id="data"/>
...
</form>
</regions>
</page>
- Элемент
<pre-filters>
был переименован в<filters>
. Также префильтр виджета был перенесен внутрь элемента<datasource>
.
Пример как работало в схемe page-3.0
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-3.0">
<regions>
<form>
...
<pre-filters>
<eq field-id="id" param="person_id"/>
</pre-filters>
</form>
</regions>
</page>
Пример как работает в схемe page-4.0
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-4.0">
<datasources>
<datasource id="ds">
<filters>
<eq field-id="id" param="person_id"/>
</filters>
</datasource>
</datasources>
<regions>
<form datasource="ds">
...
</form>
</regions>
</page>
Здесь и далее будут приведены примеры только для источника данных страницы. Но то же самое верно и для внутреннего источника виджета.
- Параметры действий перенесены в элемент
<params>
Пример как работало в схемe page-3.0
<show-modal page-id="person" route="/:id/update">
<path-param name="id" value="{id}"/>
<query-param name="name" value="{name}"/>
</show-modal>
Пример как работает в схемe page-4.0
<show-modal page-id="person" route="/:id/update">
<params>
<path-param name="id" value="{id}"/>
<query-param name="name" value="{name}"/>
</params>
</show-modal>
- Атрибут
upload
действия открытия страницы (например<show-modal>
) можно прокинуть на следующую страницу в виде<datasource>
с соответствующей выборкой.
Пример как работало в схемe page-3.0
<!-- для действия create данные берутся из default выборки -->
<show-modal page-id="person" submit-operation-id="create" upload="defaults"/>
...
<!-- для действия update данные берутся из обычной выборки -->
<show-modal page-id="person" submit-operation-id="update"/>
<?xml version='1.0' encoding='UTF-8'?>
<simple-page xmlns="http://n2oapp.net/framework/config/schema/page-3.0">
<form query-id="data" default-values-query-id="default">
...
</form>
</simple-page>
Пример как работает в схемe page-4.0
<show-modal page-id="person" submit-operation-id="create">
<!-- прокидывание источника с default выборкой на следующую страницу -->
<datasources>
<datasource query-id="default"/>
</datasources>
</show-modal>
...
<show-modal page-id="person" submit-operation-id="update">
<!-- прокидывание источника с обычной выборкой на следующую страницу -->
<datasources>
<datasource query-id="data"/>
</datasources>
</show-modal>
<?xml version='1.0' encoding='UTF-8'?>
<simple-page xmlns="http://n2oapp.net/framework/config/schema/page-4.0">
<form>
<!-- источник первого виджета страницы будет неявно заменен на тот,
который прокинули из родительской страницы -->
<datasource query-id="data"/>
...
</form>
</simple-page>
- Master-detail зависимость виджетов задается через
<fetch>
зависимость<datasource>
.
Пример как работало в схемe page-3.0
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-3.0">
<regions>
<table id="master" query-id="test">
...
</table>
<table depends-on="master" query-id="docs"
master-field-id="id" detail-field-id="personId">
...
</table>
</regions>
</page>
Пример как работает в схемe page-4.0
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-4.0">
<datasources>
<datasource id="ds1"/>
<datasource id="ds2">
<dependencies>
<fetch on="ds1" model="resolve"/>
</dependencies>
<filters>
<eq field-id="personId" value="{id}" datasource="ds1"/>
</filters>
</datasource>
</datasources>
<regions>
<table datasource="ds1">
...
</table>
<table datasource="ds2">
...
</table>
</regions>
</page>
- Атрибуты
widget-id
и*-widget-id
переименованы наdatasource
и*-datasource
. - Атрибуты
ref-model
иref-widget-id
параметров и зависимостей переименованы наmodel
иdatasource
соответственно.
Изменения в Java API
- В
N2o*
классах добавились@Deprecated
свойства. Например, вN2oWidget
поляqueryId
иobjectId
. В этих классах появились методыadaptV*()
, которые мигрируют устаревшие поля в новые структуры. Нужно либо вызвать их, либо перейти на новую структуру самостоятельно, не используя deprecated свойства.
Изменения функциональности
-
Возможность фокуса на только что созданной записи упразднена. Удален атрибут
focus-after-submit
. Рекомендуется использовать редирект на карточку редактирования сразу после создания записи с помощью атрибутаredirect-url-after-submit
. -
Сообщения внутри виджета больше не будут отображаться. Все сообщения будут отображаться на странице.
-
Изменилось формирование route для open-page (потому что больше нет зависимостей между виджетами)
Пример как работало раньше
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-2.0">
<regions>
<region>
<form id="main">
<fields>
<input-text id="version"/>
<input-text id="number"/>
</fields>
</form>
<form id="dependent" depends-on="main" detail-field-id="id">
<fields>
<button widget-id="main">
<open-drawer
page-id="openDrawerPage"
route="/:version/btn1">
<path-param name="version" value="{version}"/>
<query-param name="number" value="{number}"/>
</open-drawer>
</button>
</fields>
</form>
</region>
</regions>
</page>
Url открываемой страницы был: /:test_main_id/dependent/:version/btn1
, теперь будет просто: /:version/btn1
Чтобы получить url как раньше необходимо написать следующее:
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-2.0">
<regions>
<region>
<form id="main">
<fields>
<input-text id="version"/>
<input-text id="number"/>
</fields>
</form>
<form id="dependent" depends-on="main" detail-field-id="id">
<fields>
<button widget-id="main">
<open-drawer
page-id="openDrawerPage"
route="/:test_main_id/detail/:version/btn1">
<path-param name="test_main_id" value="{id}"/>
<path-param name="version" value="{version}"/>
<query-param name="number" value="{number}"/>
</open-drawer>
</button>
</fields>
</form>
</region>
</regions>
</page>
- Удален функционал, что валидации из операции проставляются в запрос за данными (раньше при открытии формы в валидации запроса добавлялись валидации операции submit).