Источники данных
С помощью источников данных виджеты и боковые панели получают данные для отображения.
Стандартные источники получают данные от провайдеров данных, используя выборку. Существуют и другие способы получения данных: из локального хранилища браузера, значения по умолчанию, наследуемые источники и др. О каждом случае будет рассказано далее.
Местоположение источников
Источники задаются на странице <page> или в структуре приложения <application> с помощью элемента <datasources>.
Источники данных на странице
Наиболее частым случаем является задание источника на странице для заполнения виджета данными.
<page xmlns="http://n2oapp.net/framework/config/schema/page-4.0">
<datasources>
<!-- Источники данных страницы -->
<datasource id="main"/>
<datasource id="docs"/>
<datasource id="addresses"/>
</datasources>
</page>
На такой источник данных можно сослаться из виджета с помощью атрибута datasource:
<form datasource="main">
...
</form>
Из разных виджетов можно ссылаться на один и тот же источник данных. В этом случае они все будут оперировать одними и теми же данными.
Вложенный источник данных в виджете
Источник данных можно создать внутри виджета, если данные нужны только этому виджету.
В этом случае не нужно задавать идентификатор id источника, т.к. на него нельзя будет сослаться.
<form>
<datasource>
<!-- Источник данных виджета -->
</datasource>
</form>
В качестве вложенного источника может использоваться только стандартный источник данных.
Если у виджета никак не задан источник данных, то он создастся автоматически.
Передача источника на открываемую страницу
Источники данных можно передать на открываемую страницу:
<button label="Создать">
<open-page page-id="personCard">
<datasources>
... <!-- Источники данных, которые будут переданы на страницу personCard -->
</datasources>
</open-page>
</button>
Или в модальное окно, и любые другие виды окон:
<button label="Создать">
<show-modal page-id="personCard">
<datasources>
... <!-- Источники данных, которые будут переданы на страницу personCard -->
</datasources>
</show-modal>
</button>
В случае, если id пробрасываемых источников не пересекаются с источниками открываемой страницы,
то они просто дополнят список источников открываемой страницы.
Однако наибольший интерес представляет случай, когда совпадения все-таки есть. Тогда пробрасываемые источники заменят собой указанные на странице источники. В связи с этим возникает возможность открытия страницы из разных мест с разными данными
Представим, что открываемая страница имеет следующий вид:
<page xmlns="http://n2oapp.net/framework/config/schema/page-4.0">
<datasources>
<datasource id="docs"/>
</datasources>
<regions>
<form datasource="docs">
<fields>
<input-text id="name" label="Наименование"/>
<input-text id="description" label="Описание"/>
</fields>
</form>
</regions>
</page>
Теперь откроем эту страницу сначала на создание (поля не будут заполнены):
<button label="Создать">
<show-modal page-id="docPage" page-name="Создание документа">
<datasources>
<datasource id="docs" default-values-mode="defaults"/>
</datasources>
</show-modal>
</button>
А после - на редактирование (поля заполнены значениями определенной записи):
<button label="Изменить">
<show-modal page-id="docPage" page-name="Изменение документа">
<datasources>
<datasource id="docs" query-id="documents">
<filters>
<eq filter-id="id" value={id}/>
</filters>
<datasource/>
</datasources>
</show-modal>
</button>
Для передачи источника данных на страницу simple-page можно не задавать id.
Он будет сливаться с единственным источником данных, который есть на странице.
В пробрасываемых источниках могут присутствовать ссылки на другие источники данных (например source-datasource в inherited-datasource).
В таком случае считается, что эти источники заданы на открываемой странице.
Если же вы хотели сослаться на источник родительской страницы, то укажите на открываемой странице parent-datasource.
Источники данных в приложении
Источники данных, заданные в приложении могут выполнять сразу несколько функций: заполнение данными боковых панелей, а также определение глобального для всех страниц источника данных.
Первая функция будет описана далее, а для второй существует специальный вид источника данных.
Для з адания источников данных в приложении используется элемент datasources.
<application xmlns="http://n2oapp.net/framework/config/schema/application-3.0">
<datasources>
<datasource id="appDs"/>
... <!-- Источники данных в приложении -->
</datasources>
</application>
На заданные таким образом источники можно ссылаться из боковых панелей <sidebar> с помощью атрибута datasource.
<sidebar datasource="appDs">
...
</sidebar>
Источник данных в боковой панели <sidebar> позволяет отображать динамические данные в заголовках или ссылках навигационного меню.
Из разных боковых панелей можно ссылаться на один и тот же источник данных. В этом случае они все будут оперировать одними и теми же данными.
Вложенный источник данных в боковой панели
Источник данных можно создать внутри бо ковой панели, если данные нужны только этой боковой панели.
В этом случае не нужно задавать идентификатор id источника, т.к. на него нельзя будет сослаться.
<sidebar>
<datasource>
<!-- Источник данных боковой панели -->
</datasource>
</sidebar>
В качестве вложенного источника может использоваться только стандартный источник данных.
Если у боковой панели не задан источник данных, то он создастся автоматически.
Виды источников данных
Стандартный источник данных
В стандартном источнике данных можно задать объект и выборку, чтобы загружать и сохранять данные через провайдеры.
<datasource id="main"
object-id="person"
query-id="person">
...
</datasource>
Фильтрация источника данных
Выборку можно отфильтровать через элемент <filters>.
<datasource id="main" query-id="person">
<filters>
<eq field-id="id" value="123"/>
... <!-- Другие фильтры выборки -->
</filters>
</datasource>
Подробнее о фильтрации выборок