Изменить значение справочника и полей связанных с ним по изменению другого справочника
Bpm onsite 5.4
Общая задача: Изменить значение справочника и полей связанных с ним по изменению другого справочника.
Частная задача: изменяется город отправления или прибытия, выполняется SQL запрос к базе и в полю справочника "Конкурентное предложение" присваевается id предложения по аналогичному направлению, отображается название предложения сразу же, в другие поля автоматически отображаются значения названия Конкурента и Ставка конкурента.
в обработчиках полей города отправления и прибытия стоит такой код:
System.IO.File.AppendAllText("C:\\logs\\debug_zayavka.txt", "ид города отправления "+Page.DepartureCityEdit.Value+"\n");
var select1 = new Select(userConnection).Top(1)
.Column("Id")
.Column("Name")
.Column("RateTotal")
.From("PriceExp")
.Where(Column.Const(Page.DepartureCityEdit.Value)).IsEqual("CityFromId");
select1.Execute();
При выполнении кода происходит ошибка:
Как ее исправить?
Так же меня интересует, как после выполнения запроса сохранить данные выборки в определенные переменные?
Так же меня интересует, как после выполнения запроса сохранить данные выборки в определенные переменные?
Нравится
Вот пример запроса
Select selectPhone = (new Select(Page.UserConnection)
.Top(2000)
.Column(Column.Asterisk())
.From(selectPhoneMain).As("sel"))
as Select;
var selectExecute = selectPhone.ExecuteReader(Page.UserConnection.EnsureDBConnection());
var i=0;
while (selectExecute.Read())
{
i++;
var guidFromSelect = selectExecute[0].ToString();
phoneFilters.Add(structure.CreateFilterWithParameters(dataSource.Schema, FilterComparisonType.Equal, "Id", new Guid(guidFromSelect)));
}
Здравствуйте, Илья.
Для исправления измените вхождение userConnection на UserConnection.
Для сохранения результатов работы команды select1 в переменные, необходимо использовать интерфейс IDataReader:
// определяем данные цены конкурента по месту прибытия и отправления груза System.IO.File.AppendAllText("C:\\logs\\debug_zayavka.txt", "ид города отправления "+Page.DepartureCityEdit.Value+"\n"); var select1 = new Select(UserConnection).Top(1) .Column("Id") .Column("Name") .Column("RateTotal") .From("PriceExp") .Where("CityFromId").IsEqual(Column.Const(Page.DepartureCityEdit.Value)) as Select; Guid idValue; string nameValue; int rateValue; using (var dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dr = select1.ExecuteReader(dbExecutor)) { if (dr.Read()) { idValue = (Guid)dataReader.GetValue(0); nameValue = (string)dataReader.GetValue(1); rateValue = (int)dataReader.GetValue(2); } } }
Чтобы исправить первую ошибку подключите System.Data к скрипту.
Чтобы исправить три другие - измените вхождение dataReader на dr, это я опечатался.
сейчас код:
using System.Data; // определяем данные цены конкурента по месту прибытия и отправления груза System.IO.File.AppendAllText("C:\\logs\\debug_zayavka.txt", "ид города отправления "+Page.DepartureCityEdit.Value+"\n"); var select1 = new Select(UserConnection).Top(1) .Column("Id") .Column("Name") .Column("RateTotal") .From("PriceExp") .Where("CityFromId").IsEqual(Column.Const(Page.DepartureCityEdit.Value)) as Select; Guid idValue; string nameValue; int rateValue; using (var dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dr = select1.ExecuteReader(dbExecutor)) { if (dr.Read()) { idValue = (Guid)dr.GetValue(0); Page.LookupEdit18.SetValue(idValue); nameValue = (string)dr.GetValue(1); Page.LookupEdit25.SetValue(nameValue); rateValue = (int)dr.GetValue(2); Page.FloatEdit55.SetValue(rateValue); } } }
причем первую строку подчеркивает как с ошибкой:
в результате компиляции вылезает следующая ошибка:
Подключать namespace необходимо не в методе, а в структуре процесса:
Ошибка при компиляции исчезла, но появилась новая ошибка:
http://joxi.ru/qtb2U_3JTJA_eTCk1yI
Илья, ошибка говорит о некорректном преобразовании типов.
Попробуйте переменной rateValue задать значение float, а не int.
В идеале нужна отладка.