CRUD-операции с источниками данных

Средний

CRUD-операции с источниками данных в Creatio представлены в виде обработчиков, которые можно привязать к кнопкам или другим действиям в системе (например, к изменению значения атрибута).

В общем случае, привязка обработчика к кнопке имеет следующий вид:

Пример привязки обработчика к кнопке
{
    "operation": "insert",
    "name": "Button",
    "values": {
        "type": "crt.Button",
        "clicked": {
            "request": "SOME_HANDLER_NAME",
            "params": {
                ...
            }
        },
    },
},

Привязка обработчика к кнопке выполняется с помощью свойства clicked. Свойство clicked отвечает за действие, которое выполняется при нажатии на кнопку.

Содержит внутренние свойства:

  • request — имя обработчика.
  • params — список параметров для работы обработчика.

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

Получить данные 

Чтобы получить данные из источника данных, используйте обработчик crt.LoadDataRequest.

Пример привязки обработчика получения данных
{
    "operation": "insert",
    "name": "Button",
    "values": {
        "type": "crt.Button",
        "clicked": {
            "request": "crt.LoadDataRequest",
            "params": {
                "dataSourceName": "ContactDS",
                "parameters": [{type: "primaryColumnValue", value: "SOME_CONSTANT_OR_ATTRIBUTE"}],
                "config": {
                    "loadType": "load",
                    "payload": "SOME_CUSTOM_OBJECT"
                }
            },
        },
    },
},

Параметры обработчика crt.LoadDataRequest:

  • dataSourceName — имя источника данных. Обязательный параметр.
  • parameters — параметры (фильтры), которые применяются к выборке. Представляет собой массив объектов. Обязательный параметр.
  • config — конфигурационный объект загрузки данных на страницу.

Свойства объектов массива parameters:

  • type — тип фильтра. Возможные типы фильтров: primaryColumnValue, filter, primaryDisplayValueFilter.
  • value — значение фильтра. Это может быть константа (любое пользовательское значение: строка, число и т. д.) или атрибут. Атрибут можно указать как через символ “$” (например, $ContactFilter), так и без него (например, ContactFilter). Фильтр создается в секции viewModelConfig схемы страницы в свойстве attributes. Если по заданному фильтру найдено больше 1 записи, то загружается только первая запись.

Свойство config содержит внутренние свойства:

  • loadType — используется для загрузки коллекции данных. Возможные значения свойства: 
    • load — при этом типе загрузки пагинация не учитывается и загружаются все записи по заданным фильтрам.
    • loadNext — при первом запросе выполняется смещение (т. е. значение  свойства rowsOffset)и загружается количество записей, которое указано в свойстве rowCount. При следующих запросах загружается следующая порция данных. В этом случае  в качестве смещения используется количество уже загруженных данных в коллекции, а значение rowCount остается неизменным. 
    • reload — в качестве смещения всегда используется  значение атрибута, который указан в качестве значения свойства rowsOffset. Если свойство не указано, то в качестве значение используется 0 и загружается количество записей, которое указано в свойстве rowCount. При этом коллекция загруженных данных очищается.
  • payload — используется для передачи дополнительных параметров (фильтров) для запроса через внутреннее свойство parameters.

Получить значение по умолчанию 

Чтобы получить из источника данных значение по умолчанию, используйте обработчик crt.LoadDefaultValuesRequest.

Пример загрузки данных по умолчанию
{
    "operation": "insert",
    "name": "Button_nptvn7b",
    "values": {
        "type": "crt.Button",
        "clicked": {
            "request": "crt.LoadDefaultValuesRequest",
            "params": {
                "dataSourceName": "ContactDS",
            },
        },
    },
},

Обязательным параметром обработчика crt.LoadDefaultValuesReques является dataSourceName — имя источника данных.

Добавить и обновить данные 

Чтобы добавить и обновить данные в источнике данных, используйте обработчик crt.SaveDataRequest. Если используемый источник не был загружен, то данные добавляются, в другом случае — обновляются.

Пример привязки обработчика добавления и обновления данных
{
    "operation": "insert",
    "name": "Button",
    "values": {
        "type": "crt.Button",
        "clicked": {
            "request": "crt.SaveDataRequest",
            "params": {
                "dataSourceName": "ContactDS",
                "parameters": [{type: "primaryColumnValue", value: "SOME_CONSTANT_OR_ATTRIBUTE"}],
                "config": {
                    "silent": "true",
                    "payload": "SOME_CUSTOM_OBJECT"
                }
            },
        },
    },
},

Параметры обработчика crt.SaveDataRequest:

  • dataSourceName — имя источника данных. Обязательный параметр.
  • parameters — параметры (фильтры), которые используются для определения обновляемой записи. Представляет собой массив объектов. Обязательный параметр.
  • config — конфигурационный объект добавления или обновления данных на странице.

Свойство config содержит внутреннее свойство:

  • silent — используется, если при вставке или обновлении на сервере произошла ошибка. Для пользователя можно настроить отображение ошибки (true — ошибка отображается, false — ошибка не отображается).  

Копировать данные 

Чтобы скопировать данные из источника данных, используйте обработчик crt.CopyDataRequest.

Пример привязки обработчика копирования данных
{
    "operation": "insert",
    "name": "Button",
    "values": {
        "type": "crt.Button",
        "clicked": {
            "request": "crt.CopyDataRequest",
            "params": {
                "dataSourceName": "ContactDS",
                "recordId": "SOME_CONSTANT"
            },
        },
    },
},

Обязательные параметры обработчика crt.CopyDataRequest:

  • dataSourceName — имя источника данных.
  • recordId — идентификатор записи, которую необходимо скопировать.

Обработчик crt.CopyDataRequest не отправляет на сервер прямой запрос. Данные копируемой записи сохраняются в памяти. При следующем добавлении записей эти данные объединяются  с данными, которые ввел пользователь в интерфейсе приложения.

Удалить данные 

Чтобы удалить данные из источника данных, используйте обработчик crt.DeleteDataRequest.

Пример привязки обработчика удаления данных
{
    "operation": "insert",
    "name": "Button",
    "values": {
        "type": "crt.Button",
        "clicked": {
            "request": "crt.DeleteDataRequest",
            "params": {
                "dataSourceName": "ContactDS",
                "parameters": [{type: "primaryColumnValue", value: "SOME_CONSTANT_OR_ATTRIBUTE"}],
                "config": {
                    "payload": "SOME_CUSTOM_OBJECT"
                }
            },
        },
    },
},

Параметры обработчика crt.DeleteDataRequest:

  • dataSourceName — имя источника данных. Обязательный параметр.
  • parameters — параметры (фильтры), которые используются для определения удаляемой записи. Представляет собой массив объектов. Обязательный параметр.
  • config — конфигурационный объект удаления данных на странице.  Содержит внутреннее свойство payload, которое используется для передачи дополнительных параметров (фильтров) для запроса через внутреннее свойство parameters.

Реализовать пользовательский обработчик запросов 

Creatio позволяет взаимодействовать с источниками данных не только с помощью базовых обработчиков, но и с помощью пользовательских.

Реализация пользовательского обработчика выполняется в секции handlers схемы страницы Freedom UI. Для доступа к источнику данных используйте класс  sdk.Model

Пример пользовательского обработчика
define("StudioHomePage", /**SCHEMA_DEPS*/[]/**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/()/**SCHEMA_ARGS*/ {
    return {
        ...
        handlers: /**SCHEMA_HANDLERS*/[
            {
                "request": "crt.HandleViewModelInitRequest",
                "handler": async (request, next) => {
                    const accountModel = await sdk.Model.create({
                        type: 'crt.EntityDataSource',
                        config: {
                            entitySchemaName: 'Account'
                        }
                    });
                    const data = await accountModel.load(['Id', 'Name'], [], {});
                    console.log(data);
                    next.handle(request);
                }
            }
        ]/**SCHEMA_HANDLERS*/,
        ...
    };
});

Здесь в секции handlers создан обработчик crt.HandleViewModelInitRequest. Для создания модели accountModel в метод create() класса sdk.Model передается объект с конфигурацией источника данных — entitySchemaName: 'Account' . Затем у модели accountModel вызывается метод load(). Метод осуществляет загрузку данных  колонок, которые переданы в параметрах метода (например, [Id] и [Name]).

Созданный таким образом обработчик можно привязать к событию интерфейса так же, как и базовые обработчики Creatio.