Release notes 7.21
Друзья, мы выпустили крупный релиз N2O Framework 7.21.0.
Источники данных
В N2O 7.21 появился новый элемент <datasource>
.
Это источник данных страницы.
В версии 7.19 мы уже ввели атрибут datasource
у виджетов.
Он задавал имя виртуальной модели данных, на которую ссылается виджет.
Сейчас же этот атрибут становится ссылкой на источник данных, который со здается в элементе <datasources>
на странице:
<page xmlns="http://n2oapp.net/framework/config/schema/page-4.0">
<datasources>
<!-- Источники данных страницы -->
<datasource id="persons"
query-id="persons"/>
</datasources>
</page>
Это означает, что виджеты больше не отвечают за получение данных. За получение данных отвечают источники данных.
Несколько виджетов могут ссылаться на один источник данных. Это дает следующие преимущества:
- Получение данных происходит один раз и сразу для всех
- Если форма меняет свои данные, то эти изменения доступны сразу всем формам с тем же источником данных
- Данные сохраняются не у формы, а у источника данных, а значит все формы можно сохранить одной кнопкой
- Валидации собираются со всех форм одного источника данных и проверяются при отправке на сервер
Больше нет ссылок на виджет, таких, как widget-id
или ref-widget-id
, которые на самом деле задавали не виджет, а его модель.
Вместо этого используется атрибут datasource
. Например:
<button label="Просмотр">
<show-modal page-id="personCard" route="/:person_id/card">
<params>
<path-param name="person_id"
value="{id}"
datasource="persons"
model="resolve"/>
</params>
</show-modal>
</button>
Так же больше нет ссылок на выборку query-id
и объект object-id
в виджетах.
Они перенесены в источники данных.
Это довольно существенные изменения, которые привели к созданию новых мажорных версий XSD схем:
page-4.0
, region-3.0
, widget-5.0
, fieldset-5.0
, control-3.0
, cell-3.0
.
Обратная совместимость старых версий схем сохранилась, хотя и есть некоторые нарушения.
Мы будем очень рады, если вы попробуете новое api и дадите нам обратную связь!
Stomp и Websocket
Источники данных появились не только на странице, но и в структуре приложения *.application.xml
:
<?xml version='1.0' encoding='UTF-8'?>
<application xmlns="http://n2oapp.net/framework/config/schema/application-2.0">
<datasources>
<!-- Источники данных приложения -->
<stomp-datasource id="notifCount"
destination="/badge"/>
</datasources>
</application>
Ист очники данных могут работать не только с выборкой, но и через websocket'ы <stomp-datasource>
.
В качестве протокола взаимодействия с websocket мы используем stomp.
С помощью источников данных приложения можно будет получать данные, которые нужны на любой странице. Эти данные уже сейчас можно применить в меню навигации в качестве счетчиков:
<nav>
<menu-item id="notif"
datasource="notifCount"
icon="fa fa-bell"
badge="{count}"
badge-color="{color}">
<open-page page-id="test" route="/test"/>
</menu-item>
</nav>
Со стороны сервера для передачи stomp сообщений на клиент через websocket необходимо использовать SimpMessagingTemplate
:
@Autowired
private SimpMessagingTemplate messagingTemplate;
...
BadgeMessage message = new BadgeMessage();
message.setCount(1);
message.setColor("danger");
messagingTemplate.convertAndSendToUser(session.getId(), "badge", message);
Подробнее про stomp источники данных можно почитать здесь.
Open-page в новой вкладке
Открывать страницы с хлебными крошками теперь можно в отдельной вкладке.
Для этого достаточно просто указать атрибут target
:
<button label="Открыть">
<open-page page-id="page"
target="newWindow"/>
</button>