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

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

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;
}

Смотрите также:

© Terrasoft 2002-2020.

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

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