Использование массива в БП

Возможно, не новый вопрос ]||||||[, но никак не удается передать внутри БП массив с ID-шниками как параметр.
Заполняется массив в одном скрипте, использовать надо в другом элементе-скрипте. Пытаюсь создать параметр с типом Объект (Entity) так ругается при попытке передачи туда массива.
Очень не хочется пользоваться строкой неограниченной длины с парсингом ее по необходимости... некрасиво это и если ID-шников много не факт что работать будет корректно.
Подскажите, какой тип параметра БП использовать и как туда закинуть массив?

Нравится

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

Здравствуйте.
Есть специальный тип - массив:

На самый крайний случай, можно записать в атрибут глобального объекта Connector:

Connectror.Attributes('myArray') = myArray;
var myArrayNew = Connectror.Attributes('myArray'); 

"Олейник Дмитрий" написал:Здравствуйте.

Форум BPMonline 5.x

Саша, спасибо.

Александр, для BPM создайте параметр, и не меняйте его тип. Он по умолчанию создается как Object (внимание не как Object (Entity) - это другой тип данных). При этом, если Вы изменили тип - в списке Вы его уже не найдете.

А если ничего не менять, то такой код работает:

string[] strArr = new string[10];
array = strArr;

Где array - параметр с типом Object.

"Олейник Дмитрий" написал:Александр, для BPM создайте параметр, и не меняйте его тип. Он по умолчанию создается как Object (внимание не как Object (Entity) - это другой тип данных).

Значит, не показалось мне что оно сработало ровно один раз пока я не стал менять тип и перекомпилировал систему...
Дмитрий, ну это же не правильно как-то :smile:
Может разработчикам запрос на изменение с любым пусть низким приоритетом создать чтобы в список тот "просто объект" добавить для 5ки?

Александр, вопрос передал.

"Олейник Дмитрий" написал:Александр, вопрос передал.

Дмитрий, спасибо!

И вновь продолжается бой...
Передал я массив в параметр.
Пытаюсь к нему обратиться в другом элементе.
Вот так, например:

foreach (var i in SomeParameterArray.Length) {

где SomeParameterArray и есть параметр бп с типом объект...
и ругается оно, и не компилируется
'object' doesn't contain definition for 'Length' and no extension method 'Length' ...

Поэтому теперь надо разбираться, как же к этому переданному массиву обратиться... :sad:

Александр, во-первых, цикл foreach должен выглядеть так:

foreach (var i in SomeParameterArray) {

А в данном случае, скорее всего это не сработает и нужно приведение типов:

string[] strArr = new string[100];
ArrayParam = strArr;
IEnumerable<string> enumerable = ArrayParam as IEnumerable<string>;
foreach (var s in enumerable)
{
//своя логика
}

"Андрей Каспаревич" написал:Александр, во-первых, цикл foreach должен выглядеть так:
foreach (var i in SomeParameterArray) {

Ошибся :redface:

Сейчас еще поэкспериментирую

"Олейник Дмитрий" написал:Вопрос передал.

Дмитрий, а есть ли какиенибудь результаты? Тоже столкнулись с такой проблеммой.

Илья, в каком смысле? Всё работает и сейчас - создаете объект с типом Object, затем записываете в него массив.
При обращении, не забудьте привести тип Object к Array.

"Олейник Дмитрий" написал:Александр, для BPM создайте параметр, и не меняйте его тип. Он по умолчанию создается как Object (внимание не как Object (Entity) - это другой тип данных). При этом, если Вы изменили тип - в списке Вы его уже не найдете.

Я так понимаю Илья Т. пишет именно об этом, что нельзя данный тип назначить повторно, что есть баг

Тут я согласен, хоть, согласитесь, он и не критичен.

Создали действие процесса, а в нем параметр и по умолчанию создается тип String, создать параметр с типом Object невозможно.

"Олейник Дмитрий" написал:он и не критичен

Согласен :smile:
"Илья Т." написал:Создали действие процесса, а в нем параметр и по умолчанию создается тип String, создать параметр с типом Object невозможно.

В режиме редактирования метаданных поменяйте тип параметра "DataValueType" на "84ed6865-9692-4c98-aaed-4d15b96a95c2" ручками и затем сохраните и опубликуйте

Ручками и так поменяли. Но это не правильно. Так можно сказать, а зачем нужен редактор? Пишите метаданные в блокноте.

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