Получить значения полей элемента ReadDataUserTask в задании-сценарии БП
Все довольно просто: есть чтение данных с режимом чтения = "Читать коллекцию записей". Имя элемента ReadDataUserTask1. Версия bpm 7.12.4, процесс не компилируемый, соответственно напрямую, как раньше к элементу не обратиться.
Понятно что можно создать столько параметров БП сколько полей я прочитал и в элементах-формулах присвоить нужные значения, а потом в скрипте Get сработает, но когда полей много, то это очень накладно.
Нужно использовать метод T Get(string propertyPath), но возникает 2 проблемки:
1) Чему равен propertyPath? Точно не ResultCompositeObjectList - поскольку он выдаёт результат для режима чтения = "Читать коллекцию записей"
2) какой тип T использовать, Entity? Или какой-то другой? В аналогичной задаче удалось определить как получить массив элементов с колонками. Но там читали коллекцию записей.
var entities = Get("ReadDataUserTask1.ResultCompositeObjectList");
В автогенерируемом коде для элемента ReadDataUserTask1 создаётся целый набор параметров, который я пробовал получать в режиме отладки в элементе задание-сценарий:
var x01 = Get("ReadDataUserTask1.DataSourceFilters");
var x02 = Get("ReadDataUserTask1.ResultType");
var x03 = Get("ReadDataUserTask1.ReadSomeTopRecords");
var x04 = Get("ReadDataUserTask1.NumberOfRecords");
var x05 = Get("ReadDataUserTask1.FunctionType");
var x06 = Get("ReadDataUserTask1.AggregationColumnName");
var x07 = Get("ReadDataUserTask1.OrderInfo");
var x08 = Get("ReadDataUserTask1.ResultEntity");
var x09 = Get("ReadDataUserTask1.ResultCount");
var x10 = Get("ReadDataUserTask1.ResultIntegerFunction");
var x11 = Get("ReadDataUserTask1.ResultFloatFunction");
var x12 = Get("ReadDataUserTask1.ResultDateTimeFunction");
var x13 = Get("ReadDataUserTask1.ResultRowsCount");
var x14 = Get("ReadDataUserTask1.CanReadUncommitedData");
var x15 = Get("ReadDataUserTask1.ResultEntityCollection");
var x16 = Get("ReadDataUserTask1.EntityColumnMetaPathes");
var x17 = Get("ReadDataUserTask1.IgnoreDisplayValues");
var x18 = Get("ReadDataUserTask1.ResultCompositeObjectList");
var x19 = Get("ReadDataUserTask1.ConsiderTimeInFilter");
Но ни один из них не наполнен полями объекта и их значениями.
Нравится
Добрый день! Не подскажу про элемент процесса "читать коллекцию", но для работы с коллекцией проще всего использовать такой код:
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "UsrCustom123"); esq.AddColumn("Id"); esq.AddColumn("Name"); var Filter1 = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Name", "zzz"); esq.Filters.Add(Filter1); var EsqCollection = esq.GetEntityCollection(UserConnection); if (EsqCollection.Count>0) { foreach (var name in EsqCollection) { var param1 = name.GetTypedColumnValue<string>("Name"); var param2 = name.GetTypedColumnValue<Guid>("Id"); ///ваш код.. } }
Добрый день! Не подскажу про элемент процесса "читать коллекцию", но для работы с коллекцией проще всего использовать такой код:
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "UsrCustom123"); esq.AddColumn("Id"); esq.AddColumn("Name"); var Filter1 = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Name", "zzz"); esq.Filters.Add(Filter1); var EsqCollection = esq.GetEntityCollection(UserConnection); if (EsqCollection.Count>0) { foreach (var name in EsqCollection) { var param1 = name.GetTypedColumnValue<string>("Name"); var param2 = name.GetTypedColumnValue<Guid>("Id"); ///ваш код.. } }
Получить и обработать коллекцию в интрпритируемом БП можно примерно так:
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask.ResultCompositeObjectList"); var result = ""; foreach(var entity in entities) { var cityName = entity.GetTypedColumnValue<string>("Name"); }
Константин, я так понял вам нужно считать 1 запись, а не коллекцию?
Тогда можно просто поставить режим чтения "Читать коллекцию записей", "Читать первые 1 записей". Ну и дальше использовать коллекцию ResultCompositeObjectList
var entities = Get<ICompositeObjectList<ICompositeObject>>("ReadDataUserTask1.ResultCompositeObjectList"); var entity = entities.FirstOrDefault();
Так как, к сожалению, ReadDataUserTask1.ResultEntity всегда возвращает null для интерпретируемых процессов
Сидоров Александр В.,
Интересно как вы это поняли? в начале первая строчка:
"Все довольно просто: есть чтение данных с режимом чтения = "Читать коллекцию записей". "
Добавить комментарий
Григорий Чех, далее в тексте автор говорит про одну запись