Использование операции «Отправка сообщения» и «Ожидание сообщения».
Рассмотрим пример использования данных операций. Идея процесса заключается в том, что автор путем использования операции Подпроцесс ставит несколько задач на выполнение и с помощью сообщений отслеживает их выполнение. Количество задач заранее не оговорено и зависит от заполнения блока задач, т.е. автор заполняет блок и по каждой его строке запускается процесс. В конце каждого подпроцесса отправляется сообщение в родительский процесс с результатами обработки.
Карта родительского процесса:

Для одновременной постановки задач по каждой строке используется операция Внешний подпроцесс с маркером Множественное выполнение. В данной операции настроена отправка в подпроцесс строковой переменной содержащей описание задачи в таком виде, как его ввел автор (строка берется из блока при помощи сценария), и ссылка на родительский экземпляр(будет использовано в отправке сообщения).
Карта подпроцесса:

В результате подпроцесса исполнителю поступает описание задачи, по выполнению которой он должен оставить комментарий о задаче. Далее с помощью отправки сообщения комментарий будет отправлен в родительский процесс и постановщик задачи сможет его прочитать.
Рассмотрим, как именно это реализовано. Начнем с родительского процесса. Он реализован в виде двух циклов: цикла запуска подпроцессов и цикла ожидания сообщений от них.
Цикл запуска подпроцессов. После заполнения блока используется сценарий для подготовки данных для цикла запусков подпроцесса: считается количество строк в блоке, обнуляется счетчик, выставляется количество ожидаемых сообщений:
context.Schetchik = 0; context.SchetchikSoobscheniy = 0; context.VsegoZapisey = context.Blok.Count; context.OzhidaemoeKolichestvoSoobscheniy = context.Blok.Count;
После чего запускается сценарий для определения строки блока, которая будет передана в каждый новый запускающийся процесс, одноременно с этим идет подсчет уже запущенных экземпляров и каждой уже отправленной строке проставляется соответствующий статус:
context.Stroka="";
context.Schetchik +=1;
foreach (var item in context.Blok) {
if ((item.StatusObrabotki=="Не обработано")&&(context.Stroka=="")){
item.StatusObrabotki = "Отправлено на обработку";
context.Stroka = item.Svoystvo;}}
После отработки данных сценариев процесс переходит в цикл ожидания отработки подпроцессов. Настройка операции Отправка сообщения:
.png)
При настройке операций Отправка сообщения и Ожидание сообщения необходимо указывать Тип сообщения, который будет передаваться между процессами. Настройки типа состоит из двух свойств: название типа и входящие в него параметры. По названию типа определяется какое сообщение будет процесс отправлять (ожидать), параметры же это само тело сообщения, свойства которые будут передаваться.
В этой операции указывается переменная Родительский экземпляр, чтобы сообщение отправилось в нужный экземпляр процесса. Значение в данную переменную записывается в результате операции Подпроцесс, о чем говорилось ранее. Переменную Описание задачи передаем обратно для того, чтобы записать комментарий и отметить выполненной нужную строку блока (она служит своего рода идентификатором строки).
Окно задачи Ожидание сообщения. Настройки выглядят так же с добавлением возможности выполнения сценариев.
.png)
Первый сценарий «Условие, при котором производится обработка» срабатывает при получении сообщения, и от его результата зависит выполнение второго сценария (в нашем случае оно не нужно). «Сценарий обработки данных сообщения» выполняется при положительном (True) результате выполнения предыдущего сценария, либо его отсутствии. В нашем примере этот сценарий записывает полученный комментарий в блок задач, обновляет статус строки и ведет подсчет полученных сообщений:
foreach (var item in context.Blok) {
if (context.Stroka == item.Svoystvo)
item.StatusObrabotki="Обработано"; }
context.SchetchikSoobscheniy = context.SchetchikSoobscheniy+1;
После получения нужного количества сообщении автору приходит задача по ознакомлению с результатами выполнения поставленных задач.