Добрый день!
Не получается работать с коллекциями. При этом возникает вопрос: если у меня в элементе "Читать данные" коллекция записывается в ResultCompositeObjectList мне ее и читать? Или все равно вытягивать ResultEntityCollection (по примеру)?
И как потом "пройтись" по всем этим номерам в элементе "Задание-сценарий" (хочу склеить их в одну строку).
Если использовать код
var entities = Get<EntityCollection>("ReadDataUserTask4.ResultEntityCollection"); var result = ""; foreach(var entity in entities) { var Name = entity.GetTypedColumnValue<string>("Number"); result = result + Name + ", "; } Set("CaseAbo", result); return true;
Выдается ошибка:
System.NullReferenceException: Object reference not set to an instance of an object.
at Terrasoft.Core.Process.UsrAbonentUpdateMethodsWrapper.ScriptTask2Execute(ProcessExecutingContext context)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
Нравится
Сергей, данные из коллекции нужно считывать так:
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask1.ResultCompositeObjectList");
Т.е. в вашем случае код будет таким:
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask4.ResultCompositeObjectList"); var result = ""; foreach(var entity in entities) { var Name = ""; if (entity.TryGetValue<string>("Number", out Name)) { result = result + Name + ", "; } } Set("CaseAbo", result); return true;
Скорее всего имеет смысл получать коллекцию через Get<EntityCollection>("ResultCompositeObjectList").
Я пытался еще в 7.10 получать коллекцию из ReadDataUserTask - всегда null выдавало. Видимо до сих пор не поправили.
Варфоломеев Данила,
Если я делаю так, то выдает ошибку:
System.InvalidCastException: Unable to cast object of type 'Terrasoft.Common.CompositeObjectList`1[Terrasoft.Common.CompositeObject]' to type 'Terrasoft.Core.Entities.EntityCollection'.
at Terrasoft.Core.Process.ProcessModel.GetParameterValue[T](FoundParameterData result)
at Terrasoft.Core.Process.UsrAbonentUpdateMethodsWrapper.ScriptTask2Execute(ProcessExecutingContext context)
at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
поменяйте тип у переменной ResultCompositeObjectList на "Коллекция объектов (EntityCollection)"
Варфоломеев Данила,
К сожалению, там стоит замочек и изменить его нельзя...
Сергей, данные из коллекции нужно считывать так:
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask1.ResultCompositeObjectList");
Т.е. в вашем случае код будет таким:
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask4.ResultCompositeObjectList"); var result = ""; foreach(var entity in entities) { var Name = ""; if (entity.TryGetValue<string>("Number", out Name)) { result = result + Name + ", "; } } Set("CaseAbo", result); return true;
Сидоров Александр В.,
Спасибо, все получилось. Финальный вариант:
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask3.ResultCompositeObjectList"); var result = ""; List<string> r = new List<string>(); foreach(var entity in entities) { var Name = ""; if (entity.TryGetValue<string>("Number", out Name)) { r.Add(Name); } } result = String.Join(", ", r.ToArray()); Set("CaseAbo", result); return true;
Добрый день!
А изначальная задача в чем состоит? Если просто получить через запятую результаты определенной выборки, то может имеет смысл вынести эту задачу вообще в sql? Например, каким-нибудь вот таким способом
//... var result = new CustomQuery(UserConnection, @"select stuff(( select ', ' + [Number] from [Table_with_Number_field] for xml path('')), 1, 2, null)").ExecuteScalar<string>(); //...
Добрый день!
Аналогичным образом
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask3.ResultCompositeObjectList");
попробовал обратиться к коллекции на выходе из WS. Моя строка ниже:
var entities = Get<ICompositeObjectList<ICompositeObject>>("WebService1.UsrTestResult_Out");
Но отладка в студии показала, что в entities никакие данные не попадают.
При работе с WS в БП есть какие-то дополнительные подводные камни?
При необходимости готов прислать настройки блоков своего БП с WS и с кодом C#.
Александр Кулиш,
А что возвращает (тип) метод UsrTestResult_Out вашего WS