Использование операции «Отправка сообщения» и «Ожидание сообщения».
Рассмотрим пример использования данных операций. Идея процесса заключается в том, что автор путем использования операции Подпроцесс ставит несколько задач на выполнение и с помощью сообщений отслеживает их выполнение. Количество задач заранее не оговорено и зависит от заполнения блока задач, т.е. автор заполняет блок и по каждой его строке запускается процесс. В конце каждого подпроцесса отправляется сообщение в родительский процесс с результатами обработки.
Карта родительского процесса:
Для одновременной постановки задач по каждой строке используется операция Внешний подпроцесс с маркером Множественное выполнение. В данной операции настроена отправка в подпроцесс строковой переменной содержащей описание задачи в таком виде, как его ввел автор (строка берется из блока при помощи сценария), и ссылка на родительский экземпляр(будет использовано в отправке сообщения).
Карта подпроцесса:
В результате подпроцесса исполнителю поступает описание задачи, по выполнению которой он должен оставить комментарий о задаче. Далее с помощью отправки сообщения комментарий будет отправлен в родительский процесс и постановщик задачи сможет его прочитать.
Рассмотрим, как именно это реализовано. Начнем с родительского процесса. Он реализован в виде двух циклов: цикла запуска подпроцессов и цикла ожидания сообщений от них.
Цикл запуска подпроцессов. После заполнения блока используется сценарий для подготовки данных для цикла запусков подпроцесса: считается количество строк в блоке, обнуляется счетчик, выставляется количество ожидаемых сообщений:
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; |
После получения нужного количества сообщении автору приходит задача по ознакомлению с результатами выполнения поставленных задач.