Получение данных с учетом прав пользователя
Glossary Item Box
Примеры использования EntitySchemaQuery для получения данных
Пакет с конфигурационным веб-сервисом, реализующим приведенные ниже примеры, можно скачать по ссылке.
Пример 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; }
Смотрите также: