Creatio development guide
PDF
Это документация Creatio версии 7.15.0. Мы рекомендуем использовать новую версию документации.

Добавление колонок в запрос. Метод AddColumn()

Glossary Item Box

Общие сведения

Колонка запроса EntitySchemaQuery — экземпляр класса EntitySchemaQueryColumn.

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

Метод AddColumn() класса Terrasoft.Core.Entities.EntitySchemaQuery — возвращает экземпляр добавленной в запрос колонки.

Имя колонки относительно корневой схемы в методах AddColumn() формируется согласно правилам, описанным в статье "Корневая схема. Построение путей к колонкам".

Табл. 1. — Список перегрузок метода AddColumn()

Перегрузка Параметры Описание
AddColumn(string columnPath)

columnPath — путь к колонке схемы относительно корневой схемы.

Создает и добавляет колонку в запрос к схеме объекта по заданному пути к колонке относительно корневой схемы (см. пример 1).
AddColumn(string columnPath, AggregationTypeStrict aggregationType, out EntitySchemaQuery subQuery)

columnPath — путь к колонке схемы относительно корневой схемы.

aggregationType — тип агрегирующей функции. В качестве параметра передаются значения перечисления типов агрегирующей функции Terrasoft.Common.AggregationTypeStrict.

subQuery — ссылка на созданный подзапрос, помещенный в колонку.

Создает и добавляет колонку в запрос к схеме объекта в виде подзапроса, возвращающего результат указанной агрегирующей функции, по пути к колонке схемы относительно корневой схемы (см. пример 2).
AddColumn(EntitySchemaQueryColumn queryColumn) queryColumn — экземпляр EntitySchemaQueryColumn, добавляемый в коллекцию колонок текущего запроса. Добавляет переданную колонку в коллекцию колонок запроса к схеме объекта (см. пример 3).
AddColumn(EntitySchemaQueryFunction function) function — экземпляр функции EntitySchemaQueryFunction. Создает и добавляет колонку в запрос к схеме объекта по переданной функции (см. пример 4).
AddColumn(object parameterValue, DataValueType parameterDataValueType) parameterValue — значение параметра. parameterDataValueType тип значения параметра. Создает и добавляет в запрос к схеме объекта колонку типа "параметр" с заданным значением определенного типа (см. пример 5).
AddColumn(EntitySchemaQuery subQuery) subQuery – экземпляр EntitySchemaQuery, который добавляется в качестве колонки к текущему запросу. Создает и добавляет в качестве колонки запроса к схеме объекта переданный экземпляр подзапроса EntitySchemaQuery (см. пример 6).

Примеры добавления колонок в запрос.

Пример 1

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

EntitySchemaManager esqManager = UserConnection.EntitySchemaManager;
var esqResult = new EntitySchemaQuery(esqManager, "City");
// Добавление колонки "Name" в результирующий запрос.
esqResult.AddColumn("Name");

Пример 2

Добавление колонки в виде подзапроса, возвращающего результат агрегирующей функции COUNT.

// Получение экземпляра менеджера схем объектов.
EntitySchemaManager esqManager = UserConnection.EntitySchemaManager;
// Создание экземпляра EntitySchemaQuery с корневой схемой "City".
var esqResult = new EntitySchemaQuery(esqManager, "City");
// Экземпляр EntitySchemaQuery, в который будет помещен подзапрос, возвращающий результат агрегирующей функции.
EntitySchemaQuery subResultEsq;
// Добавление колонки в виде подзапроса, возвращающего количество городов в разрезе стран, хранящихся в 
// таблице "Country". 
esqResult.AddColumn("[City:Country].Name", AggregationTypeStrict.Count, out subResultEsq);
// Получение текста результирующего запроса созданного экземпляра EntitySchemaQuery.
string sqlText = esqResult.GetSelectQuery(UserConnection).GetSqlText();

// Текст результирующего sql-запроса:

// MS SQL:
// SELECT
//          (SELECT
//                      COUNT([SubCity].[Id]) [Count]
//              FROM
//                      [dbo].[City] [SubCity]
//              WHERE
//                      [SubCity].[CountryId] = [Country].[Id]) [SubCity]
// FROM
//          [dbo].[Country] [Country]

Пример 3

Добавление в запрос экземпляра класса EntitySchemaQueryColumn.

EntitySchemaManager esqManager = UserConnection.EntitySchemaManager;
var esqResult = new EntitySchemaQuery(esqManager, "City");
// Создание экземпляра колонки "Name" схемы.
var esqColumn = new EntitySchemaQueryColumn("Name");
// Добавление созданной колонки в EntitySchemaQuery.
esqResult.AddColumn(esqColumn); 

Пример 4

Добавление в качестве колонки функции ISNULL. Функция возвращает значение колонки [MobilePhone] корневой схемы запроса либо значение колонки [Phone] в случае, если значение колонки [MobilePhone] является null.

EntitySchemaManager esqManager = UserConnection.EntitySchemaManager;
var esqResult = new EntitySchemaQuery(esqManager, "Contact");
esqResult.AddColumn("Name");
// Создание экземпляра функции IsNull.
var esqFunction = esqResult.CreateIsNullFunction("MobilePhone", "Phone");
// Добавление созданной функции в виде колонки в результирующий запрос.
esqResult.AddColumn(esqFunction);
string esqSqlText = esqResult.GetSelectQuery(UserConnection).GetSqlText();

// Текст результирующего sql-запроса:

// MS SQL:
// SELECT
//          [Contact].[Name] [Name],
//          ISNULL([Contact].[MobilePhone], [Contact].[Phone]) [IsNull]
// FROM
//          [dbo].[Contact] [Contact] 

Пример 5

Добавление колонки-параметра со значением, равным идентификатору текущего пользователя.

EntitySchemaManager esqManager = UserConnection.EntitySchemaManager;
var esqResult = new EntitySchemaQuery(esqManager, "Contact");
// Получение экземпляра менеджера типов данных.
DataValueTypeManager dvtManager = UserConnection.DataValueTypeManager;
// Добавление колонки-параметра со значением, равным идентификатору текущего пользователя, передав при этом 
// в качестве типа данных значения параметра экземпляр типа <Guid>. 
esqResult.AddColumn(UserConnection.CurrentUser.ContactId, dvtManager.GetInstanceByName("Guid"));

Пример 6

Добавление в качестве колонки экземпляра подзапроса EntitySchemaQuery.

EntitySchemaManager esqManager = UserConnection.EntitySchemaManager;
// Создание экземпляра EntitySchemaQuery с корневой схемой "Contact".
var esqSubQuery = new EntitySchemaQuery(esqManager, "Contact");
esqSubQuery.AddColumn("Id");
esqSubQuery.AddColumn("Name");
// Создание нового запроса с корневой схемой "Account".
var esqResult = new EntitySchemaQuery(esqManager, "Account");
esqResult.AddColumn("Name");
// Добавление в качестве колонки запроса подзапрос esqSubQuery.
esqResult.AddColumn(esqSubQuery);
string esqSqlText = esqResult.GetSelectQuery(UserConnection).GetSqlText();

// Текст результирующего sql-запроса:

// MS SQL:
// SELECT
//            [Account].[Name] [Name],
//            (
//            SELECT
//                    [Contact].[Name] [Name]
//            FROM
//                    [dbo].[Contact] [Contact]) [SubContact]
// FROM
//            [dbo].[Account] [Account] 

© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?