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

Получение данных с учетом прав доступа. Класс EntitySchemaQuery

Glossary Item Box

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

Класс Terrasoft.Core.Entities.EntitySchemaQuery предназначен для построения запросов выборки записей из таблиц базы данных с учетом прав доступа текущего пользователя. В результате создания и конфигурирования экземпляра этого класса будет построен запрос в базу данных приложения в виде SQL-выражения SELECT. В запрос можно добавить требуемые колонки, фильтры и условия ограничений.

Класс EntitySchemaQuery реализует механизм работы с хранилищем (кэшем Creatio либо произвольным хранилищем, определенным пользователем). При выполнении запроса EntitySchemaQuery данные, полученные из базы данных на сервере, помещаются в кэш. В качестве кэша запроса может выступать произвольное хранилище, которое реализует интерфейс Terrasoft.Core.Store.ICacheStore. По умолчанию в качестве кэша запроса EntitySchemaQuery выступает кэш Creatio уровня сессии (данные доступны только в сессии текущего пользователя) с локальным хранением данных.

Для запросов EntitySchemaQuery можно определить дополнительные настройки, которые задают параметры для постраничного вывода результатов выполнения запроса, а также параметры построения иерархического запроса. Для этого предназначен класс Terrasoft.Core.Entities.EntitySchemaQueryOptions.

Результатом выполнения запроса EntitySchemaQuery является экземпляр Terrasoft.Nui.ServiceModel.DataContract.EntityCollection (коллекция экземпляров класса Terrasoft.Core.Entities.Entity). Каждый экземпляр Entity в коллекции представляет собой строку набора данных, возвращаемого запросом.

Класс Terrasoft.Core.Entities.EntitySchemaQuery

ВАЖНО

НА ЗАМЕТКУ

Полный перечень методов и свойств класса EntitySchemaQuery, его родительских классов, а также реализуемых им интерфейсов, можно найти в документации ".NET библиотеки классов ядра платформы".

Конструкторы

  • public EntitySchemaQuery(EntitySchema rootSchema) — создает экземпляр класса, в котором в качестве корневой схемы устанавливается переданный экземпляр EntitySchema. В качестве менеджера схем устанавливается менеджер переданного экземпляра корневой схемы.
  • public EntitySchemaQuery(EntitySchemaManager entitySchemaManager, string sourceSchemaName) — создает экземпляр класса с указанным EntitySchemaManager и корневой схемы с именем, переданным в качестве аргумента.
  • public EntitySchemaQuery(EntitySchemaQuery source) — создает экземпляр класса, являющийся клоном экземпляра, переданного в качестве аргумента.

Свойства

Табл. 1. — Основные свойства класса EntitySchemaQuery

Свойство Тип Описание
Cache Terrasoft.Core.Store.ICacheStore Кэш запроса.
CacheItemName string Имя элемента кэша.
CanReadUncommitedData bool Определяет, попадут ли в результаты запроса данные, для которых не завершена транзакция.
Caption Terrasoft.Common.LocalizableString Заголовок.
ChunkSize int Количество строк запроса в одном чанке.
Columns Terrasoft.Core.Entities.EntitySchemaQueryColumnCollection Коллекция колонок текущего запроса к схеме объекта.
DataValueTypeManager DataValueTypeManager Менеджер значений типов данных.
EntitySchemaManager Terrasoft.Core.Entities.EntitySchemaManager Менеджер схем объектов.
Filters Terrasoft.Core.Entities.EntitySchemaQueryFilterCollection Коллекция фильтров текущего запроса к схеме объекта.
HideSecurityValue bool Определяет, будут ли скрыты значения зашифрованных колонок.
IgnoreDisplayValues bool Определяет, будут ли в запросе использоваться отображаемые значения колонок.
IsDistinct bool Определяет, убирать ли дубли в результирующем наборе данных.
IsInherited bool Определяет, является ли запрос унаследованным.
JoinRightState QueryJoinRightLevel Определяет условие наложения прав при использовании связанных таблиц, если схема администрируется по записям.
Manager Terrasoft.Core.IManager Менеджер схем.
ManagerItem Terrasoft.Core.IManagerItem Элемент менеджера.
Name string Имя.
ParentCollection Terrasoft.Core.Entities.EntitySchemaQueryCollection Коллекция запросов, которой принадлежит текущий запрос к схеме объекта.
ParentEntitySchema Terrasoft.Core.Entities.EntitySchema Родительская схема запроса.
PrimaryQueryColumn Terrasoft.Core.Entities.EntitySchemaQueryColumn Колонка, созданная по первичной колонке корневой схемы. Заполняется при первом обращении.
QueryOptimize bool Разрешает использование оптимизации запроса.
RootSchema Terrasoft.Core.Entities.EntitySchema Корневая схема.
RowCount int Количество строк, возвращаемых запросом.
SchemaAliasPrefix string Префикс, используемый для создания псевдонимов схем.
SkipRowCount int Количество строк, которые необходимо пропустить при возврате результата запроса.
UseAdminRights bool Определяет будут ли учитываться права при построении запроса получения данных.
UseLocalization bool Определяет, будут ли использоваться локализованные данные.
UseOffsetFetchPaging bool Определяет возможность постраничного возврата результата запроса.

UseRecordDeactivation

bool Определяет, будут ли данные исключены из фильтрации.

Методы

Табл. 2. — Основные методы класса EntitySchemaQuery

Методы Описание
void AddAllSchemaColumns(bool skipSystemColumns) В коллекцию колонок текущего запроса к схеме объекта добавляет все колонки корневой схемы.

EntitySchemaQueryColumn AddColumn(string columnPath, AggregationTypeStrict aggregationType, out EntitySchemaQuery subQuery)

void AddColumn(EntitySchemaQueryColumn queryColumn)

EntitySchemaQueryColumn AddColumn(string columnPath)

EntitySchemaQueryColumn AddColumn(EntitySchemaQueryFunction function)

EntitySchemaQueryColumn AddColumn(object parameterValue, DataValueType parameterDataValueType)

EntitySchemaQueryColumn AddColumn(EntitySchemaQuery subQuery)

Создает и добавляет колонку в текущий запрос к схеме объекта.

Параметры:

  • columnPath — путь к колонке схемы относительно корневой схемы;
  • aggregationType — тип агрегирующей функции. В качестве параметра передаются значения перечисления типов агрегирующей функции Terrasoft.Common.AggregationTypeStrict;
  • subQuery — ссылка на созданный подзапрос, помещенный в колонку;
  • queryColumn — экземпляр EntitySchemaQueryColumn, добавляемый в коллекцию колонок текущего запроса;
  • function — экземпляр функции EntitySchemaQueryFunction;
  • parameterValue — значение параметра, добавляемого в запрос в качестве колонки;
  • parameterDataValueType — тип значения параметра, добавляемого в запрос в качестве колонки.
void ClearCache() Очищает кэш текущего запроса.
static void ClearDefCache(string cacheItemName) Удаляет из кэша запроса элемент с заданным именем cacheItemName.
object Clone() Создает клон текущего экземпляра EntitySchemaQuery.
EntitySchemaQueryExpression CreateAggregationEntitySchemaExpression(string leftExprColumnPath, AggregationTypeStrict leftExprAggregationType) Возвращает выражение агрегирующей функции с заданным типом агрегации из перечисления Terrasoft.Common.AggregationTypeStrict для колонки, расположенной по заданному пути leftExprColumnPath.

static EntitySchemaQueryExpression CreateParameterExpression(object parameterValue)

static EntitySchemaQueryExpression CreateParameterExpression(object parameterValue, DataValueType valueType)

static EntitySchemaQueryExpression CreateParameterExpression(object parameterValue, string displayValue, DataValueType valueType)

Создает выражение для параметра запроса.

Параметры:

  • parameterValue — значение параметра;
  • valueType — тип значения параметра;
  • displayValue — значение для отображения параметра.

static IEnumerable CreateParameterExpressions(DataValueType valueType, params object[] parameterValues)

static IEnumerable CreateParameterExpressions(DataValueType valueType, IEnumerable<object> parameterValues)

Создает коллекцию выражений для параметров запроса с определенным типом данных DataValueType.

static EntitySchemaQueryExpression CreateSchemaColumnExpression(EntitySchemaQuery parentQuery, EntitySchema rootSchema, string columnPath, bool useCoalesceFunctionForMultiLookup, bool useDisplayValue)

static EntitySchemaQueryExpression CreateSchemaColumnExpression(EntitySchema rootSchema, string columnPath, bool useCoalesceFunctionForMultiLookup)

EntitySchemaQueryExpression CreateSchemaColumnExpression(string columnPath, bool useCoalesceFunctionForMultiLookup)

Возвращает выражение колонки схемы объекта.

Параметры:

  • parentQuery — запрос к схеме объекта, для которого создается выражение колонки;
  • rootSchema — корневая схема;
  • columnPath — путь к колонке относительно корневой схемы;
  • useCoalesceFunctionForMultiLookup

    признак, использовать ли для колонки типа справочник функцию COALESCE. Необязательный параметр, по умолчанию равен true;

  • useDisplayValue — признак, использовать ли для колонки значение для отображения. Необязательный параметр, по умолчанию равен false.

IEnumerable CreateSchemaColumnExpressions(params string[] columnPaths)

IEnumerable CreateSchemaColumnExpressions(IEnumerable columnPaths, bool useCoalesceFunctionForMultiLookup)

Возвращает коллекцию выражений колонок запроса к схеме объекта по заданной коллекции путей к колонкам columnPaths.
IEnumerable CreateSchemaColumnExpressionsWithoutCoalesce(params string[] columnPaths) Возвращает коллекцию выражений колонок запроса к схеме объекта по заданному массиву путей к колонкам. При этом, если колонка имеет тип множественный справочник, к ее значениям не применяется функция COALESCE.

static EntitySchemaQueryExpression CreateSchemaColumnQueryExpression(string columnPath, EntitySchema rootSchema, EntitySchemaColumn schemaColumn, bool useDisplayValue)

static EntitySchemaQueryExpression CreateSchemaColumnQueryExpression(string columnPath, EntitySchema rootSchema, bool useDisplayValue)

Возвращает выражение запроса к схеме объекта по заданным пути к колонке, корневой схеме и экземпляру колонки схемы. При этом для колонки можно определить, какой тип ее значения использовать в выражении — хранимое значение или значение для отображения.
EntitySchemaQueryExpression CreateSubEntitySchemaExpression(string leftExprColumnPath) Возвращает выражение подзапроса к схеме объекта для колонки, расположенной по заданному пути leftExprColumnPath.
EntitySchemaAggregationQueryFunction CreateAggregationFunction(AggregationTypeStrict aggregationType, string columnPath) Возвращает экземпляр агрегирующей функции EntitySchemaAggregationQueryFunction с заданным типом агрегации из перечисления Terrasoft.Common.AggregationTypeStrict для колонки по указанному пути относительно корневой схемы columnPath.
EntitySchemaCaseNotNullQueryFunction CreateCaseNotNullFunction(params EntitySchemaCaseNotNullQueryFunctionWhenItem[] whenItems) Возвращает экземпляр CASE-функции EntitySchemaCaseNotNullQueryFunction для заданного массива выражений условий EntitySchemaCaseNotNullQueryFunctionWhenItem.
EntitySchemaCaseNotNullQueryFunctionWhenItem CreateCaseNotNullQueryFunctionWhenItem(string whenColumnPath, object thenParameterValue)

Возвращает экземпляр выражения для sql-конструкции вида WHEN <Выражение_1> IS NOT NULL THEN <Выражение_2>, где:

  • whenColumnPath — путь к колонке, содержащей выражение предложения WHEN;
  • thenParameterValue — путь к колонке, содержащей выражение предложения THEN.
EntitySchemaCastQueryFunction CreateCastFunction(string columnPath, DBDataValueType castType) Возвращает экземпляр CAST-функции EntitySchemaCastQueryFunction для выражения колонки, расположенной по заданному пути относительно корневой схемы columnPath, и указанным целевым типом данных DBDataValueType.

EntitySchemaCoalesceQueryFunction CreateCoalesceFunction(params string[] columnPaths)

static EntitySchemaCoalesceQueryFunction CreateCoalesceFunction(EntitySchemaQuery parentQuery, EntitySchema rootSchema, params string[] columnPaths)

static EntitySchemaCoalesceQueryFunction CreateCoalesceFunction(EntitySchema rootSchema, params string[] columnPaths)

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

Параметры:

  • columnPaths — массив путей к колонкам относительно корневой схемы;
  • parentQuery — запрос к схеме объекта, для которого создается экземпляр функции;
  • rootSchema — корневая схема.
EntitySchemaConcatQueryFunction CreateConcatFunction(params EntitySchemaQueryExpression[] expressions) Возвращает экземпляр функции для формирования строки, являющейся результатом объединения строковых значений аргументов функции для заданного массива выражений EntitySchemaQueryExpression.
EntitySchemaDatePartQueryFunction CreateDatePartFunction(EntitySchemaDatePartQueryFunctionInterval interval, string columnPath) Возвращает экземпляр DATEPART-функции EntitySchemaDatePartQueryFunction, определяющей интервал даты, заданный перечислением EntitySchemaDatePartQueryFunctionInterval (месяц, день, час, год, день недели...), для значения колонки, расположенной по указанному пути относительно корневой схемы.
EntitySchemaDatePartQueryFunction CreateDayFunction(string columnPath) Возвращает экземпляр функции EntitySchemaDatePartQueryFunction, определяющей интервал даты [День] для значения колонки, расположенной по указанному пути относительно корневой схемы.
EntitySchemaDatePartQueryFunction CreateHourFunction(string columnPath) Возвращает экземпляр функции EntitySchemaDatePartQueryFunction, возвращающей часть даты [Час] для значения колонки, расположенной по указанному пути относительно корневой схемы.
EntitySchemaDatePartQueryFunction CreateHourMinuteFunction(string columnPath) Возвращает экземпляр функции EntitySchemaDatePartQueryFunction, возвращающей часть даты [Минута] для значения колонки, расположенной по указанному пути относительно корневой схемы.
EntitySchemaDatePartQueryFunction CreateMonthFunction(string columnPath) Возвращает экземпляр функции EntitySchemaDatePartQueryFunction, возвращающей часть даты [Месяц] для значения колонки, расположенной по указанному пути относительно корневой схемы.

EntitySchemaDatePartQueryFunction CreateWeekdayFunction(string columnPath)

Возвращает экземпляр функции EntitySchemaDatePartQueryFunction, возвращающей часть даты [День недели] для значения колонки, расположенной по указанному пути относительно корневой схемы.

EntitySchemaDatePartQueryFunction CreateWeekFunction(string columnPath) Возвращает экземпляр функции EntitySchemaDatePartQueryFunction, возвращающей часть даты [Неделя] для значения колонки, расположенной по указанному пути относительно корневой схемы.
EntitySchemaDatePartQueryFunction CreateYearFunction(string columnPath) Возвращает экземпляр функции EntitySchemaDatePartQueryFunction, возвращающей часть даты [Год] для значения колонки, расположенной по указанному пути относительно корневой схемы.
EntitySchemaIsNullQueryFunction CreateIsNullFunction(string checkColumnPath, string replacementColumnPath) Возвращает экземпляр функции EntitySchemaIsNullQueryFunction для колонок с проверяемым и замещающим значениями, которые расположены по заданным путям относительно корневой схемы.

EntitySchemaLengthQueryFunction CreateLengthFunction(string columnPath)

EntitySchemaLengthQueryFunction CreateLengthFunction(params EntitySchemaQueryExpression[] expressions)

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

EntitySchemaTrimQueryFunction CreateTrimFunction(string columnPath)

EntitySchemaTrimQueryFunction CreateTrimFunction(params EntitySchemaQueryExpression[] expressions)

Возвращает экземпляр функции TRIM (функция для удаления начальных и конечных пробелов из выражения) для выражения колонки по заданному пути относительно корневой схемы или для заданного массива выражений.

EntitySchemaUpperQueryFunction CreateUpperFunction(string columnPath)

Возвращает экземпляр функции EntitySchemaUpperQueryFunction, для преобразования символов выражения аргумента к верхнему регистру, для выражения колонки по заданному пути относительно корневой схемы.
EntitySchemaCurrentDateQueryFunction CreateCurrentDateFunction() Возвращает экземпляр функции EntitySchemaCurrentDateQueryFunction, определяющей текущую дату.
EntitySchemaCurrentDateTimeQueryFunction CreateCurrentDateTimeFunction() Возвращает экземпляр функции EntitySchemaCurrentDateTimeQueryFunction, определяющей текущие дату и время.
EntitySchemaCurrentTimeQueryFunction CreateCurrentTimeFunction() Возвращает экземпляр функции EntitySchemaCurrentTimeQueryFunction, определяющей текущее время.
EntitySchemaCurrentUserAccountQueryFunction CreateCurrentUserAccountFunction() Возвращает экземпляр функции EntitySchemaCurrentUserAccountQueryFunction, определяющей идентификатор контрагента текущего пользователя.
EntitySchemaCurrentUserContactQueryFunction CreateCurrentUserContactFunction() Возвращает экземпляр функции EntitySchemaCurrentUserContactQueryFunction, определяющей идентификатор контакта текущего пользователя.
EntitySchemaCurrentUserQueryFunction CreateCurrentUserFunction() Возвращает экземпляр функции EntitySchemaCurrentUserQueryFunction, определяющей текущего пользователя.
EntitySchemaQueryFilter CreateExistsFilter(string rightExpressionColumnPath) Создает фильтр сравнения типа [Существует по заданному условию] и устанавливает в качестве проверяемого значения выражение колонки, расположенной по пути rightExpressionColumnPath.

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExpressionColumnPath, params string[] rightExpressionColumnPaths)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExpressionColumnPath, EntitySchemaQueryExpression rightExpression)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExpressionColumnPath, EntitySchemaQueryFunction rightExpressionValue)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, EntitySchemaQueryExpression leftExpression, EntitySchemaQueryMacrosType macrosType, int rightValue)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, EntitySchemaQueryExpression leftExpression, EntitySchemaQueryMacrosType macrosType, DateTime rightValue)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, EntitySchemaQueryExpression leftExpression, EntitySchemaQueryMacrosType macrosType, DayOfWeek rightValue)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExpressionColumnPath, EntitySchemaQueryMacrosType macrosType, int rightValue)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExpressionColumnPath, EntitySchemaQueryMacrosType macrosType, DateTime rightValue)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExpressionColumnPath, EntitySchemaQueryMacrosType macrosType, DayOfWeek rightValue)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExpressionColumnPath, EntitySchemaQuery rightExpressionValue)

EntitySchemaQueryFilter CreateFilter(FilterComparisonType comparisonType, string leftExprColumnPath, AggregationTypeStrict leftExprAggregationType, int rightExprParameterValue)

EntitySchemaQueryFilter CreateFilter(FilterComparisonType comparisonType, string leftExprColumnPath, AggregationTypeStrict leftExprAggregationType, double rightExprParameterValue)

EntitySchemaQueryFilter CreateFilter(FilterComparisonType comparisonType, string leftExprColumnPath, AggregationTypeStrict leftExprAggregationType, DateTime rightExprParameterValue)

EntitySchemaQueryFilter CreateFilter(FilterComparisonType comparisonType, string leftExprColumnPath, AggregationTypeStrict leftExprAggregationType, string rightExprParameterValue)

EntitySchemaQueryFilter CreateFilter(FilterComparisonType comparisonType, string leftExprColumnPath, AggregationTypeStrict leftExprAggregationType, object rightExprParameterValue, out EntitySchemaQuery leftExprSubQuery)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExprColumnPath, AggregationTypeStrict leftExprAggregationType, EntitySchemaQueryMacrosType macrosType, int daysCount)

IEntitySchemaQueryFilterItem CreateFilter(FilterComparisonType comparisonType, string leftExprColumnPath, AggregationTypeStrict leftExprAggregationType, EntitySchemaQueryMacrosType macrosType, out EntitySchemaQuery leftExprSubQuery, int daysCount)

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

Параметры:

  • comparisonType — тип сравнения из перечисления Terrasoft.Core.Entities.FilterComparisonType;
  • leftExpressionColumnPath — путь к колонке, содержащей выражение левой части фильтра;
  • leftExpression — выражение в левой части фильтра;
  • leftExprAggregationType — тип агрегирующей функции;
  • leftExprSubQuery — параметр, в котором возвращается подзапрос для выражения в левой части фильтра (если он не равен null) либо подзапрос для первого выражения в правой части фильтра (если выражение левой части фильтра равно null);
  • rightExpressionColumnPaths — массив путей к колонкам, содержащим выражения правой части фильтра;
  • rightExpression — выражение в правой части фильтра;
  • rightExpressionValue — экземпляр функции выражения в правой части фильтра (тип параметра EntitySchemaQueryFunction ) или выражение подзапроса в правой части фильтра (тип параметра EntitySchemaQuery);
  • rightValue — значение, которое обрабатывается макросом в правой части фильтра;
  • rightExprParameterValue — значение параметра, к которому применяется агрегирующая функция в правой части фильтра;
  • macrosType — тип макроса из перечисления Terrasoft.Core.Entities.EntitySchemaQueryMacrosType;
  • daysCount — значение, к которому применяется макрос в правой части фильтра. Необязательный параметр, по умолчанию равен 0.

IEntitySchemaQueryFilterItem CreateFilterWithParameters(FilterComparisonType comparisonType, bool useDisplayValue, string leftExpressionColumnPath, params object[] rightExpressionParameterValues)

IEntitySchemaQueryFilterItem CreateFilterWithParameters(FilterComparisonType comparisonType, string leftExpressionColumnPath, params object[] rightExpressionParameterValues)

IEntitySchemaQueryFilterItem CreateFilterWithParameters(FilterComparisonType comparisonType, string leftExpressionColumnPath, IEnumerable<object> rightExpressionParameterValues, bool useDisplayValue)

static IEntitySchemaQueryFilterItem CreateFilterWithParameters(EntitySchemaQuery parentQuery, EntitySchema rootSchema, FilterComparisonType comparisonType, bool useDisplayValue, string leftExpressionColumnPath, params object[] rightExpressionParameterValues)

static IEntitySchemaQueryFilterItem CreateFilterWithParameters(EntitySchema rootSchema, FilterComparisonType comparisonType, bool useDisplayValue, string leftExpressionColumnPath, params object[] rightExpressionParameterValues)

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

Параметры:

  • parentQuery — родительский запрос, для которого создается фильтр;
  • rootSchema — корневая схема;
  • comparisonType — тип сравнения из перечисления Terrasoft.Core.Entities.FilterComparisonType;
  • useDisplayValue — признак типа значения колонки, которое используется в фильтре: true - значение для отображения; false - хранимое значение;
  • leftExpressionColumnPath — путь к колонке, содержащей выражение левой части фильтра;
  • rightExpressionParameterValues — коллекция выражений параметров в правой части фильтра.
IEntitySchemaQueryFilterItem CreateIsNotNullFilter(string leftExpressionColumnPath) Создает фильтр сравнения типа [Не является null в базе данных], устанавливая в качестве проверяемого значения выражение колонки, расположенной по указанному в параметре leftExpressionColumnPath пути.
IEntitySchemaQueryFilterItem CreateIsNullFilter(string leftExpressionColumnPath) Создает фильтр сравнения типа [Является null в базе данных], устанавливая в качестве условия проверки выражение колонки, расположенной по указанному в параметре leftExpressionColumnPath пути.
EntitySchemaQueryFilter CreateNotExistsFilter(string rightExpressionColumnPath) Создает фильтр сравнения типа [Не существует по заданному условию] и устанавливает в качестве проверяемого значения выражение колонки, расположенной по пути rightExpressionColumnPath.
DataTable GetDataTable(UserConnection userConnection) Возвращает результат выполнения текущего запроса к схеме объекта в виде таблицы данных в памяти, используя пользовательское подключение UserConnection.
static int GetDayOfWeekNumber(UserConnection userConnection, DayOfWeek dayOfWeek) Возвращает порядковый номер дня недели для объекта System.DayOfWeek с учетом региональных настроек.
Entity GetEntity(UserConnection userConnection, object primaryColumnValue) Возвращает экземпляр Entity по первичному ключу primaryColumnValue, используя пользовательское подключение UserConnection.

EntityCollection GetEntityCollection(UserConnection userConnection, EntitySchemaQueryOptions options)

EntityCollection GetEntityCollection(UserConnection userConnection)

Возвращает коллекцию экземпляров Entity, представляющих результаты выполнения текущего запроса, используя пользовательское подключение UserConnection и заданные дополнительные настройки запроса EntitySchemaQueryOptions.
EntitySchema GetSchema() Возвращает экземпляр схемы объекта EntitySchema текущего экземпляра EntitySchemaQuery.

Select GetSelectQuery(UserConnection userConnection)

Select GetSelectQuery(UserConnection userConnection, EntitySchemaQueryOptions options)

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

EntitySchemaQueryColumnCollection GetSummaryColumns()

EntitySchemaQueryColumnCollection GetSummaryColumns(IEnumerable<string> columnNames)

Возвращает коллекцию выражений колонок запроса, для которых вычисляются итоговые значения.

Entity GetSummaryEntity(UserConnection userConnection, EntitySchemaQueryColumnCollection summaryColumns)

Entity GetSummaryEntity(UserConnection userConnection)

Entity GetSummaryEntity(UserConnection userConnection, IEnumerable<string> columnNames)

Entity GetSummaryEntity(UserConnection userConnection, params string[] columnNames)

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

Параметры:

  • userConnection — пользовательское подключение;
  • summaryColumns — коллекция колонок запроса, для которых выбираются итоговые значения;
  • columnNames — коллекция имен колонок.

Select GetSummarySelectQuery(UserConnection userConnection, EntitySchemaQueryColumnCollection summaryColumns)

Select GetSummarySelectQuery(UserConnection userConnection)

Select GetSummarySelectQuery(UserConnection userConnection, IEnumerable<string> columnNames)

Select GetSummarySelectQuery(UserConnection userConnection, params string[] columnNames)

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

Параметры:

  • userConnection — пользовательское подключение;
  • summaryColumns — коллекция колонок запроса, для которых выбираются итоговые значения;
  • columnNames — коллекция имен колонок.
T GetTypedColumnValue(Entity entity, string columnName) Возвращает типизированное значение колонки с именем columnName из переданного экземпляра Entity.

void LoadDataTableData(UserConnection userConnection, DataTable dataTable)

void LoadDataTableData(UserConnection userConnection, DataTable dataTable, EntitySchemaQueryOptions options)

Загружает результат выполнения текущего запроса к схеме объекта в объект System.Data.DataTable, используя пользовательское подключение UserConnection и заданные дополнительные настройки запроса EntitySchemaQueryOptions.
void RemoveColumn(string columnName) Удаляет колонку с именем columnName из коллекции колонок текущего запроса.
void ResetSchema() Очищает схему текущего экземпляра EntitySchemaQuery.
void ResetSelectQuery() Очищает запрос на выборку для текущего запроса к схеме объекта.
void SetLocalizationCultureId(System.Guid cultureId) Устанавливает идентификатор локальной культуры.

Особенности EntitySchemaQuery

1) Поддержка прав доступа

Запрос на выборку данных EntitySchemaQuery строится таким образом, чтобы учитывать права текущего пользователя. В результирующий набор попадут только те данные, к которым текущий пользователь имеет доступ согласно его правам. Дополнительно для EntitySchemaQuery можно регулировать условия наложения прав на связанные таблицы, присутствующие в запросе (которые присоединяются к запросу предложением JOIN). Эти условия определяются значением свойства JoinRightState экземпляра EntitySchemaQuery.

2) Механизм кеширования

В EntitySchemaQuery реализован механизм работы с хранилищем (кэшем Creatio либо произвольным хранилищем, определенным пользователем). При выполнении запроса EntitySchemaQuery данные, полученные из базы данных на сервере, помещаются в кэш. В качестве кэша запроса может выступать произвольное хранилище, которое реализует интерфейс ICacheStore. По умолчанию в качестве кэша запроса EntitySchemaQuery выступает кэш Creatio уровня сессии (данные доступны только в сессии текущего пользователя) с локальным хранением данных. Кэш запроса определяется свойством Cache экземпляра EntitySchemaQuery. С помощью свойства CacheItemName задается ключ доступа к кэшу запроса (пример 4).

3) Дополнительные настройки запроса

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

Свойства класса EntitySchemaQueryOptions:

  • HierarchicalColumnName — имя колонки, использующейся для построения иерархического запроса;
  • HierarchicalColumnValue — начальное значение иерархической колонки, от которого будет строиться иерархия;
  • HierarchicalMaxDepth — максимальный уровень вложенности иерархического запроса;
  • PageableConditionValues — значения условий постраничного вывода;
  • PageableDirection — направление постраничного вывода;
  • PageableRowCount — количество записей страницы результирующего набора данных, возвращаемого запросом.

Один и тот же экземпляр EntitySchemaQueryOptions можно использовать для получения результатов выполнения различных запросов, передавая его в качестве параметра методу GetEntityCollection() соответствующего запроса (пример 5).

Примеры использования

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

Пример 1

Создание экземпляра EntitySchemaQuery

public string CreateESQ()
{
    var result = "";
    // Получение экземпляра менеджера схем объектов.          
    EntitySchemaManager esqManager = SystemUserConnection.EntitySchemaManager;
    // Получение экземпляра схемы, которая будет установлена в качестве корневой для создаваемого экземпляра
    // EntitySchemaQuery.
    var rootEntitySchema = esqManager.GetInstanceByName("City") as EntitySchema;
    // Создание экземпляра EntitySchemaQuery, у которого в качестве корневой схемы установлена схема
    // rootEntitySchema.
    var esqResult = new EntitySchemaQuery(rootEntitySchema);
    // Добавление колонок, которые будут выбираться в результирующем запросе.
    esqResult.AddColumn("Id");
    esqResult.AddColumn("Name");
    // Получение экземпляра Select, ассоциированного с созданным запросом EntitySchemaQuery.
    Select selectEsq = esqResult.GetSelectQuery(SystemUserConnection);
    // Получение текста результирующего запроса созданного экземпляра EntitySchemaQuery.
    result = selectEsq.GetSqlText();
    return result;
}

Пример 2

Создание клона экземпляра EntitySchemaQuery

public string CreateESQClone()
{
    var result = "";
    EntitySchemaManager esqManager = SystemUserConnection.EntitySchemaManager;
    var esqSource = new EntitySchemaQuery(esqManager, "Contact");
    esqSource.AddColumn("Id");
    esqSource.AddColumn("Name");
    // Создание экземпляра EntitySchemaQuery, являющегося клоном экземпляра esqSource.
    var esqClone = new EntitySchemaQuery(esqSource);
    result = esqClone.GetSelectQuery(SystemUserConnection).GetSqlText();
    return result;
}

Пример 3

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

public string GetEntitiesExample()
{
    var result = "";
    // Создание запроса к схеме City, добавление в запрос колонки Name.
    var esqResult = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City");
    var colName = esqResult.AddColumn("Name");

    // Выполнение запроса к базе данных и получение всей результирующей коллекции объектов.
    var entities = esqResult.GetEntityCollection(UserConnection);
    for (int i=0; i < entities.Length; i++) {
        result += entities[i].GetColumnValue(colName.Name).ToString();
        result += "\n";
    }
    
    // Выполнение запроса к базе данных и получение объекта с заданным идентификатором.
    var entity = esqResult.GetEntity(UserConnection, new Guid("100B6B13-E8BB-DF11-B00F-001D60E938C6"));
    result += "\n";
    result += entity.GetColumnValue(colName.Name).ToString();
    return result;
}

Пример 4

Пример работы с кэшем запроса EntitySchemaQuery

public Collection<string> UsingCacheExample()
{
    // Создание запроса к схеме City, добавление в запрос колонки Name.
    var esqResult = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City");
    esqResult.AddColumn("Name");

    // Определение ключа, под которым в кэше будут храниться результаты выполнения запроса.
    // В качестве кэша выступает кэш Creatio уровня сессии с локальным кэшированием данных (так как не 
    // переопределяется свойство Cache объекта).
    esqResult.CacheItemName = "EsqResultItem";

    // Коллекция, в которую будут помещены результаты выполнения запроса.
    var esqCityNames = new Collection<string>();

    // Коллекция, в которую будут помещаться закэшированные результаты выполнения запроса.
    var cachedEsqCityNames = new Collection<string>();

    // Выполнение запроса к базе данных и получение результирующей коллекции объектов.
    // После выполнения этой операции результаты запроса будут помещены в кэш.
    var entities = esqResult.GetEntityCollection(UserConnection);

    // Обработка результатов выполнения запроса и заполнение коллекции esqCityNames.
    foreach (var entity in entities)
    {
        esqCityNames.Add(entity.GetTypedColumnValue<string>("Name"));
    }

    // Получение ссылки на кэш запроса esqResult по ключу CacheItemName виде таблицы данных в памяти.
    var esqCacheStore = esqResult.Cache[esqResult.CacheItemName] as DataTable;

    // Заполнение коллекции cachedEsqCityNames значениями из кэша запроса.
    if (esqCacheStore != null)
    {
        foreach (DataRow row in esqCacheStore.Rows)
        {
            cachedEsqCityNames.Add(row[0].ToString());
        }
    }
    return cachedEsqCityNames;
}

Пример 5

Использование дополнительных настроек запроса

public Collection<string> ESQOptionsExample()
{
    // Создание экземпляра запроса с корневой схемой City.
    var esqCities = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City");
    esqCities.AddColumn("Name");

    // Создание запроса с корневой схемой Country.
    var esqCountries = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Country");
    esqCountries.AddColumn("Name");

    // Создание экземпляра настроек для возврата запросом первых 5 строк.
    var esqOptions = new EntitySchemaQueryOptions()
    {
        PageableDirection = PageableSelectDirection.First,
        PageableRowCount = 5,
        PageableConditionValues = new Dictionary<string, object>()
    };

    // Получение коллекции городов, которая будет содержать первые 5 городов результирующего набора данных.
    var cities = esqCities.GetEntityCollection(UserConnection, esqOptions);

    // Получение коллекции стран, которая будет содержать первые 5 стран результирующего набора данных.
    var countries = esqCountries.GetEntityCollection(UserConnection, esqOptions);
        var esqStringCollection = new Collection<string>();
    foreach (var entity in cities)
    {
        esqStringCollection.Add(entity.GetTypedColumnValue<string>("Name"));
    }
    foreach (var entity in countries)
    {
        esqStringCollection.Add(entity.GetTypedColumnValue<string>("Name"));
    }
    return esqStringCollection;
}

© Terrasoft 2002-2020.

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

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