Вопрос

Получить значения полей элемента 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");

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

 

 

Изображение удалено.

Нравится

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

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

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

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

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

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

Показать все комментарии