Добрый день. Элемент БП "Читать данные", в случае чтения коллекции, на выходе отдаёт параметр ICompositeObjectList ResultCompositeObjectList. Необходимо создать элемент процесса, который будет производить конвертацию этого параметра обратно в EntityCollection, с целью получения Entity, в которой будет содержатся данные об одном элементе из коллекции. И дальнейшей передачи этой Entity в следующий элемент процесса. Каким образом это можно сделать?
Я находил данное обсуждение, спасибо, но там, к сожалению нет решения моей проблемы. Напомню, мне нужен элемент бизнес-процесса, у которого в выходном параметре будет содержаться один элемент из коллекции. А как этот выходной параметр создать? В идеале этот параметр должен быть с типом "CompositeObject", но дело в том, что параметр в элементе процесса можно создавать только из предложенных типов (строка, entity, число и т.д.) и среди этих вариантов нет типа: "CompositeObject".
Можно создать параметр процесса типа Entity или EntityCollection и программно его наполнять значением при помощи элемента-скрипта с кодом, как по ссылке.
Не могли бы Вы привести в пример код, о котором Вы говорите? Тот код что по ссылке в foreach перебирает элементы коллекции с типом CompositeObjectList и передаёт элемент из этой коллекции в элемент с типом CompositeObject.
Я про это действие:
foreach(var entity in entities)
для entity хоть и используется неявная типизация, но в процессе отладки удалось установить, что для entity назначается тип CompositeObject.
Мне кажется, проще будет вообще не использовать элемент чтения в БП, пытаясь потом вытянуть из него в нужном формате, а всё сделать чисто программно в блоке-скрипте, используя механизмы Select или EntitySchemaQuery, в зависимости от потребностей.
эт почему не опубликуется? параметры это поля класса (процесс это класс), а блок c# это метод, который имеет доступ к полям класса, как на чтение так и на запись.
снимите галочку "Интерпритируемый" в блоке с c# кодом (в расширенных настройках)
Начиная с версии 7.12.3 все создаваемые бизнес-процессы в bpm’online являются интерпретируемыми. Для обращения к значениям параметра процесса следует использовать методы get и set.
Миннекаев Айдар, дело в том, что в версии 7.13 в системе отключена возможность создания компилируемых бизнес-процессов, что делает невозможным работу с параметром EntityCollection. Параметр такого типа оставлен в системе для совместимости со старыми бизнес-процессами, которые работают в компилируемом режиме, а для новых — возможность использования компилируемых скрипт-тасков в БП отключена.
В последующих версиях системы запланирована поддержка EntityCollection и работы по внедрению этой поддержки, по словам разработчиков ядра системы, уже ведутся.
Есть некоторый элемент- действие "Чтение данных", который считывает записи из таблицы и помещает в некоторую результирующую коллекцию ResultEntityCollection.
Как обратиться к этой коллекции из кода C# в действии "Задание- сценарий"?
В новом движке процессов работать можно только с параметрами процесса, либо напрямую с параметрами элементов, на которые настроен маппинг.
Пример решения задачи во вложении. scripttaskmapping.txt
Согласно этому сайту, мой коллега хотел написать следующее:
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?
Алексей, спасибо за Ваш ответ! Не сериализуется - в том смысле, что должна или не должна? Чекбокс "Сериализировать значение" проставлен по- умолчанию для элемента "Чтение данных". В нем я по определенному фильтру считываю записи. Когда данный элемент добавляется в дизайнер БП, для него создаются ряд параметров, в т.ч. ResultEntityCollection. Все параметры - не редактируемые. Чтобы обратиться к этой коллекции ResultEntityCollection из C# я создаю в параметрах процесса параметр AggregateCollection с типом "Коллекция объектов (EntityCollection)". Может, коллекцию нужно привязать к моему параметру через формулу?