Front-end архитектура Creatio

Основы

Программная платформа — среда, которая используется для разработки (режим DesignTime) и выполнения (режим RunTime) приложения.

Схема взаимодействия структурных элементов программной платформы Creatio представлена на рисунке ниже.

Структурные элементы режимов платформы Creatio взаимодействуют через системный слой System.

Режим DesignTime 

Назначение режима DesignTime — разработка, изменение и кастомизация приложения.

Структурные элементы режима DesignTime программной платформы Creatio:

  • Слой Schema — слой метаданных. Содержит набор клиентских схем. Подробнее о клиентских схемах читайте в статье Клиентская схема.
  • Предварительно скомпилированный JavaScript-код.

Режим RunTime 

Структурные элементы режима RunTime программной платформы Creatio:

  • Слой View — слой визуального представления информации.
  • Слой ViewModel — слой бизнес-логики взаимодействия слоев View и Model.
  • Слой Model — слой данных.

Слой View 

View — слой, который отвечает за визуальное представление информации. Представлен набором визуальных компонентов режима DesignTime.

Слой View реализуют компоненты разных типов. Например, это могут быть компоненты для размещения вложенных компонентов (например, GridContainerComponent), компоненты для отображения информации (например, LabelComponent), компоненты для взаимодействия с пользователем (например, InputComponent) и т. д.

Компоненты могут использоваться в секции viewConfigDiff клиентской схемы. При использовании компонентов в клиентских схемах компоненты генерируются на основе метаданных схемы, что позволяет кастомизировать визуальное представление с использованием low-code / no-code инструментов Creatio.

Слой ViewModel 

ViewModel — слой, который отвечает за бизнес-логику взаимодействия слоев View и Model. Представлен типом ViewModel, который инкапсулирует в себе логику работы с атрибутами (инициализация данных, привязка к секциям визуальных компонентов и отслеживание изменений). Creatio не предоставляет возможность создания новых типов view model.

Типы бизнес-логики, которые позволяет реализовать слой ViewModel:

  • Валидаторы.
  • Конвертеры.
  • Обработчики запросов.

Подробнее читайте в статье Клиентская схема.

Типы атрибутов, которые реализуют слой ViewModel:

  • Атрибут простого типа (string, number, boolean).
  • Атрибут, который содержит вложенные view model.
  • Ресурсный атрибут (readonly).

Этапы жизненного цикла, которые поддерживает слой ViewModel в Creatio:

  • Инициализация экземпляра (обработчик crt.HandleViewModelInitRequest).
  • Изменение значения атрибута (обработчик crt.HandleViewModelAttributeChangeRequest).
  • Уничтожение экземпляра (обработчик crt.HandleViewModelDestroyRequest ). На этом этапе необходимо выполнять только синхронный код, который уничтожает накопленные в процессе работы ресурсы.

Для обеспечения отображения данных в пользовательском интерфейсе приложения и синхронизации этих данных необходимо установить привязку слоя View к ViewModel.

Схема привязки View к ViewModel представлена на рисунке ниже.

Типы привязок, которые предоставляет Creatio:

  • Односторонняя привязка к атрибуту.
  • Привязка к ресурсному атрибуту.
  • Получение CrtControl экземпляра.

Пример использования разных типов привязок приведен ниже.

Пример использования привязок
viewModelConfig: /**SCHEMA_VIEW_MODEL_CONFIG*/{
    "attributes": {
        "FirstName": {},
        "Visible": {}
    }
}/**SCHEMA_VIEW_MODEL_CONFIG*/,
viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
    {
        "operation": "insert",
        "name": "UsrSickDaysLeft",
        type: "crt.Input",
        /* Получает CrtControl экземпляра. */
        control: "$FirstName",
        /* Привязка к ресурсному атрибуту. */
        title: "$Resources.Strings.Title",
        /* Односторонняя привязка к атрибуту. */
        visible: "$Visible"
    }
]/**SCHEMA_VIEW_CONFIG_DIFF*/,

Механизм привязок можно расширить механизмом макросов, который необходимо использовать, например, для привязки вложенных свойств объекта к ресурсам ViewModel. Макрос — элемент, который заменяет часть view config на значение ресурсов из ViewModel. В отличие от привязки, макрос срабатывает только один раз и в дальнейшем не синхронизируется при изменении view model. В Creatio 8 Atlas реализован только макрос #ResourceString#, в котором реализована работа со строками из ресурсов.

Пример установки значения из ресурсов в свойство caption элемента Header приведен ниже.

Пример использования макроса #ResourceString#
viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
    ...
    {
        "operation": "insert",
        "name": "Header",
        "values": {
            "type": "crt.Label",
            "caption": "#ResourceString(Header)#",
        },
    ...
    },
    ...
]/**SCHEMA_VIEW_CONFIG_DIFF*/

Поскольку у пользователей отсутствует возможность создания ViewModel, то в Creatio 8 Atlas бизнес-логику необходимо описывать в отдельных обработчиках запросов. Обработчики можно объединять в цепочки и определять необходимое время вызова соответствующего обработчика.

Схема работы приложения представлена на рисунке ниже.

Слой Model 

Model — слой, который отвечает за работу с данными. Позволяет работать с источниками данных, схемой их данных и выполнять операции с данными (загрузка, сохранение, удаление, сортировка и т. д.). В Creatio 8 Atlas реализован тип EntityDataSource источника данных, который позволяет работать с данными Entity-объектов Creatio. Creatio 8 Atlas не предоставляет возможность расширения набора источников данных. В дальнейшем эта возможность будет предоставлена. Функциональность слоя Model используется слоем ViewModel для обеспечения данными слоя View.

Для хранения данных в Creatio используется паттерн Data Access Object (DAO). Подробнее о паттерне DAO читайте на Википедии.

Схема работы DAO в Creatio представлена на рисунке ниже.

Задачи элементов группы Data Access Object:

  • Обеспечить выполнение CRUD-операций.
  • Предоставить права на операции с данными (создание, редактирование, удаление).
  • Предоставить структуру данных (DataSchema).

В Creatio 8 Atlas реализован EntityDataSource, который работает с базой данных приложения.

Инициализация Model выполняется с viewModel по схеме, которая представлена ниже.

Смотрите также