Skip to main content

Файлы конфигураций

В N2O Framework разработка WEB страниц и их связей с данными осуществляется при помощи N2O файлов конфигураций.

Расположение

Файлы конфигураций располагаются в папке проекта или в папке модуля. По умолчанию /src/main/resources/META-INF/conf.

Любой файл из этой папки может быть переопределен одноименным файлом в папке расширений. Путь к папке расширений задаётся настройкой n2o.config.path. По умолчанию: [USER_HOME]/.n2o/conf.

Формат файлов

Конфигурации N2O имеют определенный формат имени файла:

[id].[type].[ext]
  • id - Уникальный идентификатор метаданной в рамках типа
  • type - Тип конфигурации
  • ext - Способ задания метаданной (.xml)

Типы конфигураций

Конфигурации N2O иерархически структурированы по типу. Все типы конфигураций наследуются от java интерфейса SourceMetadata.

Типы конфигураций

ТипОписаниеXML СхемаJava класс
pageСтраницаhttp://n2oapp.net/framework/config/schema/page-4.0N2oPage
widgetВиджетhttp://n2oapp.net/framework/config/schema/widget-5.0N2oWidget
objectОбъектhttp://n2oapp.net/framework/config/schema/object-4.0N2oObject
queryВыборкаhttp://n2oapp.net/framework/config/schema/query-4.0N2oQuery
fieldsetФилдсетhttp://n2oapp.net/framework/config/schema/fieldset-5.0N2oFieldSet
applicationСтруктура приложенияhttp://n2oapp.net/framework/config/schema/application-3.0N2oApplication
menuМенюhttp://n2oapp.net/framework/config/schema/menu-3.0N2oSimpleMenu
accessСхема доступаhttp://n2oapp.net/framework/config/schema/access-2.0N2oAccessSchema

Структура XML файла

В теле XML файла первой строчкой должен идти заголовок xml:

<?xml version='1.0' encoding='UTF-8'?>

Далее корневой элемент метаданной и XML схема, определяющая её структуру:

<?xml version='1.0' encoding='UTF-8'?>
<object xmlns="http://n2oapp.net/framework/config/schema/object-4.0">
...
</object>
note

В наименовании схемы содержится её версия. Это позволяет схемам эволюционировать с полным сохранением обратной совместимости.

Ссылки на другие файлы

Конфигурации могут иметь ссылки друг на друга. Для ссылки используются элементы или атрибуты XML с окончанием: -id. В качестве значения ссылки используется идентификатор файла:

<query object-id="myObject">
...
</query>

Библиотеки компонентов

Внутри некоторых XML элементов разрешается вставлять элементы из другой схемы:

<set xmlns="http://n2oapp.net/framework/config/schema/fieldset-5.0"
xmlns:ctrl="http://n2oapp.net/framework/config/schema/control-3.0">
<ctrl:input-text>...</ctrl:input-text>
</set>

Такие места называются местами подключения библиотек компонентов.

note

В схеме элемента, допускающего библиотеки расширения, должен стоять элемент: <xs:any namespace="##other"/>

Вложенные конфигурации

Внутри некоторых XML элементов используются вложенные элементы другого типа.

Например, страница <simple-page> с таблицей <table> внутри.

<simple-page>
<!-- Вложенный виджет -->
<table>
<!-- Элементы вложенного виджета -->
<columns>...</columns>
...
</table>
</simple-page>

Можно сослаться на внешний файл используя атрибут ref-id:

<simple-page>
<table ref-id="myTable"/><!-- Ссылка на внешний виджет -->
</simple-page>

Переопределение свойств

Во вложенных конфигурациях можно переопределить некоторые свойства заданные по ссылке:

<simple-page>
<table ref-id="myTable"
name="Моя таблица">
<!-- свойство name, заданное здесь, переопределит name, заданный в myTable -->
</table>
</simple-page>

Расширенные свойства

В N2O XML файлы можно добавить свойства, специфичные для прикладного проекта. Для этого нужно создать XSD схему расширений, подключить её к XML файлу и вставить атрибуты в те элементы, которые допускают расширения:

Схема расширений
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://myproject.net/config/schema/ext-props-1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attribute name="prop1" type="xs:string"/>
<xs:attribute name="prop2" type="xs:string"/>
</xs:schema>
Подключение схемы расширений
<?xml version='1.0' encoding='UTF-8'?>
<page xmlns="http://n2oapp.net/framework/config/schema/page-4.0"
xmlns:ext="http://myproject.net/config/schema/ext-props-1.0"
ext:prop1="value1"
ext:prop2="value2">
...
</page>
note

В схеме элемента, допускающего расширения, должен стоять атрибут: <xs:anyAttribute/>

Расширенные свойства считываются автоматически в свойство properties. К ним можно получить доступ из трансформации метаданных или процессинга данных.

note

XSD схему создавать не обязательно, расширенные свойства все равно считаются в свойство properties. Без XSD схемы не будет подсказок и проверки свойств в xml.

Пример без создания схемы расширений
<form xmlns="http://n2oapp.net/framework/config/schema/widget-5.0"
xmlns:ext="http://example.com/n2o/ext-2.0">
<fields>
<field id="testId" src="src"
ext:attr="attr1"
ext:new-attr="attr1">
...
</field>
</fields>
</form>

Плейсхолдеры

Плейсхолдеры - это ссылки в метаданных на какие-либо значения, которые должны быть разрешены на различных этапах жизненного цикла приложения.

Ссылки на настройки

В любых значениях атрибутов и элементов XML можно использовать плейсхолдер ${property}, где property - это ссылка на настройки и локализацию.

Ссылки на контекст

В некоторых атрибутах и элементах (как правило в value и default-value) допускается использование плейсхолдера #{context}, где context - это название свойства в контексте пользователя.

Ссылки на данные

Во многих свойствах визуальных компонентов (таких как поля, ячейки, филдсеты), а так же в атрибутах value в фильтрах, можно использовать ссылки на данные заданные через плейсхолдер {link}, где link - ссылка на поле в текущей модели данных.

note

Ссылка на конкретную модель данных задается в паре с дополнительными атрибутами datasource и model.

JavaScript выражения

Во многих свойствах визуальных компонентов (таких как поля, ячейки, филдсеты), так же как и в случае с ссылками на данные, можно задавать JavaScript выражения через плейсхолдер "обратные кавычки":

`js expression`

Экранирование строк

В некоторых случаях N2O приходится автоматически приводить значения к типу. Например, в элементах option:

<option id="1" name="true"/>
<!-- id будет приведен к числовому типу,
name будет приведет к булевому типу -->

Иногда требуется избежать автоматического приведения к типу и оставить значение строкой. Для этого можно использовать плейсхолдер "одинарная кавычка" 'string'.

note

Для экранирования одинарной кавычки нужно вставить перед ней еще одну одинарную кавычку "''123''".

Валидация конфигураций

Все файлы конфигураций проверяются на корректность связей и логики. Проверка инициируется в runtime при первой загрузке файла в приложение.

Если обнаружена ошибка, файл помечается некорректным. При открытии страницы, связанной с некорректным файлом, отобразится сообщение валидации.

За валидацию отвечают java классы реализующие интерфейс SourceValidator<T>.

Валидация страницы
@Component
class MyPageValidator implements SourceValidator<N2oPage> {
/**
* Валидировать исходную метаданную
* @param source Исходная метаданная
* @throws N2oMetadataValidationException Иключение при ошибке валидации
*/
@Override
public void validate(N2oPage source,
ValidateProcessor p) {
... //проверки валидности
}
}