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 или .groovy)

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

Конфигурации 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-2.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

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

Структура Groovy файла#

Файлы конфигураций можно создавать с помощью groovy скриптов.

Для подключения groovy необходимо добавить зависимость:

<dependency>    <groupId>org.codehaus.groovy</groupId>    <artifactId>groovy-all</artifactId>    <version>2.5.7</version></dependency>
Пример файла index.page.groovy
import net.n2oapp.framework.api.metadata.*
page = new N2oSimplePage()page.widget = new N2oForm()page.widget.name = 'Моя страница на groovy'

В groovy скрипте необходимо создать объект конфигурации, соответствующей её типу.

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

Конфигурации могут иметь ссылки друг на друга. Для ссылки используются элементы или атрибуты 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. К ним можно получить доступ из трансформации метаданных или процессинга данных.

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

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

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

В любых значениях атрибутов и элементов 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>.

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