Операции с данными (front-end)

Средний

Работа с данными во front-end модулях Creatio реализована с помощью высокоуровневого класса EntitySchemaQuery, который предназначен для построения запросов на выборку из базы данных.

Особенности класса EntitySchemaQuery:

  • Запрос на выборку данных EntitySchemaQuery строится c учетом прав доступа текущего пользователя.
  • Механизм кэширования позволяет оптимизировать выполнение операций за счет обращения к кэшированным результатам запроса без дополнительного обращения к базе данных.

Алгоритм работы с данными во front-end модулях Creatio:

  1. Cоздайте экземпляр класса EntitySchemaQuery.
  2. Укажите корневую схему.
  3. Сформируйте путь к колонке корневой схемы для добавления колонки в запрос.
  4. Создайте экземпляры фильтров.
  5. Добавьте фильтры в запрос.
  6. Отфильтруйте результаты запроса.

Сформировать пути к колонкам относительно корневой схемы 

Основой механизма построения запроса EntitySchemaQuery является корневая схема. Корневая схема — таблица базы данных, относительно которой строятся пути к колонкам в запросе, в том числе к колонкам присоединяемых таблиц. Для использования в запросе колонки из произвольной таблицы необходимо корректно задать путь к этой колонке.

Сформировать путь к колонке по прямым связям 

Шаблон формирования пути к колонке по прямым связям ИмяСправочнойКолонки.ИмяКолонкиСхемыИзСправочнойСхемы.

Например, есть корневая схема [City] из справочной колонкой [Country], которая через колонку Id связана со справочной схемой [Country].

scr_direct_connections.png

Путь к колонке c наименованием страны, которой принадлежит город по прямым связям Country.Name. Здесь:

  • Country — имя справочной колонки корневой схемы [City] (ссылается на схему [Country]).
  • Name — имя колонки из справочной схемы [Country].

Сформировать путь к колонке по обратным связям 

Шаблон формирования пути к колонке по обратным связям [ИмяПрисоединяемойСхемы:ИмяКолонкиДляСвязиПрисоединяемойСхемы:ИмяКолонкиДляСвязиТекущейСхемы].ИмяКолонкиПрисоединяемойСхемы.

Путь к колонке с именем контакта, который добавил город по обратным связям [Contact:Id:CreatedBy].Name. Здесь:

  • Contact — имя присоединяемой схемы.
  • Id — имя колонки схемы [Contact] для установки связи присоединяемой схемы.
  • CreatedBy — имя справочной колонки схемы [City] для установки связи текущей схемы.
  • Name — значение справочной колонки схемы [City].

Если в качестве колонки для связи у текущей схемы выступает колонка [Id], то ее можно не указывать: [ИмяПрисоединяемойСхемы:ИмяКолонкиДляСвязиПрисоединяемойСхемы].ИмяКолонкиКорневойСхемы. Например, [Contact:City].Name.

Добавить колонки в запрос 

Колонка запроса EntitySchemaQuery представляет собой экземпляр класса Terrasoft.EntityQueryColumn. В свойствах экземпляра колонки необходимо указать основные характеристики:

  • Заголовок.
  • Значение для отображения.
  • Признаки использования.
  • Порядок и позицию сортировки.

Для добавления колонок в запрос предназначен метод addColumn(), который возвращает экземпляр добавленной в запрос колонки. Имя колонки относительно корневой схемы в методах addColumn() формируется согласно правилам, описанным в статье Сформировать пути к колонкам корневой схемы. Разновидности метода addColumn() позволяют добавлять в запрос колонки с различными параметрами и представлены в таблице ниже.

Разновидности метода addColumn()
Тип колонки Метод
Колонка по заданному пути относительно корневой схемы addColumn(column, columnAlias)
Экземпляр класса колонки запроса
Колонка — параметр addParameterColumn(paramValue, paramDataType, columnAlias)
Колонка — функция addFunctionColumn(columnPath, functionType, columnAlias)
Колонка — агрегирующая функция addAggregationSchemaColumnFunctionColumn(columnPath, aggregationType, columnAlias)

Получить результат запроса 

Результат выполнения запроса EntitySchemaQuery — коллекция сущностей Creatio. Каждый экземпляр коллекции — строка набора данных, возвращаемого запросом.

Способы получения результатов запроса:

  • Вызов метода getEntity() для получения конкретной строки набора данных по заданному первичному ключу.
  • Вызов метода getEntityCollection() для получения всего результирующего набора данных.

Управлять фильтрами в запросе 

Фильтр — набор условий, применяемых при отображении данных запроса. В терминах SQL фильтр представляет собой отдельный предикат (условие) оператора WHERE.

Для создания простого фильтра в EntitySchemaQuery используется метод createFilter(), который возвращает созданный объект фильтра Terrasoft.CompareFilter. В EntitySchemaQuery реализованы методы создания фильтров специального вида.

Экземпляр EntitySchemaQuery имеет свойство filters, которое представляет собой коллекцию фильтров данного запроса (экземпляр класса Terrasoft.FilterGroup). Экземпляр класса Terrasoft.FilterGroup представляет собой коллекцию элементов Terrasoft.BaseFilter.

Алгоритм добавления фильтра в запрос:

  • Создайте экземпляр фильтра для данного запроса (метод createFilter(), методы создания фильтров специального вида).
  • Добавьте созданный экземпляр фильтра в коллекцию фильтров запроса (метод add() коллекции).

По умолчанию фильтры, добавляемые в коллекцию filters, объединяются между собой логической операцией AND. Свойство logicalOperation коллекции filters позволяет указать логическую операцию, которой необходимо объединять фильтры. Свойство logicalOperation принимает значения перечисления Terrasoft.core.enums.LogicalOperatorType (AND — И, OR — ИЛИ).

В запросах EntitySchemaQuery реализована возможность управления фильтрами, участвующими в построении результирующего набора данных. Каждый элемент коллекции filters имеет свойство isEnabled, которое определяет, участвует ли данный элемент в построении результирующего запроса (true — участвует, false — не участвует). Аналогичное свойство isEnabled также определено для коллекции filters. Установив это свойство в false, можно отключить фильтрацию для запроса, при этом коллекция фильтров запроса останется неизменной. Таким образом, изначально сформировав коллекцию фильтров запроса, в дальнейшем можно использовать различные комбинации, не внося изменений в саму коллекцию.

Формирование путей колонок в фильтрах EntitySchemaQuery осуществляется в соответствии с общими правилами формирования путей к колонкам относительно корневой схемы.

Примеры формирования путей к колонкам
Средний

Путь к колонке корневой схемы 

  • Корневая схема: [Contact].
  • Колонка с адресом контакта: Address.
Пример создания запроса EntitySchemaQuery, возвращающего значения этой колонки
/* Создаем экземпляр класса EntitySchemaQuery с корневой схемой Contact. */
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
/* Добавляем колонку Address, задаем для нее псевдоним Address. */
esq.addColumn("Address", "Address");

Путь к колонке схемы по прямым связям 

  • Корневая схема: [Contact].
  • Колонка с названием контрагента: Account.Name.
  • Колонка с именем основного контакта у контрагента: Account.PrimaryContact.Name.
Пример создания запроса EntitySchemaQuery, возвращающего значения этих колонок
/* Создаем экземпляр класса EntitySchemaQuery с корневой схемой Contact. */
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
/* Добавляем справочную колонку Account. Затем добавляем колонку Name из схемы Account, на которую ссылается справочная колонка Account, и задаем для нее псевдоним AccountName. */
esq.addColumn("Account.Name", "AccountName");
/* Добавляем справочную колонку Account. Затем добавляем справочную колонку PrimaryContact из схемы Account, на которую ссылается справочная колонка Account. Затем добавляем колонку Name из схемы Contact, на которую ссылается справочная колонка PrimaryContact, и задаем для нее псевдоним PrimaryContactName. */
esq.addColumn("Account.PrimaryContact.Name", "PrimaryContactName");

Путь к колонке схемы по обратным связям 

  • Корневая схема: [Contact].
  • Колонка с именем контакта, который добавил город: [Contact:Id:CreatedBy].Name.
Пример создания запроса EntitySchemaQuery, возвращающего значения этой колонки
/* Создаем экземпляр класса EntitySchemaQuery с корневой схемой Contact. */
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
/* Присоединяем к корневой схеме еще одну схему Contact по колонке Owner и выбираем из нее колонку Name. Задаем для нее псевдоним OwnerName. */
esq.addColumn("[Contact:Id:Owner].Name", "OwnerName");
/* К справочной колонке Account присоединяем схему Contact по колонке PrimaryContact и выбираем из нее колонку Name. Задаем для нее псевдоним PrimaryContactName. */
esq.addColumn("Account.[Contact:Id:PrimaryContact].Name", "PrimaryContactName");
Примеры добавления колонок в запрос
Средний

Колонка из корневой схемы 

Пример. Добавить в коллекцию колонок запроса колонку из корневой схемы.

Пример добавления в коллекцию колонок запроса колонки из корневой схемы
var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {
    rootSchemaName: "Activity"
});
esq.addColumn("DurationInMinutes", "ActivityDuration");

Аггрегирующая колонка 

Пример 1. Добавить в коллекцию колонок запроса аггрегирующую колонку с типом аггрегации SUM, применяющимся ко всем записям таблицы.

Пример добавления в коллекцию колонок запроса аггрегирующей колонки
var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {
    rootSchemaName: "Activity"
});
esq.addAggregationSchemaColumn("DurationInMinutes", Terrasoft.AggregationType.SUM, "ActivitiesDuration", Terrasoft.AggregationEvalType.ALL);

Пример 2. Добавить в коллекцию колонок запроса аггрегирующую колонку с типом аггрегации COUNT, применяющимся к уникальным записям таблицы.

Пример добавления в коллекцию колонок запроса аггрегирующей колонки
var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {
    rootSchemaName: "Activity"
});
esq.addAggregationSchemaColumn("DurationInMinutes", Terrasoft.AggregationType.COUNT, "UniqueActivitiesCount", Terrasoft.AggregationEvalType.DISTINCT);

Колонка-параметр 

Пример. Добавить в коллекцию колонок запроса колонку-параметр с типом данных TEXT.

Пример добавления в коллекцию колонок запроса колонки-параметра
var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {
    rootSchemaName: "Activity"
});
esq.addParameterColumn("DurationInMinutes", Terrasoft.DataValueType.TEXT, "DurationColumnName");

Колонка-функция 

Пример 1. Добавить в коллекцию колонок запроса колонку-функцию с типом функции LENGTH (размер значения в байтах).

Пример добавления в коллекцию колонок запроса колонки-функции
var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {
    rootSchemaName: "Activity"
});
esq.addFunctionColumn("Photo.Data", Terrasoft.FunctionType.LENGTH, "PhotoLength");

Пример 2. Добавить в коллекцию колонок запроса колонку-функцию с типом DATE_PART (часть даты). В качестве значения используется день недели.

Пример добавления в коллекцию колонок запроса колонки-функции
var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {
    rootSchemaName: "Activity"
});
esq.addDatePartFunctionColumn("StartDate", Terrasoft.DatePartType.WEEK_DAY, "StartDay");

Пример 3. Добавить в коллекцию колонок запроса колонку-функцию с типом MACROS, который не требует параметризации — PRIMARY_DISPLAY_COLUMN (первичная колонка для отображения).

Пример добавления в коллекцию колонок запроса колонки-функции
var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {
    rootSchemaName: "Activity"
});
esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "PrimaryDisplayColumnValue");
Примеры получения результатов запроса
Средний

Cтрока набора данных по заданному первичному ключу 

Пример. Получить конкретную строку набора данных по заданному первичному ключу.

Пример получения конкретной строки набора данных
/* Получаем Id объекта карточки. */
var recordId = this.get("Id");
/* Создаем экземпляр класса Terrasoft.EntitySchemaQuery с корневой схемой Contact. */
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
/* Добавляем колонку с именем основного контакта контрагента. */
esq.addColumn("Account.PrimaryContact.Name", "PrimaryContactName");
/* Получаем одну запись из выборки по Id объекта карточки и отображаем ее в информационном окне. */
esq.getEntity(recordId, function(result) {
    if (!result.success) {
        /* Например, обработка/логирование ошибки. */
        this.showInformationDialog("Ошибка запроса данных");
        return;
    }
    this.showInformationDialog(result.entity.get("PrimaryContactName"));
}, this);

На заметку. При получении справочных колонок метод this.get() возвращает объект, а не идентификатор записи в базе данных. Чтобы получить идентификатор, необходимо использовать свойство value, например, this.get('Account').value.

Результирующий набор данных 

Пример. Получить весь результирующий набор данных.

Пример получения всего набора данных
var message = "";
/* Создаем экземпляр класса Terrasoft.EntitySchemaQuery с корневой схемой Contact. */
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
/* Добавляем колонку с названием контрагента, который относится к данному контакту. */
esq.addColumn("Account.Name", "AccountName");
/* Добавляем колонку с именем основного контакта контрагента. */
esq.addColumn("Account.PrimaryContact.Name", "PrimaryContactName");
/* Получаем всю коллекцию записей и отображаем ее в информационном окне. */
esq.getEntityCollection(function (result) {
    if (!result.success) {
        /* Например, обработка/логирование ошибки. */
        this.showInformationDialog("Ошибка запроса данных");
        return;
    }
    result.collection.each(function (item) {
        message += "Account name: " + item.get("AccountName") +
        " - primary contact name: " + item.get("PrimaryContactName") + "\n";
    });
    this.showInformationDialog(message);
}, this);
Примеры управления фильтрами в запросе
Средний
Пример управления фильтрами в запросе
/* Создание экземпляра запроса с корневой схемой Contact. */
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
esq.addColumn("Name");
esq.addColumn("Country.Name", "CountryName");

/* Создание экземпляра первого фильтра. */
var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Country.Name", "Испания");

/* Создание экземпляра второго фильтра. */
var esqSecondFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Country.Name", "Франция");

/* Фильтры в коллекции фильтров запроса будут объединяться логическим оператором OR. */
esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.OR;

/* Добавление созданных фильтров в коллекцию запроса. */ 
esq.filters.add("esqFirstFilter", esqFirstFilter);
esq.filters.add("esqSecondFilter", esqSecondFilter);

/* В данную коллекцию попадут объекты - результаты запроса, отфильтрованные по двум фильтрам. */
esq.getEntityCollection(function (result) {
    if (result.success) {
        result.collection.each(function (item) {
            // Обработка элементов коллекции.
        });
    }
}, this);

/* Для второго фильтра указывается, что он не будет участвовать в построении результирующего запроса. При этом данный фильтр не удаляется из коллекции фильтров запроса. */
esqSecondFilter.isEnabled = false;

/* В данную коллекцию попадут объекты - результаты запроса, отфильтрованные только по первому фильтру. */
esq.getEntityCollection(function (result) {
    if (result.success) {
        result.collection.each(function (item) {
            /* Обработка элементов коллекции. */
        });
    }
}, this);
Пример использования других методов создания фильтров
/* Создание экземпляра запроса с корневой схемой Contact. */
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Contact"
});
esq.addColumn("Name");
esq.addColumn("Country.Name", "CountryName");

/* Выбираем все контакты, в которых не указана страна. */
var esqFirstFilter = esq.createColumnIsNullFilter("Country");

/* Выбираем все контакты, даты рождения которых находятся в промежутке между 1.01.1970 и 1.01.1980. */
var dateFrom = new Date(1970, 0, 1, 0, 0, 0, 0);
var dateTo = new Date(1980, 0, 1, 0, 0, 0, 0);
var esqSecondFilter = esq.createColumnBetweenFilterWithParameters("BirthDate", dateFrom, dateTo);

/* Добавление созданных фильтров в коллекцию запроса. */
esq.filters.add("esqFirstFilter", esqFirstFilter);
esq.filters.add("esqSecondFilter", esqSecondFilter);

/* В данную коллекцию попадут объекты - результаты запроса, отфильтрованные по двум фильтрам. */
esq.getEntityCollection(function (result) {
    if (result.success) {
        result.collection.each(function (item) {
            /* Обработка элементов коллекции. */
        });
    }
}, this);
Класс EntitySchemaQuery
Средний

Класс EntitySchemaQuery предназначен для построения запросов на выборку из базы данных.

Методы 

abortQuery()

Прерывает выполнение запроса.

addAggregationSchemaColumn(columnPath, aggregationType, [columnAlias], aggregationEvalType)

Создает и добавляет в коллекцию колонок запроса экземпляр функциональной колонки Terrasoft.FunctionQueryColumn с заданным типом AGGREGATION.

Параметры
{String} columnPath Путь колонки для добавления (указывается относительно rootSchema).
{Terrasoft.AggregationType} aggregationType

Тип используемой агрегирующей функции.

Возможные значения (Terrasoft.AggregationType)
AVG

Cреднее значение всех элементов.

COUNT

Количество всех элементов.

MAX

Максимальное значение среди всех элементов.

MIN

Минимальное значение среди всех элементов.

NONE

Тип агрегирующей функции не определен.

SUM

Сумма значений всех элементов.

{String} columnAlias Псевдоним колонки (необязательный параметр).
{Terrasoft.AggregationEvalType} aggregationEvalType

Область применения агрегирующей функции.

Возможные значения (Terrasoft.AggregationEvalType)
NONE

Область применения агрегирующей функции не определена.

ALL

Применяется для всех элементов.

DISTINCT

Применяется к уникальным значениям.

addColumn(column, [columnAlias], [config])

Создает и добавляет в коллекцию колонок запроса экземпляр колонки Terrasoft.EntityQueryColumn.

Параметры
{String/Terrasoft.BaseQueryColumn} column Путь колонки для добавления (указывается относительно rootSchema) или экземпляр колонки запроса Terrasoft.BaseQueryColumn.
{String} columnAlias Псевдоним колонки (необязательный параметр).
{Object} config Конфигурационный объект колонки запроса.
addDatePartFunctionColumn(columnPath, datePartType, [columnAlias])

Создает и добавляет в коллекцию колонок запроса экземпляр колонки-функции Terrasoft.FunctionQueryColumn с типом DATE_PART.

Параметры
{String} columnPath Путь колонки для добавления (указывается относительно rootSchema).
{Terrasoft.DatePartType} datePartType

Часть даты, используемая в качестве значения

Возможные значения (Terrasoft.DatePartType)
NONE

Пустое значение.

DAY

День.

WEEK

Неделя.

MONTH

Месяц.

YEAR

Год.

WEEK_DAY

День недели.

HOUR

Час.

HOUR_MINUTE

Минута.

{String} columnAlias Псевдоним колонки (необязательный параметр).
addDatePeriodMacrosColumn(macrosType, [macrosValue], [columnAlias])

Создает и добавляет в коллекцию колонок запроса экземпляр колонки-функции Terrasoft.FunctionQueryColumn с типом MACROS, который требует параметризации. Например, следующие N дней, 3-й квартал года, и т. д.

Параметры
{Terrasoft.QueryMacrosType} macrosType Тип макроса колонки.
{Number/Date} macrosValue Вспомогательная переменная для макроса (необязательный параметр).
{String} columnAlias Псевдоним колонки (необязательный параметр).
addFunctionColumn(columnPath, functionType, [columnAlias])

Создает и добавляет в коллекцию колонок запроса экземпляр колонки-функции Terrasoft.FunctionQueryColumn.

Параметры
{String} columnPath Путь колонки для добавления (указывается относительно rootSchema).
{Terrasoft.FunctionType} functionType

Тип функции.

Возможные значения (Terrasoft.FunctionType)
NONE

Тип функционального выражения не определен.

MACROS

Подстановка по макросу.

AGGREGATION

Агрегирующая функция.

DATE_PART

Часть даты.

LENGTH

Размер значения в байтах. Используется для бинарных данных.

{String} columnAlias Псевдоним колонки (необязательный параметр).
addMacrosColumn(macrosType, [columnAlias])

Создает и добавляет в коллекцию колонок запроса экземпляр колонки-функции Terrasoft.FunctionQueryColumn с типом MACROS, который не требует параметризации (например, текущий месяц, текущий пользователь, первичная колонка, и т. д.).

Параметры
{Terrasoft.QueryMacrosType} macrosType

Тип макроса колонки.

Возможные значения (Terrasoft.QueryMacrosType)
NONE

Тип макроса не определен.

CURRENT_USER

Текущий пользователь.

CURRENT_USER_CONTACT

Контакт текущего пользователя.

YESTERDAY

Вчера.

TODAY

Сегодня.

TOMORROW

Завтра.

PREVIOUS_WEEK

Предыдущая неделя.

CURRENT_WEEK

Текущая неделя.

NEXT_WEEK

Следующая неделя.

PREVIOUS_MONTH

Предыдущий месяц.

CURRENT_MONTH

Текущий месяц.

NEXT_MONTH

Следующий месяц.

PREVIOUS_QUARTER

Предыдущий квартал.

CURRENT_QUARTER

Текущий квартал.

NEXT_QUARTER

Следующий квартал.

PREVIOUS_HALF_YEAR

Предыдущее полугодие.

CURRENT_HALF_YEAR

Текущее полугодие.

NEXT_HALF_YEAR

Следующее полугодие.

PREVIOUS_YEAR

Предыдущий год.

CURRENT_YEAR

Текущий год.

PREVIOUS_HOUR

Предыдущий час.

CURRENT_HOUR

Текущий час.

NEXT_HOUR

Следующий час.

NEXT_YEAR

Следующий год.

NEXT_N_DAYS

Следующие N дней. Требует параметризации.

PREVIOUS_N_DAYS

Предыдущие N дней. Требует параметризации.

NEXT_N_HOURS

Следующие N часов. Требует параметризации.

PREVIOUS_N_HOURS

Предыдущие N часов. Требует параметризации.

PRIMARY_COLUMN

Первичная колонка.

PRIMARY_DISPLAY_COLUMN

Первичная колонка для отображения.

PRIMARY_IMAGE_COLUMN

Первичная колонка для отображения изображения.

{String} columnAlias Псевдоним колонки (необязательный параметр).
addParameterColumn(paramValue, paramDataType, [columnAlias])

Создает и добавляет в коллекцию колонок запроса экземпляр колонки-параметра Terrasoft.ParameterQueryColumn.

Параметры
{Mixed} paramValue Значение параметра. Значение должно соответствовать типу данных.
{Terrasoft.DataValueType} paramDataType Тип данных параметра.
{String} columnAlias Псевдоним колонки (необязательный параметр).
createBetweenFilter(leftExpression, rightLessExpression, rightGreaterExpression)

Создает экземпляр Between-фильтра.

Параметры
{Terrasoft.BaseExpression} leftExpression Выражение, проверяемое в фильтре.
{Terrasoft.BaseExpression} rightLessExpression Начальное выражение диапазона фильтрации.
{Terrasoft.BaseExpression} rightGreaterExpression Конечное выражение диапазона фильтрации.
createColumnBetweenFilterWithParameters(columnPath, lessParamValue, greaterParamValue, paramDataType)

Создает экземпляр Between-фильтра для проверки попадания колонки в заданный диапазон.

Параметры
{String} columnPath Путь к проверяемой колонке относительно корневой схемы rootSchema.
{Mixed} lessParamValue Начальное значение фильтра.
{Mixed} greaterParamValue Конечное значение фильтра.
{Terrasoft.DataValueType} paramDataType Тип данных параметра.
createColumnFilterWithParameter(comparisonType, columnPath, paramValue, paramDataType)

Создает экземпляр Compare-фильтра для сравнения колонки с заданным значением.

Параметры
{Terrasoft.ComparisonType} comparisonType Тип операции сравнения.
{String} columnPath Путь к проверяемой колонке относительно корневой схемы rootSchema.
{Mixed} paramValue Значение параметра.
{Terrasoft.DataValueType} paramDataType Тип данных параметра.
createColumnInFilterWithParameters(columnPath, paramValues, paramDataType)

Создает экземпляр In-фильтра для проверки совпадения значения заданной колонки со значением одного из параметров.

Параметры
{String} columnPath Путь к проверяемой колонке относительно корневой схемы rootSchema.
{Array} paramValues Массив значений параметров.
{Terrasoft.DataValueType} paramDataType Тип данных параметра.
createColumnIsNotNullFilter(columnPath)

Создает экземпляр IsNull-фильтра для проверки заданной колонки.

Параметры
{String} columnPath Путь к проверяемой колонке относительно корневой схемы rootSchema.
createColumnIsNullFilter(columnPath)

Создает экземпляр IsNull-фильтра для проверки заданной колонки.

Параметры
{String} columnPath Путь к проверяемой колонке относительно корневой схемы rootSchema.
createCompareFilter(comparisonType, leftExpression, rightExpression)

Создает экземпляр Compare-фильтра.

Параметры
{Terrasoft.ComparisonType} comparisonType Тип операции сравнения.
{Terrasoft.BaseExpression} leftExpression Выражение, проверяемое в фильтре.
{Terrasoft.BaseExpression} rightExpression Выражение фильтрации.
createExistsFilter(columnPath)

Создает экземпляр Exists-фильтра для сравнения типа [Существует по заданному условию] и устанавливает в качестве проверяемого значения выражение колонки, расположенной по заданному пути.

Параметры
{String} columnPath Путь к колонке, для выражения которой строится фильтр.
createFilter(comparisonType, leftColumnPath, rightColumnPath)

Создает экземпляр фильтра класса Terrasoft.CompareFilter для сравнения значений двух колонок.

Параметры
{Terrasoft.ComparisonType} comparisonType Тип операции сравнения.
{String} leftColumnPath Путь к проверяемой колонке относительно корневой схемы rootSchema.
{String} rightColumnPath Путь к колонке-фильтру относительно корневой схемы rootSchema.
createFilterGroup()

Создает экземпляр группы фильтров.

createInFilter(leftExpression, rightExpressions)

Создает экземпляр In-фильтра.

Параметры
{Terrasoft.BaseExpression} leftExpression Выражение, проверяемое в фильтре.
{Terrasoft.BaseExpression[]} rightExpressions Массив выражений, которые будут сравниваться с leftExpression.
createIsNotNullFilter(leftExpression)

Создает экземпляр IsNull-фильтра.

Параметры
{Terrasoft.BaseExpression} leftExpression Выражение, которое проверяется по условию IS NOT NULL.
createIsNullFilter(leftExpression)

Создает экземпляр IsNull-фильтра.

Параметры
{Terrasoft.BaseExpression} leftExpression Выражение, которое проверяется по условию IS NULL.
createNotExistsFilter(columnPath)

Создает экземпляр Exists-фильтра для сравнения типа [Не существует по заданному условию] и устанавливает в качестве проверяемого значения выражение колонки, расположенной по заданному пути.

Параметры
{String} columnPath Путь к колонке, для выражения которой строится фильтр.
createPrimaryDisplayColumnFilterWithParameter(comparisonType, paramValue, paramDataType)

Создает объект фильтра для сравнения первичной колонки для отображения со значением параметра.

Параметры
{Terrasoft.ComparisonType} comparisonType Тип сравнения.
{Mixed} paramValue Значение параметра.
{Terrasoft.DataValueType} paramDataType Тип данных параметра.
destroy()

Удаляет экземпляр объекта. Если экземпляр уже удален, запишет в консоль сообщение об ошибке. Вызывает виртуальный метод onDestroy для переопределения в подклассах.

enablePrimaryColumnFilter(primaryColumnValue)

Включает фильтрацию по первичному ключу.

Параметры
{String/Number} primaryColumnValue Значение первичного ключа.
error(message)

Записывает сообщение об ошибке в журнал сообщений.

Параметры
{String} message Сообщение об ошибке, которое будет записано в журнал сообщений.
execute(callback, scope) 

Запрос на выполнение запроса на сервере.

Параметры
{Function} callback Функция, которая будет вызвана при получении ответа от сервера.
{Object} scope Контекст, в котором будет вызвана функция callback.
{Object} getDefSerializationInfo()  

Возвращает объект с дополнительной информацией для сериализации.

getEntity(primaryColumnValue, callback, scope)

Возвращает экземпляр сущности по заданному первичному ключу primaryColumnValue. После получения данных вызывает функцию callback в контексте scope.

Параметры
{String/Number} primaryColumnValue Значение первичного ключа.
{Function} callback Функция, которая будет вызвана при получении ответа от сервера.
{Object} scope Контекст, в котором будет вызвана функция callback.
getEntityCollection(callback, scope)

Возвращает коллекцию экземпляров сущности, представляющих результаты выполнения текущего запроса. После получения данных вызывает функцию callback в контексте scope.

Параметры
{Function} callback Функция, которая будет вызвана при получении ответа от сервера.
{Object} scope Контекст, в котором будет вызвана функция callback.
{Object} getTypeInfo() 

Возвращает информацию о типе элемента.

log(message, [type])

Записывает сообщение в журнал сообщений.

Параметры
{String|Object} message Сообщение, будет записано в журнал сообщений.
{Terrasoft.LogMessageType} type Тип журнала сообщений callback (необязательный параметр). По умолчанию console.log. Возможные значения заданы перечислением Terrasoft.core.enums.LogMessageType.
onDestroy()

Удаляет все подписки на события и уничтожает объект.

serialize(serializationInfo)

Сериализует объект в json.

Параметры
{String} serializationInfo Результат в json.
setSerializableProperty(serializableObject, propertyName)

Задает имя свойства объекту, если он не пустой или не является функцией.

Параметры
{Object} serializableObject Сериализуемый объект.
{String} propertyName Имя свойства.
warning(message)

Записывает предупреждающее сообщение в журнал сообщений.

Параметры
{String} message Сообщение, будет записано в журнал сообщений.
Класс DataManager
Средний

Класс DataManager 

Класс DataManager — синглтон, который доступен через глобальный объект Terrasoft. Данный класс предоставляет хранилище dataStore. В хранилище может быть загружено содержимое одной или нескольких таблиц базы данных.

dataStore: {
    /* Коллекция данных типа DataManagerItem схемы SysModule. */
    SysModule: sysModuleCollection,
	/* Коллекция данных типа DataManagerItem схемы SysModuleEntity. */
    SysModuleEntity: sysModuleEntityCollection
}

Каждая запись коллекции представляет запись из соответствующей таблицы в базе данных.

Свойства 

{Object} dataStore

Хранилище коллекций данных.

{String} itemClassName

Имя класса записи. Содержит значение Terrasoft.DataManagerItem.

Методы 

{Terrasoft.Collection} select(config, callback, scope)

Если dataStore не содержит коллекцию данных с именем config.entitySchemaName, то метод формирует и выполняет запрос в базу данных, затем возвращает полученные данные, иначе возвращает коллекцию данных из dataStore.

Параметры
{Object} config

Конфигурационный объект.

Свойства конфигурационного объекта
{String} entitySchemaName

Имя схемы.

{Terrasoft.FilterGroup} filters

Условия.

{Function} callback Функция обратного вызова.
{Object} scope Контекст выполнения функции обратного вызова.
{Terrasoft.DataManagerItem} createItem(config, callback, scope)

Создает новую запись типа config.entitySchemaName со значениями колонок config.columnValues.

Параметры
{Object} config

Конфигурационный объект.

Свойства конфигурационного объекта
{String} entitySchemaName

Имя схемы.

{Object} columnValues

Значения колонок записи.

{Function} callback Функция обратного вызова.
{Object} scope Контекст выполнения функции обратного вызова.
{Terrasoft.DataManagerItem} addItem(item)

Добавляет запись item в коллекцию данных схемы.

Параметры
{Terrasoft.DataManagerItem} item Добавляемая запись.
{Terrasoft.DataManagerItem} findItem(entitySchemaName, id)

Возвращает запись из коллекции данных схемы с именем entitySchemaName и с идентификатором id.

Параметры
{String} entitySchemaName Название коллекции данных.
{String} id Идентификатор записи.
{Terrasoft.DataManagerItem} remove(item)

Устанавливает признак isDeleted для записи item, при фиксации изменений запись будет удалена из базы данных.

Параметры
{Terrasoft.DataManagerItem} item Удаляемая запись.
removeItem(item)

Удаляет запись из коллекции данных схемы.

Параметры
{Terrasoft.DataManagerItem} item Удаляемая запись.
{Terrasoft.DataManagerItem} update(config, callback, scope)

Обновляет запись со значением первичной колонки config.primaryColumnValue значениями из config.columnValues.

Параметры
{Object} config

Конфигурационный объект.

Свойства конфигурационного объекта
{String} entitySchemaName

Имя схемы.

{String} primaryColumnValue

Значение первичной колонки.

{Mixed} columnValues

Значения колонок.

{Function} callback Функция обратного вызова.
{Object} scope Контекст выполнения функции обратного вызова.
{Terrasoft.DataManagerItem} discardItem(item)

Отменяет изменения для записи item, сделанные в текущей сессии работы с DataManager.

Параметры
{Terrasoft.DataManagerItem} item Запись, по которой будут отменены изменения.
{Object} save(config, callback, scope)

Выполняет сохранение в базу данных коллекций данных схем, указанных в config.entitySchemaNames.

Параметры
{Object} config

Конфигурационный объект.

Свойства конфигурационного объекта
{String[]} entitySchemaName

Имя схемы, сохранение которой необходимо выполнить. Если свойство не заполнено, сохранение выполняется для всех схем.

{Function} callback Функция обратного вызова.
{Object} scope Контекст выполнения функции обратного вызова.

Класс DataManagerItem 

Свойства 

{Terrasoft.BaseViewMode} viewModel

Объектная проекция записи в базе данных.

Методы 

setColumnValue(columnName, columnValue)

Устанавливает новое значение columnValue для колонки с именем columnName.

Параметры
{String} columnName Название колонки.
{String} columnValue Значение колонки.
{Mixed} getColumnValue(columnName)

Возвращает значение колонки с именем columnName.

Параметры
{String} columnName Название колонки.
{Object} getValues()

Возвращает значения всех колонок записи.

remove()

Устанавливает признак isDeleted для записи.

discard()

Отменяет изменения для записи, сделанные в текущей сессии работы с DataManager.

{Object} save(callback, scope)

Фиксирует изменения в базе данных.

Параметры
{Function} callback Функция обратного вызова.
{Object} scope Контекст выполнения функции обратного вызова.
{Boolean} getIsNew()

Возвращает признак того, что запись новая.

{Boolean} getIsChanged()

Возвращает признак того, что запись была изменена.

Примеры использования
Получение записей из таблицы Contact
/* Определение конфигурационного объекта. */
var config = {
    /* Название схемы сущности. */
    entitySchemaName: "Contact",
    /* Убирать дубли в результирующем наборе данных. */
    isDistinct: true
};
/* Получение данных. */
Terrasoft.DataManager.select(config, function (collection) {
    /* Сохранение полученных записей в локальное хранилище. */
    collection.each(function (item) {
        Terrasoft.DataManager.addItem(item);
    });
}, this);
Добавление новой записи в объект DataManager
/* Определение конфигурационного объекта. */
var config = {
    /* Название схемы сущности. */
    entitySchemaName: "Contact",
    /* Значения колонок. */
    columnValues: {
        Id: "00000000-0000-0000-0000-000000000001",
        Name: "Name1"
    }
};
/* Создание новой записи. */
Terrasoft.DataManager.createItem(config, function (item) {
    Terrasoft.DataManager.addItem(item);
}, this);
Получение записи и изменение значения колонки
/* Получение записи. */
var item = Terrasoft.DataManager.findItem("Contact",
     "00000000-0000-0000-0000-000000000001");
/* Установка нового значения "Name2" колонке Name. */
item.setColumnValue("Name", "Name2");
Удаление записи из DataManager
/* Определение конфигурационного объекта. */
var config = {
    /* Название схемы сущности. */     
    entitySchemaName: "Contact",
    /* Значение первичной колонки. */
    primaryColumnValue: "00000000-0000-0000-0000-000000000001"
};
/* Устанавливает признак isDeleted для записи item. */
Terrasoft.DataManager.remove(config, function () {
}, this);
Отмена изменений, сделанных в текущей сессии работы с DataManager
/* Получение записи. */
var item = Terrasoft.DataManager.findItem("Contact",
     "00000000-0000-0000-0000-000000000001");
/* Отмена изменений для записи. */      
Terrasoft.DataManager.discardItem(item);
Фиксация изменений в базе данных
/* Определение конфигурационного объекта. */
var config = {
    /* Название схемы сущности. */    
    entitySchemaNames: ["Contact"]
};
/* Сохранение изменений в базу данных. */
Terrasoft.DataManager.save(config, function () {
}, this);