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

Добавление данных с помощью подзапросов

Glossary Item Box

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

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

Код в примерах показывает различные способы передачи параметров в запрос. При разработке проекта учитывайте, что в метод Column.Const не следует передавать параметры, контролируемые пользователем, так как это может привести к потенциальным sql-инъекциям.

Пример 1

Получить текст SQL запроса
 
 
public string GetSqlTextExample(string contactName, string accountName)
{
    var result = "";
    var id = Guid.NewGuid();
    var selectQuery = new Select(UserConnection)
        .Column(Column.Parameter(contactName))
        .Column("Id")
        .From("Account")
        .Where("Name").IsEqual(Column.Parameter(accountName)) as Select;
    var insertSelectQuery = new InsertSelect(UserConnection)
        .Into("Contact")
        .Set("Name", "AccountId")
        .FromSelect(selectQuery);

    result = insertSelectQuery.GetSqlText();
    return result;
}

Пример 2

Добавить контакт с указанными именем и названием контрагента
 
 
public string InsertContactWithAccount(string contactName, string accountName)
{
    contactName = contactName ?? "Unknown contact";
    accountName = accountName ?? "Unknown account";
    
    var id = Guid.NewGuid();
    var selectQuery = new Select(UserConnection)
            .Column(Column.Parameter(contactName))
            .Column("Id")
        .From("Account")
        .Where("Name").IsEqual(Column.Parameter(accountName)) as Select;
    var insertSelectQuery = new InsertSelect(UserConnection)
        .Into("Contact")
        .Set("Name", "AccountId")
        .FromSelect(selectQuery);

    var affectedRows = insertSelectQuery.Execute();
    var result = $"Inserted new contact with name '{contactName}'" +
                $" and account '{accountName}'." +
                $" Affected {affectedRows} rows.";
    return result;
}

Пример 3

Добавить контакт с указанным именем, связав его со всеми контрагентами
 
 
public string InsertAllAccountsContact(string contactName)
{
    contactName = contactName ?? "Unknown contact";

    var id = Guid.NewGuid();
    var insertSelectQuery = new InsertSelect(UserConnection)
        .Into("Contact")
        .Set("Name", "AccountId")
        .FromSelect(
            new Select(UserConnection)
                .Column(Column.Parameter(contactName))
                .Column("Id")
                .From("Account") as Select);

    var affectedRows = insertSelectQuery.Execute();
    var result = $"Inserted {affectedRows} new contacts with name '{contactName}'";
    return result;
}

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

© Terrasoft 2002-2020.

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

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