Skip to main content

Миграция с 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>
note

Здесь и далее будут приведены примеры только для источника данных страницы. Но то же самое верно и для внутреннего источника виджета.

  • Параметры действий перенесены в элемент <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).