<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Главное не результат, главное процесс</title>
	<atom:link href="http://mainthing.ru/feed/" rel="self" type="application/rss+xml" />
	<link>https://mainthing.ru</link>
	<description>BPM-блог Анатолия Белайчука</description>
	<pubDate>Fri, 09 Feb 2024 19:27:48 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>ru</language>
			<item>
		<title>Добавьте в закладки: bpmntraining.ru/news</title>
		<link>https://mainthing.ru/ru/item/931/</link>
		<comments>https://mainthing.ru/ru/item/931/#comments</comments>
		<pubDate>Wed, 08 Mar 2023 18:42:53 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Заметки]]></category>

		<guid isPermaLink="false">https://mainthing.ru/?p=931</guid>
		<description><![CDATA[Для тех, кто жалеет, что на этом блоге стало мало публикаций: я не перестал писать, просто по ряду причин теперь чаще публикуюсь на bpmntraining.ru.
Если вам интересны мои мысли по поводу BPM/N/S, подпишитесь на новости.
]]></description>
			<content:encoded><![CDATA[<p>Для тех, кто жалеет, что на этом блоге стало мало публикаций: я не перестал писать, просто по ряду причин теперь чаще публикуюсь на bpmntraining.ru.</p>
<p>Если вам интересны мои мысли по поводу BPM/N/S, подпишитесь на <a href="https://bpmntraining.ru/feed/" target="_self">новости</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/931/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Информационные системы в BPMN: взгляд снаружи и изнутри</title>
		<link>https://mainthing.ru/ru/item/930/</link>
		<comments>https://mainthing.ru/ru/item/930/#comments</comments>
		<pubDate>Wed, 08 Mar 2023 18:40:53 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[BPMN]]></category>

		<guid isPermaLink="false">https://mainthing.ru/?p=930</guid>
		<description><![CDATA[Мой самый популярный пост на bpmntraining.ru: Информационные системы в BPMN: взгляд снаружи и изнутри.
]]></description>
			<content:encoded><![CDATA[<p>Мой самый популярный пост на bpmntraining.ru: <a href="https://bpmntraining.ru/2022/01/bpmn-automation/">Информационные системы в BPMN: взгляд снаружи и изнутри</a>.<span id="more-930"></span></p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/930/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Событие-сообщение, сигнал или условие?</title>
		<link>https://mainthing.ru/ru/item/900/</link>
		<comments>https://mainthing.ru/ru/item/900/#comments</comments>
		<pubDate>Thu, 06 Oct 2022 13:12:34 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[BPMN]]></category>

		<guid isPermaLink="false">https://mainthing.ru/?p=900</guid>
		<description><![CDATA[В своей недавней заметке Брюс Силвер поделился соображениями относительно условного события в BPMMN.
Для тех, кто недостаточно погружен в BPMN 2.0, условное событие ставит процесс на паузу до того момента, как заданное логическое условие становится истинным (точнее, меняет свое значение с &#8220;ложь&#8221; на &#8220;истина&#8221;). Сейчас на дворе октябрь, так что вот вам подходящий пример стартового события-условия:

Рис. 1. [...]]]></description>
			<content:encoded><![CDATA[<p>В своей <a href="https://methodandstyle.com/bpmns-magic-event-type/" target="_blank">недавней заметке</a> Брюс Силвер поделился соображениями относительно условного события в BPMMN.</p>
<p>Для тех, кто недостаточно погружен в BPMN 2.0, условное событие ставит процесс на паузу до того момента, как заданное логическое условие становится истинным (точнее, меняет свое значение с &#8220;ложь&#8221; на &#8220;истина&#8221;). Сейчас на дворе октябрь, так что вот вам подходящий пример стартового события-условия:</p>
<p align="center"><img class="aligncenter size-full wp-image-901" title="Fig.1" src="https://mainthing.ru/wp-content/uploads/2022/10/heating-ru.png" alt="" width="425" height="115" /></p>
<p align="center"><strong>Рис. 1. Пример стартового события-условия.</strong></p>
<p>Процесс стартует, когда указанное логическое условие становится истинным, т.е. когда зима вступает в свои права. (К слову, это реальное правило, действующее в Москве.)</p>
<p>Типичный пример промежуточного события-условия::</p>
<p align="center"><img class="aligncenter size-full wp-image-902" title="Fig.2" src="https://mainthing.ru/wp-content/uploads/2022/10/invoice-ru.png" alt="" width="443" height="105" /></p>
<p align="center"><strong>Рис. 2. Пример промежуточного события-условия.</strong></p>
<p>Процесс встает на паузу до того, как запись о выставленном счете в некоторой информационной системе оказывается помеченным как оплаченный. (Это упрощенная версия - минуточку терпения, более надежная будет рассмотрена далее.)</p>
<p>Брюс пишет, что он предпочитает не пользоваться событием-условием и исключил его из &#8220;Method and Style&#8221; - сборника лучших практик моделирования, который он создал, поддерживает и рекламирует своей знаменитой <a href="https://www.amazon.com/Bpmn-Method-Style-Implementers-Guide/dp/0982368119" target="_blank">книгой</a> (лучше книгой по BPMN, на мой взгляд).</p>
<p>При всем моем уважении к Брюсу, которого я считаю своим учителем в BPMN, у меня другое мнение на этот счет: я считаю, что для определенных достаточно распространенных сценариев межпроцессного взаимодействия это лучшее решение. (Точнее, речь пойдет о промежуточном событии-условии; стартовое событие не представляет большой ценности и далее не будет рассматриваться.)<span id="more-900"></span></p>
<p>Мы начнем сценарии моделирования процессов для целей автоматизации, а затем рассмотрим моделирование для целей регламентации.</p>
<p>Брюс аргументирует свою позицию следующим образом:</p>
<ol>
<li>Промежуточно событие-условие, базирующееся на данных процесса, в большинстве случаев избыточно, т.к. его можно заменить развилкой, что является более интуитивно-понятным и потому предпочтительным решением.</li>
<li>Чтобы от события-условия была какая-то реальная польза, оно должно базироваться на данных вне контекста процесса. Однако спецификация BPMN оставляет вопрос о механизме обращения к таким данным за рамками. Брюс интерпретирует &#8220;оставить за рамками&#8221; как некую магию, а магии в солидной методологии конечно же нет места.</li>
<li>Срабатывание события-условия можно было бы привязать к хранилищу данных потоком данных, но такую связь можно устанавливать только внутри процесса, по крайней мере в моделере Trisotech. (Брюс в течение нескольких лет продуктивно сотрудничает с этой компанией.)</li>
</ol>
<p>Я полностью согласен с первым аргументом, но довод относительно магии мне представляется сомнительным. Я считаю, что одним из <a href="https://mainthing.ru/ru/item/569/">базовых допущений BPMN</a> является то, что 1) существует некоторая информационная среда помимо собственных (транзакционных) данных процесса, 2) процессные данные каким-то образом связаны с сущностями в этой среде (например, внешними ключами БД, глобальными идентификаторами, бизнес-идентификаторами и т.п.) и 3) существует некоторый механизм доступа к этим данным (например, SQL select или вызов сервиса oData). Было бы странным разъяснять это в каждом разделе стандарта, поэтому я предпочитаю трактовать фразу в стандарте &#8220;the specification of mechanisms is out of scope of the standard&#8221; как &#8220;используйте подходящий механизм&#8221;.</p>
<p>Третий аргумент относится скорее не к логике моделирования, а к конкретному программу обеспечению. Действительно, существующие средства моделирования BPMN не очень хорошо умеют обращаться с событиями-условиями. Я бы хотел, чтобы вендоры позволили изображать потоки данных от хранилища данных к событию так, как показано на этом фрагменте, сделанном в Visio:</p>
<p align="center"><img class="aligncenter size-full wp-image-903" title="Fig.3" src="https://mainthing.ru/wp-content/uploads/2022/10/visio-ru.png" alt="" /></p>
<p align="center"><strong>Рис. 3. Событие-условие, срабатывающее по изменению данных в хранилище.</strong></p>
<p>К сожалению, пока этого нет. Весьма популярный Bizagi Modeler в принципе не позволяет соединять поток данных с событием-условием. Другой популярный инструмент bpmn.io изображает поток данных в обратном направлении:</p>
<p align="center"><img class="aligncenter size-full wp-image-904" title="Fig.4" src="https://mainthing.ru/wp-content/uploads/2022/10/drawio.png" alt="" /></p>
<p align="center"><strong>Рис. 4. Изображение события-условия в bpmn.io (ошибочное).</strong></p>
<p>К слову, моделеры BPMN к сожалению не позволяют также прикреплять потоки данных к пулам-&#8221;черным ящикам&#8221;, как на рис. 11 ниже.</p>
<p>Чем же может быть полезно промежуточное событие-условие? Рассмотрим бизнес-сценарий, схожий с тем, который использовал Брюс:</p>
<ol>
<li>Клиент присылает запрос на обслуживание.</li>
<li>Менеджер рассматривает запрос, и если он его одобряет, то создается счет, который отправляется клиенту.</li>
<li>Если в течении срока действия счета проходит платеж, процесс переходит к оказанию услуги, в противном случае завершается.</li>
<li>Теперь самое интересное: предполагается, что клиент оплачивает счет банковским переводом. Наш финансовый отдел регулярно (например, дважды в день) запускает программное обеспечение клиент-банк и получает выписку исходящих и входящих платежей - таким способом наша компаний узнает, что клиент оплатил счет.</li>
</ol>
<p>Из описания выше очевидно, что есть два процесса: один обрабатывает запрос клиента, второй - выписку банка. Эти процессы должны как-то взаимодействовать друг с другом. Рассмотрим три способа такого взаимодействия - посредством событий-сообщений, сигналов и условий, а также некоторые вариации.</p>
<h2><strong>Взаимодействие через событие-сообщение</strong></h2>
<p>Этот способ самый популярный, он же - единственный известный новичкам.</p>
<p align="center"><a href="https://mainthing.ru/wp-content/uploads/2022/10/message-ru.png"><img class="aligncenter size-full wp-image-905" title="Fig.5" src="https://mainthing.ru/wp-content/uploads/2022/10/message-ru.png" alt="" width="800" /></a></p>
<p align="center"><strong>Рис. 5. Взаимодействие через событие-сообщение.</strong></p>
<p>Надеюсь, диаграмма говорит сама за себя, за исключением задачи &#8220;Получить номер счета&#8221;. Если конечной точкой потока сообщения является промежуточное событие (как в данном случае), его надо направить не просто в процесс, изображенный на диаграмме, но в определенный экземпляр этого процесса. Для этого в BPMN используется механизм т.н. корреляции, и номер счета вполне подходит на эту роль. Вот как это работает: процесс обработки выписки банка извлекает номер счета из текущей строки выписки и посылает сообщение в экземпляр клиентского процесса, который подготовил счет с указанным номером.</p>
<p>Такой алгоритм не очень надежен, поскольку клиент мог не указать номер счета в платежном поручении, что в реальной жизни случается достаточно часто. Обычно в такой ситуации платеж можно идентифицировать по названию/ИНН плательщика и сумме платежа. Чтобы реализовать такую более продвинутую бизнес-логику, процесс обработки выписки банка должен иметь доступ к счетам, что означает межпроцессное взаимодействие через общие данные:</p>
<p align="center"><a href="https://mainthing.ru/wp-content/uploads/2022/10/signal.png"></a><a href="https://mainthing.ru/wp-content/uploads/2022/10/messagedata-ru.png"><img class="aligncenter size-medium wp-image-907" title="Fig.6" src="https://mainthing.ru/wp-content/uploads/2022/10/messagedata-ru.png" alt="" width="800" /></a></p>
<p align="center"><strong>Рис. 6. Взаимодействие через события-сообщения и общие данные.</strong></p>
<p>Хранилище данных &#8220;выставленные счета&#8221; можно реализовать, например, с помощью таблицы базы данных, содержащей все атрибуты, с помощью которых можно идентифицировать платеж (номер счета, название клиента, номер заказа, сумма счета и т.д.), а также идентификатор экземпляра процесса, который будет использоваться в качестве корреляции.</p>
<h2><strong>Взаимодействие через событие-сигнал</strong></h2>
<p align="center"><a href="https://mainthing.ru/wp-content/uploads/2022/10/signal-ru.png"><img class="aligncenter size-full wp-image-906" title="Fig.7" src="https://mainthing.ru/wp-content/uploads/2022/10/signal-ru.png" alt="" width="800" /></a></p>
<p align="center"><strong>Рис. 7. Взаимодействие через событие-сигнал (ошибочное).</strong></p>
<p>Использовать вместо сообщения сигнал - идея откровенно плохая. Приведенная выше схема сработает только если в любой момент времени платежа ожидает не более одного заказа. В противном случае сигнал, инициированный одним платежом в процессе обработки выписки, вызовет срабатывание событий-условий во всех таких экземплярах клиентского процесса.</p>
<h2><strong>Взаимодействие через событие-условие</strong></h2>
<p align="center"><a href="https://mainthing.ru/wp-content/uploads/2022/10/conditional-ru.png"><img class="aligncenter size-medium wp-image-908" title="Fig.8" src="https://mainthing.ru/wp-content/uploads/2022/10/conditional-ru.png" alt="" width="900" /></a></p>
<p align="center"><strong>Рис. 8. Взаимодействие через событие-условие.</strong></p>
<p>Центральную роль здесь играет хранилище данных &#8220;Выставленные счета&#8221;, которое может быть реализовано, например, одноименной таблицей БД.</p>
<p>После того, как заказ клиента принят и счет подготовлен, в этой таблице создается новая запись, содержащая такие данные, как номер счета, наименование клиента, номер заказа, сумма заказа плюс атрибут &#8220;статус&#8221;. Событие-условие далее по потоку следит за значением этого атрибута - как только оно становится &#8220;оплачено&#8221;, процесс идет дальше к предоставлению услуги.</p>
<p>Процесс обработки выписки банка использует эту таблицу чтобы идентифицировать платеж и, в случае успеха, чтобы присвоить атрибуту статус значение &#8220;оплачено&#8221;, что вызовет срабатывание триггера во клиентском процессе.</p>
<p>На первый взгляд, диаграмма на рис. 8 ничем не лучше диаграммы на рис. 6. Чтобы почувствовать разницу, надо рассмотреть более реалистичный сценарий. Предположим, что наша компания ведет бизнес по нескольким направлениям, каждый из которых связан с продажей собственных товаров и услуг в рамках собственного, специфического бизнес-процесса. В этом случае процессу обработки выписки банка придется определять в какой именно процесс следует отправлять сообщение, уведомляющее о платеже:</p>
<p align="center"><a href="https://mainthing.ru/wp-content/uploads/2022/10/mult-ru.png"><img class="aligncenter size-medium wp-image-909" title="Fig.9" src="https://mainthing.ru/wp-content/uploads/2022/10/mult-ru.png" alt="" width="600" /></a></p>
<p align="center"><strong>Fig. 9. Multiple messages.</strong></p>
<p>С архитектурной точки зрения это не очень хорошо: какое вообще дело процессу обработки выписки банка до того, как устроен процесс обработки клиентского заказа? Если в какой-то момент у нас появится еще одно бизнес-направление, придется вносить правки в процесс обработки выписки?</p>
<p>Это фундаментальная проблема сообщений в BPMN: они приводят к тесно связанным диаграммам. Вы не можете просто отправить сообщение - вы должны показать в какой процесс и в какой элемента процесса оно должно попасть.</p>
<p>События-сигналы и условия, напротив, приводят к слабо связанным схемам: взаимодействующие процессы не обязаны знать даже о существовании друг друга, не говоря о внутреннем устройстве. В случае сигнала они соединяются по имени сигнала, а в случае события-условия взаимодействующим процессам нужно знать только структур данных, играющих роль интерфейса.</p>
<p align="center"><a href="https://mainthing.ru/wp-content/uploads/2022/10/server-ru.png"><img class="aligncenter size-medium wp-image-910" title="Fig.10" src="https://mainthing.ru/wp-content/uploads/2022/10/server-ru.png" alt="" width="800" /></a></p>
<p align="center"><strong>Рис. 10. Сторона-инициатор взаимодействия.</strong></p>
<p align="center"><a href="https://mainthing.ru/wp-content/uploads/2022/10/client-ru.png"><img class="aligncenter size-medium wp-image-911" title="Fig.11" src="https://mainthing.ru/wp-content/uploads/2022/10/client-ru.png" alt="" width="600" /></a></p>
<p align="center"><strong>Рис. 11. Сторона-обработчик.</strong></p>
<p>Мы можем развить этот пример дальше, так что у нас появится не только несколько процессов-обработчиков, но и несколько процессов-инициаторов. Это произойдет, если мы дополним платеж банковским переводом альтернативными методами. Такое расширение задачи не приведет к усложнению - хранилище данных останется единственной точкой взаимодействия, о которой надо знать каждому из процессов.</p>
<h2>Неисполняемые модели</h2>
<p>До сих пор мы говорили об исполняемых моделях, т.е. обрабатываемых процессным движком.</p>
<p>Относительно неисполняемых моделей Брюс замечает, что для них данные процесса не определены. А поскольку событие-условие по определению имеет дело с данными, в таких моделях его стоит избегать.</p>
<p>Я поддерживаю эту рекомендацию, хотя и по другой причине: я в принципе предпочитаю не использовать в неисполняемых моделях события, за исключением простого и таймера. Исполнитель-человек либо не понимает что конкретно он должен делать, встретив на диаграмме, например, сигнал, либо трактует события на диаграмме неверно (обычное дело с событиями-сообщениями).</p>
<p>Я раньше <a href="https://mainthing.ru/ru/item/840/">уже объяснял</a>, что событие-условие можно реализовать комбинацией развилки и таймера. Вот как это может выглядеть:</p>
<p style="text-align: center;"><a href="https://mainthing.ru/wp-content/uploads/2022/10/analytical-ru.png"><img class="aligncenter size-full wp-image-912" title="Fig.12" src="https://mainthing.ru/wp-content/uploads/2022/10/analytical-ru.png" alt="" width="900" /></a></p>
<p align="center"><strong>Рис. 12. Неисполняемая модель: событие-условие заменено задачей, развилкой и таймером.</strong></p>
<p>Хранилище данных &#8220;счета выставленные&#8221; можно реализовать множеством способов, начиная с SAP и заканчивая сетевым Excel и канбан-доской.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-913" title="Fig.13" src="https://mainthing.ru/wp-content/uploads/2022/10/kanban.jpg" alt="" width="500" height="333" /></p>
<p style="text-align: center;"><strong>Рис. 13. Пример канбан-доски.</strong></p>
<h2><strong>Выводы</strong></h2>
<ol>
<li>Моделировать межпроцессное взаимодействие предпочтительно через событие-условие, а не сообщения, поскольку это приводит к слабосвязную архитектуру.</li>
<li>Производителям программного обеспечения BPMN надо разрешить соединять потоками данных хранилища данных (и объекты данных) с событиями-условиям, чтобы показать какие данные вызывают срабатывание события.</li>
</ol>
<p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/900/feed/</wfw:commentRss>
		</item>
		<item>
		<title>(English) BPMN None intermediate - throw or catch?</title>
		<link>https://mainthing.ru/ru/item/898/</link>
		<comments>https://mainthing.ru/ru/item/898/#comments</comments>
		<pubDate>Tue, 06 Sep 2022 14:08:25 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[BPMN]]></category>

		<guid isPermaLink="false">https://mainthing.ru/?p=898</guid>
		<description><![CDATA[Этот контент доступен на языках: English.
]]></description>
			<content:encoded><![CDATA[<p>Этот контент доступен на языках: <a href="/feed/">English</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/898/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Второе пришествие BPM</title>
		<link>https://mainthing.ru/ru/item/895/</link>
		<comments>https://mainthing.ru/ru/item/895/#comments</comments>
		<pubDate>Thu, 15 Mar 2018 18:55:38 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[BPMS]]></category>

		<category><![CDATA[Low-code]]></category>

		<guid isPermaLink="false">http://mainthing.ru/item/895/</guid>
		<description><![CDATA[Современная концепция BPM сформировалась в 2003‒2004 гг. как органичное сочетание процессной методологии (связь со стратегией, ценность для клиента, кросс-функциональность), технологий (графическое моделирование, исполнение движком, мониторинг и аналитика) и подхода к реализации (непрерывное усовершенствование, аджайл, тесное взаимодействие бизнеса и ИТ). Идеи витали в воздухе — было ясно, что реинжиниринг не вполне оправдал возлагавшиеся на него надежды, [...]]]></description>
			<content:encoded><![CDATA[<p>Современная концепция BPM сформировалась в 2003‒2004 гг. как органичное сочетание процессной методологии (связь со стратегией, ценность для клиента, кросс-функциональность), технологий (графическое моделирование, исполнение движком, мониторинг и аналитика) и подхода к реализации (непрерывное усовершенствование, аджайл, тесное взаимодействие бизнеса и ИТ). Идеи витали в воздухе — было ясно, что реинжиниринг не вполне оправдал возлагавшиеся на него надежды, и концепция была поддержана практически единодушно как консультантами по управлению, так и ИТ-компаниями.</p>
<p>В результате сформировался класс программного обеспечения BPMS — эта аббревиатура изначально расшифровывалась как Business Process Management System, затем, с легкой руки Gartner, System превратилась в Suite. На рынке BPMS представлены как «гранды» (IBM, Oracle, SAP, Software AG), так и десятки компаний ‒ узких специалистов (pure-play vendors). Появление программных продуктов Open Source стало свидетельством зрелости рынка.</p>
<p>На фоне общей поддержки концепции BPM аналитики обещали двузначные цифры роста рынка. Если суммировать их предсказания за прошедшие годы, то рынок BPM должен был бы быть в стратосфере, но в реальности мы этого не наблюдаем. В соответствии с моделью жизненного цикла инноваций Джеффри Мура, BPM забуксовал на переходе от завоевания поддержки компаний-энтузиастов к получению признания большинства.</p>
<p style="text-align: center;"><img title="Пропасть Мура" src="http://mainthing.ru/wp-content/uploads/2018/03/28adb171e1e2c9d3d7f8a1d66973df31-600x267.jpg" alt="" /></p>
<p>Рынок BPM систематически отставал от прогнозов, а предложения вендоров превышало спрос. С этим надо было что-то делать — такое положение дел не могло устроить ни вендоров, вложившихся в разработку, ни аналитические агентства, чьи прогнозы оказались под вопросом.</p>
<p>Может быть, ошибочной была сама концепция BPM? Для сравнения: за 10 лет увлечения реинжинирингом было накоплено достаточно опыта применения, чтобы выявить и сильные, и слабые его стороны. BPM же практикуется уже почти 15 лет, но каких-то существенных изъянов в нем не обнаружилось и новой процессной парадигмы за это время не предложено.</p>
<p>Если только не считать таковой концепцию кейс-менеджмента (ACM, Adaptive Case Management).</p>
<h2>Процессы для клерков и для креативных сотрудников: ACM</h2>
<p>Приверженцы этой концепции заявили, что на смену клеркам, выполняющим механическую работу по утвержденным регламентам, в современном мире пришли креативные работники умственного труда (knowledge workers), которым нужны не традиционные жестко определенные процессы, а более гибкие и динамичные формы работы — кейсы.</p>
<p>Ничего особенно нового в кейсах нет: когда в организацию приходит письмо и начальник «расписывает» его замам, а те, в свою очередь, ставят задачи подчиненным — это и есть кейс, т. е. просто «дело» на русском канцелярском. Или когда пользователь пишет заявку в техподдержку вида «не печатается отчет» — это ведь может означать что угодно, от закончившегося картриджа в принтере до планового обновления SAP. На верхнем уровне можно представить работу над заявкой в виде процесса — ввести первую и вторую линию техподдержки, определить нормативные сроки и SLA — но сами действия по устранению проблемы будут планироваться на ходу. Про кейс говорят, что он «развертывается во времени» — вы не можете заранее определить все, с чем столкнетесь, поэтому планируете только первый шаг, а по его результатам смотрите, что делать дальше.</p>
<p>В чем-то сторонники ACM были правы: на тот момент все больше производств и стандартных услуг выводилось на аутсорсинг в страны с дешевой рабочей силой, а в Штатах оставались управление, разработка, маркетинг и продвижение, т. е. в основном творческая работа. Поэтому при взгляде из США могло сложиться впечатление, что традиционные процессы уже неактуальны. Но если взглянуть шире, становится понятно, что рутинная работа переместилась географически, но не исчезла.</p>
<p>В реальной жизни есть место работе и по шаблону, и творческой, они комбинируются и сочетаются друг с другом. В конечном счете и процессы, и кейсы порождают задачи, управляемые одинаково: у каждой задачи есть исполнитель, контрольный срок, контекст в виде данных и документов. Различается только способ появления задач: в одном случае они порождаются автоматически согласно схеме процесса, в другом исполнитель сам решает, что делать дальше и кому надо делегировать подзадачи.</p>
<p>В условиях, когда между традиционными потоками работ и кейсами нет непроницаемого барьера, отдельные средства для управления только кейсами оказались невостребованными. В итоге производители BPMS включили поддержку кейсов в свои продукты, и бизнес-процесс стал трактоваться расширительно — это и работа, выполняемая по шаблону, и планируемая «на лету». Отдельная ниша для систем ACM не сложилась.</p>
<h2>В поисках правильного лейбла: iBPMS &amp; Low-code</h2>
<p>Если товар под старым лейблом продается плохо, а нового нет — надо обновить лейбл. В начале 2010-х Джим Сайнур из Gartner предложил новую аббревиатуру: Intelligent BPMS. По сути, речь шла о том, что современные BPMS обязаны были соответствовать общим ИТ-трендам, наметившимся к этому моменту: SMAC — Social, Mobile, Analytics, Cloud, т. е. поддержка социального взаимодействия, доступ с мобильного устройства, «облака», «продвинутая аналитика» (с последней ясности было меньше).</p>
<p>Вендоры, бывшие в числе «любимчиков» Gartner, с энтузиазмом поддержали это движение (кто сказал «сговор»?!), но надо признать, что такого единодушного признания, как исходная концепция BPMS, новинка не получила, и рейтинги iBPMS выпускает только Gartner. Хотя по факту все те BPM-вендоры, которые продолжали активно развивать свои продукты, добавили в них и мобильность, и «облака», и поддержку социального взаимодействия, и функциональность кейс-менеджмента.</p>
<p>Через несколько лет компания Forrester, вечный конкурент Gartner, предложила новый лейбл: Low-code, или системы с минимальным кодированием.</p>
<p>Ключевых идей в этой концепции можно выделить две: во-первых, центр тяжести усилий по разработке процессных бизнес-приложений переносится с программистов на аналитиков. Действительно, BPMS-системы, ориентированные на программистов, плохо соответствуют методологии BPM и из-за этого демонстрируют ограниченный успех. С точки зрения бизнеса это выглядит как всего лишь еще одна ИТ-система: раньше процессы кодировали в АБС или ERP, теперь в BPMS — что изменилось-то? (Тем более что АБС и ERP никуда не делись.) Чтобы BPM дал эффект, должен измениться стиль взаимодействия между бизнесом и ИТ, старая модель «бизнес пишет ТЗ и перебрасывает его через стену в ИТ-отдел» должна смениться аджайлом с его быстрыми итерациями и тесной вовлеченностью бизнеса в проектирование бизнес-процессов.</p>
<p>Чтобы этого добиться, нужно минимизировать объем кодирования, максимально использовав программирование от графических моделей и сделав среду разработки максимально дружественной по отношению к «гражданским» разработчикам. Другими словами, это должен быть не Eclipse, java и XML, а разработка от диаграммы BPMN, простой и удобный редактор форм, и желательно, чтобы все это было реализовано в браузере.</p>
<p>Во-вторых, системы Low-code не зациклены на процессах, ведь при всей важности процессной логики, корпоративные приложения состоят не только из нее. Сложилась странная ситуация: в любой системе BPMS есть средства проектирования базы данных и редакторы экранных форм, но воспользоваться ими, чтобы разработать традиционное приложение для ведения банального учета, например, нельзя — вы должны все делать через бизнес-процессы. Это нелогично, и в системах Low-code это ограничение снято.</p>
<p>При этом использование реляционных баз данных здесь нецелесообразно, ведь скорость внесения изменений — не самая их сильная сторона. Например, в графовой базе добавить атрибут можно мгновенно, без реконфигурирования. Также графовая база умеет отвечать на запросы вида «покажи все процессы и задачи, связанные с данным бизнес-объектом — машиной, клиентом, товаром&#8230;».</p>
<p>Еще одна особенность систем Low-code, отличающая их и от традиционных корпоративных систем, и от BPMS: в качестве пользователя здесь рассматриваются не только внутренние (сотрудники компании), но и внешние (клиенты, поставщики, партнеры). Это радикально меняет требования к визуальной привлекательности и эргономике пользовательского интерфейса.</p>
<p style="text-align: center;"><img title="BPMS, iBPMS, Low-code" src="http://mainthing.ru/wp-content/uploads/2018/03/f4d5c4cad3669a76fde5a19e5fd4eab3-600x294.jpg" alt="" /></p>
<p>Идея минимального кодирования не нова — SQL в свое время создавался под этим же флагом: иметь возможность обращаться к БД без программирования, на языке, максимально близком к естественному человеческому. Также можно вспомнить аббревиатуру RAD — Rapid Application Development. Так что системы Low-code продолжают давнюю традицию.</p>
<p>Идея Low-code оказалась удачной — ее хорошо восприняли и заказчики, и вендоры. Кое-кто пошел дальше, заявив о Zero-code или No-code, но это больше похоже на маркетинговый шум, чем на работающую технологию.</p>
<h2>BPM и цифровая трансформация</h2>
<p>Концепция BPM- и BPM-систем, предложенная без малого 15 лет назад, выдержала проверку временем. Но проблема тех, кто ее предложил и развивал тогда, в том, что они «бежали впереди паровоза» — пусть концепция у вас правильная, но большого спроса на нее не будет, пока есть более простые способы повышения эффективности бизнеса, начиная с банального сокращения персонала и наведения порядка в управленческом учете.</p>
<p>Только в последние два года ситуация для энтузиастов BPM стала меняться в лучшую сторону. Связано это с повсеместным острым интересом бизнеса к цифровой трансформации. Происходит что-то невообразимое: мы привыкли к тому, что ИТ-отрасль предлагает бизнесу свои игрушки, а он от них большей частью отмахивается, а сейчас требования бизнеса к ИТ зачастую опережают предложение.</p>
<p>Человек, однажды воспользовавшийся услугами Яндекс-такси или сервисом Google docs, уже не будет прежним. И когда он приходит к себе на работу, у него возникают вопросы: «Какого черта?! Почему в туалете почти неделю течет кран, а моя бумажная заявка ходит неизвестно где? Почему я не могу сфотографировать на смартфон, отправить заявку одной кнопкой так же, как я одной кнопкой вызываю такси, и на смартфон же получить отчет о том, что кран починен или заменен?» (Кстати, это реальный кейс.)</p>
<p>Или логистическая компания объявляет программу цифровой трансформации, заявив в качестве цели: наш клиент — это человек со смартфоном. В идеале мы должны сделать так, чтобы он мог воспользоваться нашим сервисом, не отрываясь от дивана. (Сейчас у компании в офисе — ряды окошек, в которые экспедиторы должны подавать бумажные документы.)</p>
<p>Цифровые клиенты, цифровые услуги — все начинают думать, а многие — уже и действовать в этом направлении. А вторым шагом приходит понимание, что необходимое условие — цифровые бизнес-процессы: пусть вы построили цифровой «фасад» вашего бизнеса, но если в итоге все попадает в бэк-офис, где люди работают по старинке в соответствии с письменными регламентами, то ничего не будет. И естественным образом возникает интерес к цифровым бизнес-процессам, т. е. ко всем тем наработкам, которые BPM предложил еще 15 лет назад и с тех пор последовательно развивал.</p>
<p>Таким образом, сегодня можно говорить о «втором пришествии» BPM — второй волне интереса к процессной методологии и информационным технологиям, поддерживаемым стремлением современного бизнеса к цифровизации своих операций.</p>
<p>Для специалистов по BPM это означает две новости. Первая— хорошая: много новых процессов! Новые исполнители — софтверные боты, роботы-ассистенты, роботизированная техника&#8230; Новые модели предоставления услуг, с максимальным переносом в онлайн.</p>
<p>Вторая новость — очень хорошая: это надолго! Речь ведь не идет о том, чтобы заменить старые «аналоговые» бизнес-процессы на новые «цифровые» и на этом успокоиться — прогресс в области цифровизации ускоряется! Вчера это были приложения на смартфонах и «облака», сегодня — элементы искусственного интеллекта, чат-боты, интернет вещей, завтра — беспилотный транспорт и самые разнообразные роботы. Все это потребует массовой и быстрой перестройки бизнес-процессов, а значит, спрос на компетенции и информационные технологии BPM будет продолжать расти.</p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/895/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Межпроцессное взаимодействие с помощью события-условия</title>
		<link>https://mainthing.ru/ru/item/890/</link>
		<comments>https://mainthing.ru/ru/item/890/#comments</comments>
		<pubDate>Wed, 31 Jan 2018 19:17:48 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[Bizagi]]></category>

		<category><![CDATA[BPMN]]></category>

		<category><![CDATA[pattern]]></category>

		<guid isPermaLink="false">http://mainthing.ru/?p=890</guid>
		<description><![CDATA[Как я неоднократно писал в этом блоге, зачастую то, что называет бизнес-процессом бизнес, в терминах BPMN моделируются не одним, а несколькими пулами. См. например процессный паттерн &#8220;внутренний заказ&#8221; или &#8220;обработка входящих&#8221;. И там, и там процесс-&#8221;клиент&#8221; оставляет задание в базе данных и переходит в ожидание сообщения от процесса-&#8221;сервера&#8221;, что задание выполнено.
Схема рабочая, но у нее [...]]]></description>
			<content:encoded><![CDATA[<p>Как я неоднократно писал в этом блоге, зачастую то, что называет бизнес-процессом бизнес, в терминах BPMN моделируются не одним, а несколькими пулами. См. например процессный паттерн <a href="http://mainthing.ru/ru/item/150/">&#8220;внутренний заказ&#8221;</a> или <a href="http://mainthing.ru/ru/item/482/">&#8220;обработка входящих&#8221;</a>. И там, и там процесс-&#8221;клиент&#8221; оставляет задание в базе данных и переходит в ожидание сообщения от процесса-&#8221;сервера&#8221;, что задание выполнено.</p>
<p>Схема рабочая, но у нее есть недостаток: сервер здесь должен знать клиента, что называется, &#8220;в лицо&#8221; - в схему процесса-сервера зашивается отправка сообщения в процесс-клиент. Если сервер обслуживает всего одного клиента, то это нормально, но если это не так?<span id="more-890"></span></p>
<p>Рассмотрим следующий пример: процесс продажи выставляет счет клиенту и ждет, что процесс обработки выписки банка, запускаемый периодически (например, ежедневно), успешно идентифицировав очередной платеж, сообщит, что счет оплачен -</p>
<p><img src="http://mainthing.ru/wp-content/uploads/2018/01/message.png" alt="" /></p>
<p>Теперь усложним задачу: пусть у нас не один, а несколько процессов продажи: продажа товаров, продажа услуг, продажа VIP-клиентам, продажа через партнеров и т.д., причем зафиксировать число таких шаблонов не представляется возможным. Куда в этом случае должен отправлять сообщение процесс обработки платежей?</p>
<p>Решение: вместо сообщения воспользоваться условным событием -</p>
<p><img src="http://mainthing.ru/wp-content/uploads/2018/01/conditional.png" alt="" /></p>
<ol>
<li>Процесс-клиент (Продажа) записывает задачу в базу данных и переходит к ожиданию изменения статуса задачи (статус счета = оплачено).</li>
<li>Процесс-сервер (Входящие платежи) меняет статус оплаты.</li>
<li>Процесс-клиент просыпается и идет дальше.</li>
</ol>
<p>В этой схеме ни клиент, ни сервер не знают схем друг друга, взаимодействую только через общие данные (счет в рассматриваемом примере). Это означает, что разработчик волен менять схему одного процесса, и это никак не отразится на другом. Или добавить новый шаблон процесса-клиента. Или процесса-сервера.</p>
<p>Отдельный вопрос - поддерживает ли событие-условие ваша конкретная BPMS?</p>
<p>Хорошая новость для пользователей Bizagi: в палитре Bizagi BPM Suite событие-условие появилось и схема типа приведенной выше работает - проверено.</p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/890/feed/</wfw:commentRss>
		</item>
		<item>
		<title>(English) Why BPM Lags Behind</title>
		<link>https://mainthing.ru/ru/item/888/</link>
		<comments>https://mainthing.ru/ru/item/888/#comments</comments>
		<pubDate>Mon, 31 Jul 2017 12:58:14 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[BPM]]></category>

		<guid isPermaLink="false">http://mainthing.ru/?p=888</guid>
		<description><![CDATA[Этот контент доступен на языках: English.
]]></description>
			<content:encoded><![CDATA[<p>Этот контент доступен на языках: <a href="/feed/">English</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/888/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Необходимые и избыточные элементы BPMN: события</title>
		<link>https://mainthing.ru/ru/item/840/</link>
		<comments>https://mainthing.ru/ru/item/840/#comments</comments>
		<pubDate>Fri, 07 Apr 2017 14:58:58 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[BPMN]]></category>

		<guid isPermaLink="false">http://mainthing.ru/?p=840</guid>
		<description><![CDATA[В прошлой заметке мы выяснили, что при всем многообразии развилок в BPMN, строго необходимыми являются две из пяти: &#8220;или/или&#8221; и &#8220;и&#8221;.
Перейдем к событиям. События в BPMN классифицируются по типу (13 вариантов) и по месту (8 вариантов). Рассмотрим классификацию по типам:
1. Простое событие

Строго говоря, начальные и конечные события необходимыми не являются – так, приведенная ниже диаграмма [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mainthing.ru/ru/item/813/">В прошлой заметке</a> мы выяснили, что при всем многообразии развилок в BPMN, строго необходимыми являются две из пяти: &#8220;или/или&#8221; и &#8220;и&#8221;.</p>
<p>Перейдем к событиям. События в BPMN классифицируются по типу (13 вариантов) и по месту (8 вариантов). Рассмотрим классификацию по типам:</p>
<p><strong><img class="alignnone size-full wp-image-833" title="none event" src="http://mainthing.ru/wp-content/uploads/2017/04/none.png" alt="" width="225" height="42" />1. Простое событие</strong></p>
<p><span id="more-840"></span></p>
<p>Строго говоря, начальные и конечные события необходимыми не являются – так, приведенная ниже диаграмма формально корректна: здесь Task 1 – неявное начало (т.к. нет ни одной входящей стрелки), Task 2 – неявный конец процесса (нет ни одной исходящей).</p>
<p><img class="alignnone size-full wp-image-853" title="e-implicit" src="http://mainthing.ru/wp-content/uploads/2017/04/e-implicit.png" alt="" width="251" height="71" /></p>
<p>Но такая диаграмма выглядит незаконченной, и хочется спросить у ее автора: это так специально сделано или работа не доведена до конца? Поэтому хороший стиль предписывает всегда явно обозначать начало и конец процесса.</p>
<p>Что касается простого промежуточного события, то оно обозначает промежуточный этап, веху, milestone. Вещь пусть и не необходимая, но интуитивно понятная и полезная.</p>
<p><strong><img class="alignnone size-full wp-image-834" title="link" src="http://mainthing.ru/wp-content/uploads/2017/04/link.png" alt="" width="225" height="40" />2. Событие-ссылка</strong></p>
<p>Если вам понадобилось событие-ссылка, то скорее всего, вам пора прибегнуть к структурной декомпозиции – проще говоря, начать выделять подпроцессы. Я бы рекомендовал обходиться без этого события.</p>
<p><strong><img class="alignnone size-full wp-image-835" title="timer" src="http://mainthing.ru/wp-content/uploads/2017/04/timer.png" alt="" width="225" height="39" />3. Событие-таймер</strong></p>
<p>Полезен, интуитивно понятен, часто используется на практике.</p>
<p><strong><img class="alignnone size-full wp-image-836" title="condition" src="http://mainthing.ru/wp-content/uploads/2017/04/condition.png" alt="" width="225" height="38" />4. Событие-условие</strong></p>
<p>В некоторых сценариях событие-условие бывает полезно, но оно интуитивно неочевидно. Одна из сильных сторон BPMN – то, что эта нотация, при экономном использовании, позволяет создавать процессные диаграммы, понятные даже неподготовленным пользователям, не прошедшим обучение. Решили прибегнуть к событию-условию – забудьте про интуитивную понятность.</p>
<p>Вторая проблема условия – большинство движков это событие не поддерживает. (Я пока не видел ни одного движка, умеющего работать с событием-условием.)</p>
<p>Но все не так плохо: событие-условие можно заменить комбинацией таймера и развилки или/или –</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-854" title="e-cond11" src="http://mainthing.ru/wp-content/uploads/2017/04/e-cond11.png" alt="" width="64" height="40" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-855" title="e-cond12" src="http://mainthing.ru/wp-content/uploads/2017/04/e-cond12.png" alt="" width="122" height="128" /></td>
</tr>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-856" title="e-cond21" src="http://mainthing.ru/wp-content/uploads/2017/04/e-cond21.png" alt="" width="101" height="39" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-857" title="e-cond22" src="http://mainthing.ru/wp-content/uploads/2017/04/e-cond22.png" alt="" width="166" height="135" /></td>
</tr>
</tbody>
</table>
<p>Потенциальные недостатки такой замены – лишняя нагрузка на движок и замусоривание журнала беготней по кругу.</p>
<p><strong><img class="alignnone size-full wp-image-837" title="message" src="http://mainthing.ru/wp-content/uploads/2017/04/message.png" alt="" width="225" height="39" />5. Событие-сообщение</strong></p>
<p>Основной, наряду с обменом данными, механизм межпроцессного взаимодействия. Берем.</p>
<p><strong><img class="alignnone size-full wp-image-838" title="signal" src="http://mainthing.ru/wp-content/uploads/2017/04/signal.png" alt="" width="225" height="38" />6. Событие-сигнал</strong></p>
<p>Сигнал принципиально отличается от сообщения двумя аспектами. Во-первых, сообщение – это коммуникации по схеме «точка-точка», сигнал – «публикация и подписка». Если вам необходимо связать отправителя с множеством получателей, в качестве альтернативы сигналу можете использовать сообщения – событие-сообщение на стороне получателя и задачу-сообщение на стороне отправителя, в цикле по объектам:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-859" title="e-signal1" src="http://mainthing.ru/wp-content/uploads/2017/04/e-signal1.png" alt="" width="256" height="268" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-860" title="e-message1" src="http://mainthing.ru/wp-content/uploads/2017/04/e-message1.png" alt="" width="257" height="262" /></td>
</tr>
</tbody>
</table>
<p>Во-вторых, сообщение – это сильное связывание, сигнал – слабое. Например, если вы хотите из процесса A запустить процесс B через отправку сообщения, то вы не можете это сделать, ограничив поле зрения только процессом A – у вас должна быть схема процесса B:</p>
<p><img class="alignnone size-full wp-image-862" title="e-message2" src="http://mainthing.ru/wp-content/uploads/2017/04/e-message2.png" alt="" width="258" height="244" /></p>
<p>С сигналом проще – вы можете разрабатывать схемы процессов A и B независимо – все, что им надо знать друг о друге – это имя сигнала и, опционально, формат данных («полезной нагрузки»):</p>
<p><img class="alignnone size-full wp-image-861" title="e-signal2" src="http://mainthing.ru/wp-content/uploads/2017/04/e-signal2.png" alt="" width="257" height="231" /></p>
<p>Если вы имеете дело со сложной системой процессов, то это свойство сигнала становится очень ценным – вам наверняка захочется работать над схемой одного процесса, не оглядываясь на то, готов ли уже другой. Впрочем и в этом случае можно обойтись без сигналов:</p>
<p><img class="alignnone size-full wp-image-858" title="e-flag2" src="http://mainthing.ru/wp-content/uploads/2017/04/e-flag2.png" alt="" width="406" height="342" /></p>
<p>Здесь процесс A выставляет флаг в хранилище данных, а процесс B периодически его проверяет. Если флаг не выставлен, B заканчивается, в противном случае он сбрасывает флаг и переходит к основной своей работе.</p>
<p><strong><img class="alignnone size-full wp-image-839" title="terminator" src="http://mainthing.ru/wp-content/uploads/2017/04/terminator.png" alt="" width="225" height="38" />7. Событие-останов</strong></p>
<p><img class="alignnone size-full wp-image-841" style="font-weight: bold;" title="error" src="http://mainthing.ru/wp-content/uploads/2017/04/error.png" alt="" width="225" height="39" /><span style="font-weight: bold;">8. Событие-ошибка</span></p>
<p><img class="alignnone size-full wp-image-842" style="font-weight: bold;" title="escalation" src="http://mainthing.ru/wp-content/uploads/2017/04/escalation.png" alt="" width="225" height="38" /><span style="font-weight: bold;">9. Событие-эскалация</span></p>
<p>Эти три события более-менее взаимозаменяемы:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-863" title="e-error" src="http://mainthing.ru/wp-content/uploads/2017/04/e-error.png" alt="" width="295" height="298" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-867" title="e-noerror" src="http://mainthing.ru/wp-content/uploads/2017/04/e-noerror.png" alt="" width="360" height="200" /></td>
</tr>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-865" title="e-terminate" src="http://mainthing.ru/wp-content/uploads/2017/04/e-terminate.png" alt="" width="289" height="140" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-866" title="e-noterminate" src="http://mainthing.ru/wp-content/uploads/2017/04/e-noterminate.png" alt="" width="334" height="159" /></td>
</tr>
</tbody>
</table>
<p>Ценная особенность эскалации – при помощи промежуточного события-инициатора и непрерывающего обработчика можно породить новый токен и запустить асинхронный поток управления в процессе/подпроцессе верхнего уровня:</p>
<p><img class="alignnone size-full wp-image-868" title="e-escalate" src="http://mainthing.ru/wp-content/uploads/2017/04/e-escalate.png" alt="" width="385" height="232" /></p>
<p><strong><img class="alignnone size-full wp-image-843" style="font-weight: bold;" title="multiple" src="http://mainthing.ru/wp-content/uploads/2017/04/multiple.png" alt="" width="225" height="40" />10. Множественное событие</strong></p>
<p>Без этого события можно обойтись достаточно легко.</p>
<p>Обработчик:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-869" title="e-mult-start1" src="http://mainthing.ru/wp-content/uploads/2017/04/e-mult-start1.png" alt="" width="63" height="38" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-870" title="e-mult-start2" src="http://mainthing.ru/wp-content/uploads/2017/04/e-mult-start2.png" alt="" width="123" height="139" /></td>
</tr>
</tbody>
</table>
<p>Инициатор:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-871" title="e-mult-end1" src="http://mainthing.ru/wp-content/uploads/2017/04/e-mult-end1.png" alt="" width="56" height="39" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-872" title="e-mult-end2" src="http://mainthing.ru/wp-content/uploads/2017/04/e-mult-end2.png" alt="" width="122" height="114" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-873" title="e-mult-end3" src="http://mainthing.ru/wp-content/uploads/2017/04/e-mult-end3.png" alt="" width="114" height="41" /></td>
</tr>
</tbody>
</table>
<p><strong><img class="alignnone size-full wp-image-844" title="parallel" src="http://mainthing.ru/wp-content/uploads/2017/04/parallel.png" alt="" width="225" height="38" />11. Параллельное множественное событие</strong></p>
<p>Если событий два, то заменить параллельное множественное событие достаточно легко:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-874" title="e-para1" src="http://mainthing.ru/wp-content/uploads/2017/04/e-para1.png" alt="" width="59" height="37" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-875" title="e-para2" src="http://mainthing.ru/wp-content/uploads/2017/04/e-para2.png" alt="" width="149" height="122" /></td>
</tr>
</tbody>
</table>
<p>Если событий много, то получаем комбинаторный взрыв, и заменить параллельное множественное событие такой техникой становится проблематично. Но мне и два события ни разу не понадобились на практике, а уж больше… А если бы понадобилось, использовал бы CEP (Complex Event Processing), а не BPMN.</p>
<p><strong><img class="alignnone size-full wp-image-845" title="cancel" src="http://mainthing.ru/wp-content/uploads/2017/04/cancel.png" alt="" width="225" height="40" />12. Событие-отмена</strong></p>
<p><strong><img class="alignnone size-full wp-image-846" title="compensation" src="http://mainthing.ru/wp-content/uploads/2017/04/compensation.png" alt="" width="225" height="40" />13. Событие-компенсация</strong></p>
<p>События отмены, компенсации, транзакционные подпроцессы и задачи-компенсации крайне полезны в сценарии «все или ничего». Пример: я отправляюсь в командировку, и в порядке подготовки мне надо 1) получить согласие от организаторов выступить с докладом, 2) забронировать авиабилеты, 3) забронировать гостиницу, 4) получить согласие компании оплатить расходы. Все эти действия целесообразно выполнять в параллель – иначе можно не успеть. При этом каждое действие может закончиться неудачей, и в этом случае возникает нетривиальная задача выполнения компенсирующих действий – если организаторы не приняли доклад, а билеты забронированы, то надо сделать возврат билетов и т.п.</p>
<p>Механизм транзакционных подпроцессов и компенсаций позволяет элегантно решать такие задачи. Но встречаются такие сценарии нечасто, а в обычной жизни про транзакции, компенсации и отмены можно забыть.</p>
<p><strong>Резюме</strong></p>
<p>Из 13 типов событий -</p>
<ul>
<li>необходимых 4: простое, таймер, сообщение, останов</li>
<li>полезных 2: сигнал, ошибка</li>
<li>для специальных случаев 4: условие, эскалация, отмена, компенсация</li>
<li>практически бесполезных 3: ссылка, множественное, параллельное множественное</li>
</ul>
<p>Теперь рассмотрим классификацию событий по месту. На примере сообщения:</p>
<p><strong><img class="alignnone size-full wp-image-876" title="m1" src="http://mainthing.ru/wp-content/uploads/2017/04/m1.png" alt="" width="37" height="37" />1. Начальное событие</strong></p>
<p><strong><img class="alignnone size-full wp-image-877" title="m2" src="http://mainthing.ru/wp-content/uploads/2017/04/m2.png" alt="" width="37" height="39" />2. Конечное событие</strong></p>
<p><strong><img class="alignnone size-full wp-image-878" title="m3" src="http://mainthing.ru/wp-content/uploads/2017/04/m3.png" alt="" width="37" height="37" />3. Промежуточное событие-инициатор</strong></p>
<p><strong><img class="alignnone size-full wp-image-879" title="m4" src="http://mainthing.ru/wp-content/uploads/2017/04/m4.png" alt="" width="37" height="37" />4. Промежуточное событие-обработчик</strong></p>
<p>Эта четверка безусловно необходима.</p>
<p><strong>5. Прикрепленное событие прерывающее</strong></p>
<p><img class="alignnone size-medium wp-image-880" title="m5" src="http://mainthing.ru/wp-content/uploads/2017/04/m5.png" alt="" width="153" height="101" /></p>
<p>Полезно, интуитивно понятно, часто используется на практике.</p>
<p><strong>6. Прикрепленное событие непрерывающее</strong></p>
<p>Интуитивно не понятен. Более-менее можно обойтись:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-full wp-image-883" title="e-nonint1" src="http://mainthing.ru/wp-content/uploads/2017/04/e-nonint1.png" alt="" width="223" height="175" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-full wp-image-884" title="e-nonint2" src="http://mainthing.ru/wp-content/uploads/2017/04/e-nonint2.png" alt="" width="335" height="247" /></td>
</tr>
</tbody>
</table>
<p><strong>7. Подпроцесс-обработчик прерывающий</strong></p>
<p><img class="alignnone size-full wp-image-885" title="esubint" src="http://mainthing.ru/wp-content/uploads/2017/04/esubint.png" alt="" width="150" height="128" /></p>
<p><strong>8. Подпроцесс-обработчик непрерывающий</strong></p>
<p><img class="alignnone size-full wp-image-886" title="esubnonint" src="http://mainthing.ru/wp-content/uploads/2017/04/esubnonint.png" alt="" width="151" height="133" /></p>
<p>Подпроцессы-обработчики практически не отличаются от прикрепленных событий. Разницу можно усмотреть в том, что прикрепленное событие невозможно прикрепить к процессу верхнего уровня (только к подпроцессу), подпроцесс-обработчик - можно. Но никто ведь не мешает  при необходимости превратить верхний уровень в подпроцесс.</p>
<p><strong>Выводы</strong></p>
<p>Итого из восьми вариантов классификации событий по месту необходимых и полезных - пять: начало, конец, промежуточный инициатор, промежуточный обработчик, прикрепленный обработчик непрерывающий (подмножество BPMN 1.x).</p>
<p>Если ограничиться событиями только необходимыми и полезными по типу (всего 6) и по месту (всего 5), то получим 30 потенциально возможных комбинаций, из которых реализуются 19:</p>
<p><img src="http://mainthing.ru/wp-content/uploads/2017/04/events-mini-ru.png" alt="" width="309" height="388" /></p>
<p>Для справки, полное число комбинаций событий в BPMN 2.0 равняется 63.</p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/840/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Тонкий слой под названием &#8220;процесс&#8221;</title>
		<link>https://mainthing.ru/ru/item/847/</link>
		<comments>https://mainthing.ru/ru/item/847/#comments</comments>
		<pubDate>Mon, 03 Apr 2017 17:54:33 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[BPMN]]></category>

		<category><![CDATA[trivia]]></category>

		<guid isPermaLink="false">http://mainthing.ru/?p=847</guid>
		<description><![CDATA[Как это не парадоксально, но термин &#8220;процесс&#8221; остается самым неоднозначным в BPM - недавняя дискуссия на форуме BPM.com это наглядно демонстрирует.

Когда мы разрабатывали профстандарт, одно из рабочих вариантов названия было &#8220;Специалист по управлению процессами&#8221;. И на одном из обсуждений мы получили замечание: &#8220;Уточните, о каких процессах идет речь - процессами пищеварения вы собираетесь управлять?&#8221; В [...]]]></description>
			<content:encoded><![CDATA[<p>Как это не парадоксально, но термин &#8220;процесс&#8221; остается самым неоднозначным в BPM - <a href="http://bpm.com/bpm-today/in-the-forum/4858-what-are-the-most-misunderstood-terms-in-bpm">недавняя дискуссия на форуме BPM.com</a> это наглядно демонстрирует.</p>
<ul>
<li>Когда мы разрабатывали профстандарт, одно из рабочих вариантов названия было &#8220;Специалист по управлению процессами&#8221;. И на одном из обсуждений мы получили замечание: &#8220;Уточните, о каких процессах идет речь - процессами пищеварения вы собираетесь управлять?&#8221; В самом деле, на бытовом уровне мы процессами называем все что угодно, от пищеварения до образования галактик.</li>
<li>Среди консультантов по управлению распространен взгляд на процессы как на любую упорядоченную деятельность, нацеленную на получение определенного результата. В таком определении есть смысл - если в фокусе нашего внимания находится эффективность бизнеса, то для нас нет большой разницы между деятельностью в рамках функциональных подразделений, кросс-функциональных процессов или проектов. Но если погружаться в конкретику, то такое определение процесса становится непродуктивным: конечно, мы можем принять, что проект - это тоже процесс, просто нацеленный на однократный результат, но методы управления проектами и процессами ведь существенно разные, как ни крути. К слову, в последнее время для обозначения широкого спектра деятельности вместо термина &#8220;процесс&#8221; стали употреблять &#8220;бизнес-способность&#8221;. Мне этот термин нравится, поскольку позволяет объединить процессы и проекты, не сливая их в одно.</li>
<li>В контексте BPMN определение процесса сужается еще больше. Во-первых, в BPMN есть четкая разница между процессом и подпроцессом: первый инициируется внешним событием (сообщением, таймером или просто волевым решением), второй вызывается. Во-вторых, BPMN в упор не видит уровни выше отдельного процесса - такие сущности, как, например,  &#8220;цепочка создания ценности&#8221;, &#8220;вспомогательные бизнес-процессы&#8221; или &#8220;продвижение продукции&#8221;. В BPMN нет средств для моделирования групп процессов.</li>
</ul>
<p>Таким образом, если посмотреть на процессную иерархию сквозь призму BPMN, то вверху мы увидим несколько уровней групп процессов, в основании - несколько уровней подпроцессов, а между ними - тонкий слой того, что в BPMN называется процессами:</p>
<p style="text-align: center;"><img src="http://mainthing.ru/wp-content/uploads/2017/04/pyramid-ru-600x401.png" alt="" width="600" height="401" /></p>
<p>См.также</p>
<ul>
<li><a href="http://mainthing.ru/ru/item/715/">Что является процессом в BPMN (и что не является)</a></li>
</ul>
<p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/847/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Необходимые и избыточные элементы BPMN: развилки</title>
		<link>https://mainthing.ru/ru/item/813/</link>
		<comments>https://mainthing.ru/ru/item/813/#comments</comments>
		<pubDate>Sat, 28 Jan 2017 12:58:10 +0000</pubDate>
		<dc:creator>Anatoly Belychook</dc:creator>
		
		<category><![CDATA[Статьи]]></category>

		<category><![CDATA[BPMN]]></category>

		<guid isPermaLink="false">http://mainthing.ru/?p=813</guid>
		<description><![CDATA[Полная палитра BPMN включает сотни элементов (если считать все возможные комбинации). И хотя профессионал знать их должен все, не надо стремиться все их использовать.
Во-первых, этим вы усложните понимание процесса неподготовленными бизнес-пользователями. И это в лучшем случае, в худшем - вызовите отторжение. Ведь одно из главных преимуществ BPMN состоит в том, что он одновременно и интуитивно [...]]]></description>
			<content:encoded><![CDATA[<p>Полная палитра BPMN включает сотни элементов (если считать все возможные комбинации). И хотя профессионал знать их должен все, не надо стремиться все их использовать.</p>
<p>Во-первых, этим вы усложните понимание процесса неподготовленными бизнес-пользователями. И это в лучшем случае, в худшем - вызовите отторжение. Ведь одно из главных преимуществ BPMN состоит в том, что он одновременно и интуитивно понятен, и достаточно точен, чтобы люди бизнеса, аналитики и ИТ-специалисты понимали схему процесса одинаково. Но только при условии следования хорошему стилю и здорового минимализма в использовании палитры BPMN.</p>
<p>Во-вторых, если говорить о процессах, исполняемых движком, то ни один из них не реализует нотацию идеально и в полном объеме. Поэтому у потенциальных заказчиков часто возникают вопросы: насколько критично, если движок не поддерживает тот или иной элемент и существует ли обходной путь, позволяющий без него обойтись?</p>
<p>Попробуем ответить на эти вопросы и показать, какие элементы абсолютно необходимы, а без каких можно обойтись, заменив их другими.</p>
<p>Начнем с развилок.</p>
<p><span id="more-813"></span></p>
<p><strong><img class="alignnone size-medium wp-image-814" title="exclusive gateway" src="http://mainthing.ru/wp-content/uploads/2017/01/exclusive.png" alt="" width="58" height="120" />1. Развилка &#8220;или/или&#8221;</strong></p>
<p>Пытаться заменить эту развилку мы не будем.</p>
<p>Примечание: пустой ромб и ромб с косым крестом внутри - альтернативные варианты начертания одного и того же элемента. Ясно, что лучше выбрать (для себя или для организации) один вариант и придерживаться его.</p>
<p><strong><img class="alignnone size-medium wp-image-815" title="parallel gateway" src="http://mainthing.ru/wp-content/uploads/2017/01/parallel.png" alt="" width="58" height="53" />2. Развилка &#8220;и&#8221; (параллельная)</strong></p>
<p>Тоже вещь незаменимая.</p>
<p><strong><img class="alignnone size-medium wp-image-816" title="inclusive gateway" src="http://mainthing.ru/wp-content/uploads/2017/01/inclusive.png" alt="" width="57" height="54" />3. Развилка &#8220;и/или&#8221;</strong></p>
<p>Заменяется комбинацией развилок &#8220;или/или&#8221; и параллельной:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-medium wp-image-817" title="inclusive1" src="http://mainthing.ru/wp-content/uploads/2017/01/inclusive1.png" alt="" width="235" height="251" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-medium wp-image-818" title="inclusive2" src="http://mainthing.ru/wp-content/uploads/2017/01/inclusive2.png" alt="" width="371" height="268" /></td>
</tr>
</tbody>
</table>
<p>Развилка &#8220;и/или&#8221; полезна, так как моделирует вполне определенный и достаточно распространенный сценарий &#8220;набор независимых опций&#8221;; альтернативная реализация получается более громоздкой. Минус тот, что бизнес-пользователи схему справа поймут без дополнительных объяснений, а схему слева - вряд ли.</p>
<p>У процессного движка могут возникнуть затруднения с синхронизацией потоков на сходящейся развилке и/или, с этой точки зрения также схема справа может быть предпочтительной.</p>
<p><strong><img class="alignnone size-medium wp-image-819" title="complex" src="http://mainthing.ru/wp-content/uploads/2017/01/complex.png" alt="" width="52" height="55" />4. Комплексная развилка</strong></p>
<p>Комплексная развилка управляет токенами на схождении нескольких потоков управления. Заменяется парой развилок или/или:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-medium wp-image-820" title="complex1" src="http://mainthing.ru/wp-content/uploads/2017/01/complex1.png" alt="" width="280" height="252" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-medium wp-image-821" title="complex2" src="http://mainthing.ru/wp-content/uploads/2017/01/complex2.png" alt="" width="348" height="250" /></td>
</tr>
</tbody>
</table>
<p><strong><img class="alignnone size-medium wp-image-822" title="event" src="http://mainthing.ru/wp-content/uploads/2017/01/event.png" alt="" width="56" height="56" />5. Развилка по событиям</strong></p>
<p>Заменяется с помощью подпроцесса:</p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-medium wp-image-823" title="event1" src="http://mainthing.ru/wp-content/uploads/2017/01/event1.png" alt="" width="228" height="236" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-medium wp-image-824" title="event2" src="http://mainthing.ru/wp-content/uploads/2017/01/event2.png" alt="" width="310" height="362" /></td>
</tr>
</tbody>
</table>
<p>Это универсальная техника, позаимствованая у Брюса Силвера, пригодная для любых комбинаций событий.</p>
<p>Если одно из событий - получение сообщения, то можно использовать более простой прием:</p>
<p><img class="alignnone size-medium wp-image-825" title="event3" src="http://mainthing.ru/wp-content/uploads/2017/01/event3.png" alt="" width="278" height="189" /></p>
<p><strong><img class="alignnone size-medium wp-image-826" title="start-event" src="http://mainthing.ru/wp-content/uploads/2017/01/start-event.png" alt="" width="50" height="51" />6. Стартовая развилка по событиям</strong></p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-medium wp-image-827" title="start-event1" src="http://mainthing.ru/wp-content/uploads/2017/01/start-event1.png" alt="" width="180" height="238" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-medium wp-image-828" title="start-event2" src="http://mainthing.ru/wp-content/uploads/2017/01/start-event2.png" alt="" width="167" height="181" /></td>
</tr>
</tbody>
</table>
<p>Обоих вариантов лучше избегать: для пользователей их поведение неочевидно, а движки большинства BPMS не умеют их исполнять. Лучше моделируйте поток работ от каждого события как отдельный процесс, обращающийся к повторно-используемым подпроцессам.</p>
<p><strong><img class="alignnone size-medium wp-image-829" title="parallel-event" src="http://mainthing.ru/wp-content/uploads/2017/01/parallel-event.png" alt="" width="47" height="47" />7. Параллельная стартовая развилка по событиям</strong></p>
<table border="0">
<tbody>
<tr>
<td style="border:0"><img class="alignnone size-medium wp-image-830" title="parallel-event1" src="http://mainthing.ru/wp-content/uploads/2017/01/parallel-event1.png" alt="" width="158" height="197" /></td>
<td style="border:0"><strong>=</strong></td>
<td style="border:0"><img class="alignnone size-medium wp-image-831" title="parallel-event2" src="http://mainthing.ru/wp-content/uploads/2017/01/parallel-event2.png" alt="" width="160" height="72" /></td>
</tr>
</tbody>
</table>
<p>Представляет в основном лишь академический интерес.</p>
<p><strong>Выводы</strong></p>
<p>Двух развилок - или/или и параллельной, в принципе, достаточно. Остальные развилки позволяют строить более компактные схемы, но это преимущество частично нивелируется тем, что читатели без специальной подготовки их вряд ли поймут.</p>
<p><em>О взаимозаменяемости событий и других элементах - в следующих статьях.</em></p>
]]></content:encoded>
			<wfw:commentRss>https://mainthing.ru/ru/item/813/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
