Добрый день. Элемент БП "Читать данные", в случае чтения коллекции, на выходе отдаёт параметр ICompositeObjectList<ICompositeObject> ResultCompositeObjectList. Необходимо создать элемент процесса, который будет производить конвертацию этого параметра обратно в EntityCollection, с целью получения Entity, в которой будет содержатся данные об одном элементе из коллекции. И дальнейшей передачи этой Entity в следующий элемент процесса. Каким образом это можно сделать?

Нравится

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

См. обсуждение аналогичного вопроса тут.

Зверев Александр,

Я находил данное обсуждение, спасибо, но там, к сожалению нет решения моей проблемы. Напомню, мне нужен элемент бизнес-процесса, у которого в выходном параметре будет содержаться один элемент из коллекции. А как этот выходной параметр создать? В идеале этот параметр должен быть с типом "CompositeObject", но дело в том, что параметр в элементе процесса можно создавать только из предложенных типов (строка, entity, число и т.д.) и среди этих вариантов нет типа: "CompositeObject".

Можно создать параметр процесса типа Entity или EntityCollection и программно его наполнять значением при помощи элемента-скрипта с кодом, как по ссылке.

Зверев Александр,

Не могли бы Вы привести в пример код, о котором Вы говорите? Тот код что по ссылке в foreach перебирает элементы коллекции с типом CompositeObjectList и передаёт элемент из этой коллекции в элемент с типом CompositeObject.
Я про это действие: 

foreach(var entity in entities)

для entity хоть и используется неявная типизация, но в процессе отладки удалось установить, что для entity назначается тип CompositeObject.

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

Зверев Александр,

Спасибо за помощь.

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

 В чем может быть проблема?

Процесс валится с ошибкой https://yadi.sk/i/OEAV92qdZHfeIA

Вот сам процесс:

Параметр:

 

Нравится

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

А если просто:

AccountListParameter = query.GetEntityCollection(userConnection);

 

Rochefort Trappistes,

Процесс так даже не опубликуется

эт почему не опубликуется? параметры это поля класса (процесс это класс), а блок c# это метод, который имеет доступ к полям класса, как на чтение так и на запись.

снимите галочку "Интерпритируемый" в блоке с c# кодом (в расширенных настройках)

 

Rochefort Trappistes,

нет такой галочки

три точки - расширенный режим, как-то так

Rochefort Trappistes,

значит убрали её. какая ошибка при компиляции, если сетить значение в параметр через равно, как я писал выше?

 Rochefort Trappistes, см тут:

Начиная с версии 7.12.3 все создаваемые бизнес-процессы в bpm’online являются интерпретируемыми. Для обращения к значениям параметра процесса следует использовать методы get и set.

Миннекаев Айдар, дело в том, что в версии 7.13 в системе отключена возможность создания компилируемых бизнес-процессов, что делает невозможным работу с параметром EntityCollection. Параметр такого типа оставлен в системе для совместимости со старыми бизнес-процессами, которые работают в компилируемом режиме, а для новых — возможность использования компилируемых скрипт-тасков в БП отключена.

В последующих версиях системы запланирована поддержка EntityCollection и работы по внедрению этой поддержки, по словам разработчиков ядра системы, уже ведутся.

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

Коллеги, приветствую.

Есть некоторый элемент- действие "Чтение данных", который считывает записи из таблицы и помещает в некоторую результирующую коллекцию ResultEntityCollection.

Как обратиться к этой коллекции из кода C# в действии "Задание- сценарий"?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Алексей,

В новом движке процессов работать можно только с параметрами процесса, либо напрямую с параметрами элементов, на которые настроен маппинг.
Пример решения задачи во вложении.
scripttaskmapping.txt

Олег, спасибо большое за ответ! Посмотрю сегодня.

Олег, не могли бы Вы выложить пример в UTF-8? Был бы весьма признателен.

Здравствуйте!

Согласно этому сайту, мой коллега хотел написать следующее:
1. Создать параметр процесса типа Строка - TestParam.
2. В значение параметра указать [#Read data 1.First item of resulting collection#].GetTypedColumnValue("Name")
3. В элементе Задание-сценарий работать с параметром.
var contactFullName = Get("TestParam");

Отлично, спасибо большое за ответ!

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

Коллеги, приветствую.

Есть некоторый элемент- действие "Чтение данных", который считывает записи из таблицы
и помещает в некоторую результирующую коллекцию ResultEntityCollection.

Далее я определяю параметр AggregateCollection, в котором будет сохраняться данная коллекция и через который я буду обращаться к ней из кода C#:

Значение данного параметра:

[#Чтение данных из таблицы контракты.Результирующая коллекция#]

В элементе "Задание- сценарий" я пытаюсь получить данный параметр:

var entityCollection = Get("AggregateCollection");
foreach (var entity in entityCollection) {
        Console.WriteLine(entity);
}

Однако на выходе ничего нет. Конфигурация компилируется без ошибок.

Как правильно обратиться к коллекции объектов EntityCollection?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Здравствуйте!

Коллекция не сериализуется в БД. По этой причине она пустая. Какую задачу Вы хотите решить?

Алексей, спасибо за Ваш ответ! Не сериализуется - в том смысле, что должна или не должна? Чекбокс "Сериализировать значение" проставлен по- умолчанию для элемента "Чтение данных". В нем я по определенному фильтру считываю записи. Когда данный элемент добавляется в дизайнер БП, для него создаются ряд параметров, в т.ч. ResultEntityCollection. Все параметры - не редактируемые. Чтобы обратиться к этой коллекции ResultEntityCollection из C# я создаю в параметрах процесса параметр AggregateCollection с типом "Коллекция объектов (EntityCollection)". Может, коллекцию нужно привязать к моему параметру через формулу?

Для параметра AggregateCollection проставил чекбокс "Сериализировать значение", ничего не изменилось..

Собственно, когда я говорил "на выходе ничего нет" я имел в виду, конечно, что entityCollection == null

Переехали в эту тему

Да, пожалуй - все же интересно, как передать коллекцию в сценарий.
Этот кейс я решил с помощью элементов бизнес-процессов, без действий- сценариев.

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