Получить значения полей элемента ReadDataUserTask в задании-сценарии БП

Все довольно просто: есть чтение данных с режимом чтения = "Читать коллекцию записей". Имя элемента ReadDataUserTask1. Версия bpm 7.12.4, процесс не компилируемый, соответственно напрямую, как раньше к элементу не обратиться.

Понятно что можно создать столько параметров БП сколько полей я прочитал и в элементах-формулах присвоить нужные значения, а потом в скрипте Get сработает, но когда полей много, то это очень накладно.

 Нужно использовать метод T Get<T>(string propertyPath), но возникает 2 проблемки:

1) Чему равен propertyPath? Точно не ResultCompositeObjectList - поскольку он выдаёт результат для режима чтения = "Читать коллекцию записей"

2) какой тип T использовать, Entity? Или какой-то другой? В аналогичной задаче удалось определить как получить массив элементов с колонками. Но там читали коллекцию записей.

var entities = Get<ICompositeObjectList<ICompositeObject>("ReadDataUserTask1.ResultCompositeObjectList");

 

В автогенерируемом коде для элемента ReadDataUserTask1 создаётся целый набор параметров, который я пробовал получать в режиме отладки в элементе задание-сценарий:

var x01 = Get<object>("ReadDataUserTask1.DataSourceFilters");
var x02 = Get<object>("ReadDataUserTask1.ResultType");
var x03 = Get<object>("ReadDataUserTask1.ReadSomeTopRecords");
var x04 = Get<object>("ReadDataUserTask1.NumberOfRecords");
var x05 = Get<object>("ReadDataUserTask1.FunctionType");
var x06 = Get<object>("ReadDataUserTask1.AggregationColumnName");
var x07 = Get<object>("ReadDataUserTask1.OrderInfo");
var x08 = Get<object>("ReadDataUserTask1.ResultEntity");
var x09 = Get<object>("ReadDataUserTask1.ResultCount");
var x10 = Get<object>("ReadDataUserTask1.ResultIntegerFunction");
var x11 = Get<object>("ReadDataUserTask1.ResultFloatFunction");
var x12 = Get<object>("ReadDataUserTask1.ResultDateTimeFunction");
var x13 = Get<object>("ReadDataUserTask1.ResultRowsCount");
var x14 = Get<object>("ReadDataUserTask1.CanReadUncommitedData");
var x15 = Get<object>("ReadDataUserTask1.ResultEntityCollection");
var x16 = Get<object>("ReadDataUserTask1.EntityColumnMetaPathes");
var x17 = Get<object>("ReadDataUserTask1.IgnoreDisplayValues");
var x18 = Get<object>("ReadDataUserTask1.ResultCompositeObjectList");
var x19 = Get<object>("ReadDataUserTask1.ConsiderTimeInFilter");

Но ни один из них не наполнен полями объекта и их значениями.

 

 

У меня такой же вопрос

5 комментариев

Добрый день! Не подскажу про элемент процесса "читать коллекцию", но для работы с коллекцией проще всего использовать такой код:

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 для интерпретируемых процессов

Сидоров Александр В.,

Интересно как вы это поняли?  в начале первая строчка:

"Все довольно просто: есть чтение данных с режимом чтения = "Читать коллекцию записей". "

Добавить комментарий

Григорий Чех, далее в тексте автор говорит про одну запись

Войдите или зарегистрируйтесь, чтобы комментировать