logo

Использование операции «Отправка сообщения» и «Ожидание сообщения».

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

Карта родительского процесса:

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

Карта подпроцесса:

В результате подпроцесса исполнителю поступает описание задачи, по выполнению которой он должен оставить комментарий о задаче. Далее с помощью отправки сообщения комментарий будет отправлен в родительский процесс и постановщик задачи сможет его прочитать.

Рассмотрим, как именно это реализовано. Начнем с родительского процесса. Он реализован в виде двух циклов: цикла запуска подпроцессов и цикла ожидания сообщений от них.

Цикл запуска подпроцессов. После заполнения блока используется сценарий для подготовки данных для цикла запусков подпроцесса: считается количество строк в блоке, обнуляется счетчик, выставляется количество ожидаемых сообщений:

1
2
3
4
context.Schetchik = 0;
context.SchetchikSoobscheniy = 0;
context.VsegoZapisey = context.Blok.Count;
context.OzhidaemoeKolichestvoSoobscheniy = context.Blok.Count;

После чего запускается сценарий для определения строки блока, которая будет передана в каждый новый запускающийся процесс, одноременно с этим идет подсчет уже запущенных экземпляров и каждой уже отправленной строке проставляется соответствующий статус:

1
2
3
4
5
6
context.Stroka="";
context.Schetchik +=1;
foreach (var item in context.Blok) {
if ((item.StatusObrabotki=="Не обработано")&&(context.Stroka=="")){
item.StatusObrabotki = "Отправлено на обработку";
context.Stroka = item.Svoystvo;}}

После отработки данных сценариев процесс переходит в цикл ожидания отработки подпроцессов. Настройка операции Отправка сообщения:

При настройке операций Отправка сообщения и Ожидание сообщения необходимо указывать Тип сообщения, который будет передаваться между процессами. Настройки типа состоит из двух свойств: название типа и входящие в него параметры. По названию типа определяется какое сообщение будет процесс отправлять (ожидать), параметры же это само тело сообщения, свойства которые будут передаваться.

В этой операции указывается переменная Родительский экземпляр, чтобы сообщение отправилось в нужный экземпляр процесса. Значение в данную переменную записывается в результате операции Подпроцесс, о чем говорилось ранее. Переменную Описание задачи передаем обратно для того, чтобы записать комментарий и отметить выполненной нужную строку блока (она служит своего рода идентификатором строки).

Окно задачи Ожидание сообщения. Настройки выглядят так же с добавлением возможности выполнения сценариев.

Первый сценарий «Условие, при котором производится обработка» срабатывает при получении сообщения, и от его результата зависит выполнение второго сценария (в нашем случае оно не нужно). «Сценарий обработки данных сообщения» выполняется при положительном (True) результате выполнения предыдущего сценария, либо его отсутствии. В нашем примере этот сценарий записывает полученный комментарий в блок задач, обновляет статус строки и ведет подсчет полученных сообщений:

1
2
3
4
foreach (var item in context.Blok) {
if (context.Stroka == item.Svoystvo)
item.StatusObrabotki="Обработано";  }
context.SchetchikSoobscheniy = context.SchetchikSoobscheniy+1;

После получения нужного количества сообщении автору приходит задача по ознакомлению с результатами выполнения поставленных задач.