Провайдеры данных
В N2O Framework визуальные компоненты связываются с данными через объекты и выборки. Объекты и выборки делегируют свои вызовы провайдерам данных.
Провайдеры — это универсальный способ обращения к источнику или к сервису предоставляющему данные. N2O поддерживает провайдеры SQL, REST, GraphQl, Spring Beans, EJB, MongoDB и другие.

Объект
Объект — это сущность предметной области. Он объединяет в себе все операции над этой сущностью и её валидации.
Объекты создаются с помощью файлов [id].object.xml.
<?xml version='1.0' encoding='UTF-8'?>
<object xmlns="http://n2oapp.net/framework/config/schema/object-4.0"
name="Мой объект">
<fields>
<!-- Поля объекта -->
<field id="id"/>
<field id="name"/>
<field id="birthday"/>
<list id="docs">...</list>
...
</fields>
<operations>
<!-- Операции объекта -->
<operation id="create">...</operation>
<operation id="update">...</operation>
<operation id="delete">...</operation>
...
</operations>
<validations>
<!-- Валидации объекта -->
<constraint id="uniqueName">...</constraint>
<condition id="dateInPast">...</condition>
...
</validations>
</object>
Операции объекта
Над объектом можно выполнять операции, например, создание или удаление. Операция определяет входные, выходные данные для провайдера и задаёт список валидаций.
<operation id="create">
<invocation>
... <!--Провайдер данных-->
</invocation>
<in>
<!--Входные данные-->
<field id="name"/>
<field id="birthday"/>
</in>
<out>
<!--Выходные данные-->
<field id="id"/>
</out>
<fail-out>
<!--Выходные данные в случае ошибки операции-->
<field id="message" mapping="#this.getMessage()"/>
</fail-out>
<validations>...</validations><!--Валидации операций-->
</operation>
Валидации объекта
Валидации — это проверки объекта на коррект ность.
Проверки могут быть на удовлетворённость данных какому-либо условию.
Например, что дата не может быть в прошлом.
Они задаются элементом <condition>:
<validations>
<condition id="dateInPast"
on="birthday"
message="Дата рождения не может быть в будущем">
birthday <= today()
</condition>
</validations>
Условия пишутся на языке JavaScript.
Так же проверки могут быть выполнены в базе данных или сервисах.
Например, что наименование должно быть уникальным.
Такие проверки задаются в элементе <constraint>:
<validations>
<constraint id="uniqueName"
message="Имя {name} уже существует"
result="cnt == 0">
<invocation>
... <!-- Провайдер данных -->
</invocation>
<in>
<!--Входные данные-->
<field id="id"/>
<field id="name"/>
</in>
<out>
<!--Выходные данные-->
<field id="cnt"/>
</out>
</constraint>
</validations>
Вызов проверки происходит аналогично вызову операции объекта, т.е. определяет входные данные для провайдера и обрабатывает результат выполнения.