С версии 7.16 появилась возможность множественного запуска бизнес-процессов через элемент подпроцесс. 

 

К примеру необходимо создать бизнес-процесс который будет отправлять письмо-поздравление всем контактам у которых сегодня день рождения. 

 

Для этого необходимо создать процесс с двумя элементами: 

1. Элемент [Читать коллекцию] контактов у которых сегодня день рождения

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

2. Элемент [Подпроцесс] в который передать коллекцию контактов которых нужно поздравить.

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

 

В самом же подпроцессе необходимо создать параметр процесса который соответствует отдельному элементу коллекции, в нашем случае это контакт: 

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

 

В результате запуска такого процесса получим последовательное выполнение подпроцесса для каждого элемента коллекции. Также процесс можно модифицировать добавив исходящие параметры.

Нравится

Поделиться

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

Здравствуйте, коллеги!

Сделал велосипед - перебор результирующей коллекции > элемента БП "Чтение данных" и решил поделиться для "будущих поколений".

Тестовый БП:

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

читаем счета

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

 

в Методах БП объявляем переменную, в которой будем хранить коллекцию, в данном случае invoices и методы доступа к колонкам объекта GetCompositeObjectColumnValue и перехода на следующую запись коллекции CompositeObjectListMoveNext

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

инициализируем переменную коллекции

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

Перебираем коллекцию и читаем поля текущей записи коллекции

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

Готово!

Нравится

Поделиться

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

Какие тэги поставить, что бы в топе выдачи поиска по теме было?

Борис Леонов,

а как обойти это ограничение?

Миннекаев Айдар,

я не знаю, пробовал 5000 - позволяет

Для статей при создании поста можно выбрать тип «Публикация» вместо «Вопрос».

По сути темы, таких масштабных чтений лучше избегать, ведь это требует большого объёма памяти как на сервере БД, так и на веб-сервере. Если действительно нужно обработать так много записей, лучше порциями.

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

Точно! Поменял на публикацию. А теги какие добавить? Идея то востребованная, куча вопросов на эту тему...

Касательно количества записей я согласен, что не нужно большими кусками читать, надо выборку ограничивать. Только элемент "Чтение данных" не поможет в этом, изворачиваться придется.

Как на Хабре, тег #никто_не_читает_теги.cheeky

Можно читать первые N штук, а потом каждую обрабатывать, чтобы не попадали под условия выборки, затем читать очередные N штук. А если записи не меняются, то непонятно, зачем так много читать, а не фильтровать ещё на уровне запроса в базу.

 

Борис, Спасибо!

Очень помогли.

И как жаль, что до сих пор нет базового инструмента для работы с коллекциями и способа перевода в EntityCollection

 

 Это же каким извращенцем нужно быть, чтоб кусок кода давать в виде скриншота) что ж вы за люди))))))

Stradivarius,

я посчитал, что он читается лучше, потому что вставленное как <код> тут выглядит ужасно

 Methods

private IEnumerator&lt;ICompositeObject&gt; entities;
 
private T GetCompositeObjectColumnValue&lt;T&gt;(IEnumerator&lt;ICompositeObject&gt; objectList, string columnName) {
		ICompositeObject currentObject = objectList.Current;
		if(currentObject != null) {
			currentObject.TryGetValue&lt;T&gt;(columnName, out T value);
			return value;
		} else {
			return default(T);
		}
 
}
 
private bool CompositeObjectListMoveNext(IEnumerator&lt;ICompositeObject&gt; objectList) {
	return objectList.MoveNext();
}

Init

entities = Get&lt;ICompositeObjectList&lt;ICompositeObject&gt;&gt;("ReadDataUserTask1.ResultCompositeObjectList").GetEnumerator();
return true;

Processing

Set("MoveNext", CompositeObjectListMoveNext(entities));
string name = GetCompositeObjectColumnValue&lt;string&gt;(entities, "Name");
// Работает с Name
return true;

 

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