<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Комментарии к записи: Предупреждение об использовании сигналов BPMN</title>
	<atom:link href="http://mainthing.ru/item/328/feed/" rel="self" type="application/rss+xml" />
	<link>https://mainthing.ru/ru/item/328/</link>
	<description>BPM-блог Анатолия Белайчука</description>
	<pubDate>Thu, 14 May 2026 06:07:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
		<item>
		<title>Автор: Anatoly Belychook</title>
		<link>https://mainthing.ru/ru/item/328/#comment-798</link>
		<dc:creator>Anatoly Belychook</dc:creator>
		<pubDate>Mon, 15 Nov 2010 13:22:10 +0000</pubDate>
		<guid isPermaLink="false">http://mainthing.ru/?p=328#comment-798</guid>
		<description>Denis

Thank you for the good question.

Link event doesn't add anything to the process semantic, it's just a way to represent a process graphically. One can draw a sequence flow from Task3 to the parallel merge on the diagram you refer as well. Both ways will work for this process indeed but in our case we are trying to synchronize different subprocesses. Links won't help here: a pair of links creates a virtual sequence flow so it's plain wrong to place them at different process levels or in different processes.

A.B.</description>
		<content:encoded><![CDATA[<p>Denis</p>
<p>Thank you for the good question.</p>
<p>Link event doesn&#8217;t add anything to the process semantic, it&#8217;s just a way to represent a process graphically. One can draw a sequence flow from Task3 to the parallel merge on the diagram you refer as well. Both ways will work for this process indeed but in our case we are trying to synchronize different subprocesses. Links won&#8217;t help here: a pair of links creates a virtual sequence flow so it&#8217;s plain wrong to place them at different process levels or in different processes.</p>
<p>A.B.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Denis Oleynikov</title>
		<link>https://mainthing.ru/ru/item/328/#comment-797</link>
		<dc:creator>Denis Oleynikov</dc:creator>
		<pubDate>Mon, 15 Nov 2010 13:01:15 +0000</pubDate>
		<guid isPermaLink="false">http://mainthing.ru/?p=328#comment-797</guid>
		<description>Good day :) What about using Link, like in pattern WCP-18 (site http://diveintobpm.org/index.jsp)?</description>
		<content:encoded><![CDATA[<p>Good day <img src='https://mainthing.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> What about using Link, like in pattern WCP-18 (site <a href="http://diveintobpm.org/index.jsp" rel="nofollow">http://diveintobpm.org/index.jsp</a>)?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Anatoly Belychook</title>
		<link>https://mainthing.ru/ru/item/328/#comment-789</link>
		<dc:creator>Anatoly Belychook</dc:creator>
		<pubDate>Sat, 06 Nov 2010 09:17:20 +0000</pubDate>
		<guid isPermaLink="false">http://mainthing.ru/?p=328#comment-789</guid>
		<description>Guess you are right. The BPMN 2.0 spec says: 

"The Condition Expression of a Conditional Start Event MUST NOT refer to the data context or instance attribute of the Process (as the Process
instance has not yet been created). Instead, it MAY refer to static Process attributes and states of entities in the environment. The specification
of mechanisms to access such states is out of scope of the standard."

So it's safe to assume that unlike a start event expression, intermediate conditional event expression may refer to the process instance attributes.</description>
		<content:encoded><![CDATA[<p>Guess you are right. The BPMN 2.0 spec says: </p>
<p>&#8220;The Condition Expression of a Conditional Start Event MUST NOT refer to the data context or instance attribute of the Process (as the Process<br />
instance has not yet been created). Instead, it MAY refer to static Process attributes and states of entities in the environment. The specification<br />
of mechanisms to access such states is out of scope of the standard.&#8221;</p>
<p>So it&#8217;s safe to assume that unlike a start event expression, intermediate conditional event expression may refer to the process instance attributes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Thomas Allweyer</title>
		<link>https://mainthing.ru/ru/item/328/#comment-788</link>
		<dc:creator>Thomas Allweyer</dc:creator>
		<pubDate>Sat, 06 Nov 2010 08:56:43 +0000</pubDate>
		<guid isPermaLink="false">http://mainthing.ru/?p=328#comment-788</guid>
		<description>According to the BPMN specification, a conditional event has an expression which can be used for this purpose. If a signal is regarded as something that is usually independent from a certain process instance, the assignment to a specific instance may indeed be non-trivial. However, if we define a process instance variable "concept ready" in the parent process, the rule of the condition event is rather simple: It triggers when "concept ready" becomes true. There is no need to identify the right process instance, because a process instance variable always exists in the context of a process instance.

Well, I just looked it up in the spec: There is only one instance variable in the spec: "state". However, you can assign data to a process instance via data input and output, so it's possible to solve the problem as I state above.</description>
		<content:encoded><![CDATA[<p>According to the BPMN specification, a conditional event has an expression which can be used for this purpose. If a signal is regarded as something that is usually independent from a certain process instance, the assignment to a specific instance may indeed be non-trivial. However, if we define a process instance variable &#8220;concept ready&#8221; in the parent process, the rule of the condition event is rather simple: It triggers when &#8220;concept ready&#8221; becomes true. There is no need to identify the right process instance, because a process instance variable always exists in the context of a process instance.</p>
<p>Well, I just looked it up in the spec: There is only one instance variable in the spec: &#8220;state&#8221;. However, you can assign data to a process instance via data input and output, so it&#8217;s possible to solve the problem as I state above.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Anatoly Belychook</title>
		<link>https://mainthing.ru/ru/item/328/#comment-787</link>
		<dc:creator>Anatoly Belychook</dc:creator>
		<pubDate>Fri, 05 Nov 2010 20:15:30 +0000</pubDate>
		<guid isPermaLink="false">http://mainthing.ru/?p=328#comment-787</guid>
		<description>But look, with the conditional event we fall into the same trap. The "concept ready" flag won't help by the same reason as the "concept ready" signal. The "process 9999 concept ready" would work but you'll need to create a business rule dynamically which may be a non-trivial task.</description>
		<content:encoded><![CDATA[<p>But look, with the conditional event we fall into the same trap. The &#8220;concept ready&#8221; flag won&#8217;t help by the same reason as the &#8220;concept ready&#8221; signal. The &#8220;process 9999 concept ready&#8221; would work but you&#8217;ll need to create a business rule dynamically which may be a non-trivial task.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Anatoly Belychook</title>
		<link>https://mainthing.ru/ru/item/328/#comment-786</link>
		<dc:creator>Anatoly Belychook</dc:creator>
		<pubDate>Fri, 05 Nov 2010 19:23:28 +0000</pubDate>
		<guid isPermaLink="false">http://mainthing.ru/?p=328#comment-786</guid>
		<description>Thomas

Thank you for valuable input. I like the idea to use conditional event.

The separate pool workaround is artificial indeed but let's take into account that the whole case is artificial. There is no real need to use subprocesses here hence launching external processes looks like an overkill.</description>
		<content:encoded><![CDATA[<p>Thomas</p>
<p>Thank you for valuable input. I like the idea to use conditional event.</p>
<p>The separate pool workaround is artificial indeed but let&#8217;s take into account that the whole case is artificial. There is no real need to use subprocesses here hence launching external processes looks like an overkill.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Thomas Allweyer</title>
		<link>https://mainthing.ru/ru/item/328/#comment-785</link>
		<dc:creator>Thomas Allweyer</dc:creator>
		<pubDate>Fri, 05 Nov 2010 12:33:57 +0000</pubDate>
		<guid isPermaLink="false">http://mainthing.ru/?p=328#comment-785</guid>
		<description>Yes, it is strange that you can synchronize two separate processes, but not two sub-processes within the same parent process. 

I don't like the workaround with separate pools, because this is rather artificial if you actually want to model one process. It also adds complexity, since you need to use a correlation mechanism. Communication within the same instance can be accomplished more easily, e.g. by using process variables.

How about this workaround: Use a conditional event instead of the catching signal event. In the upper process you don't need a throwing event, or you use a none event just to mark the place where the concept reaches the ready state. The actual communication would take place by a flag attribute that is defined in the parent process. Variables defined in the parent process are visible in all sub-processes. "Develop book concept" would set the "concept ready" flag to true, and the conditional event which has waited, would be triggered.

I agree that it would be good to have an attribute in the signal event that could be used for correlating the signal to a specific process instance. Of course, you could define your own attribute using the BPMN extension mechanism. However, this again is an individual extension, but not the standard. I would like to draw a line between such signal events that are bound to a specific instance (maybe a specific type of association). After all, you can draw a line for the message flow so that you can connect the corresponding message events of different processes. The same should be possible for sub-processes (equal rights for sub-processes ...!).</description>
		<content:encoded><![CDATA[<p>Yes, it is strange that you can synchronize two separate processes, but not two sub-processes within the same parent process. </p>
<p>I don&#8217;t like the workaround with separate pools, because this is rather artificial if you actually want to model one process. It also adds complexity, since you need to use a correlation mechanism. Communication within the same instance can be accomplished more easily, e.g. by using process variables.</p>
<p>How about this workaround: Use a conditional event instead of the catching signal event. In the upper process you don&#8217;t need a throwing event, or you use a none event just to mark the place where the concept reaches the ready state. The actual communication would take place by a flag attribute that is defined in the parent process. Variables defined in the parent process are visible in all sub-processes. &#8220;Develop book concept&#8221; would set the &#8220;concept ready&#8221; flag to true, and the conditional event which has waited, would be triggered.</p>
<p>I agree that it would be good to have an attribute in the signal event that could be used for correlating the signal to a specific process instance. Of course, you could define your own attribute using the BPMN extension mechanism. However, this again is an individual extension, but not the standard. I would like to draw a line between such signal events that are bound to a specific instance (maybe a specific type of association). After all, you can draw a line for the message flow so that you can connect the corresponding message events of different processes. The same should be possible for sub-processes (equal rights for sub-processes &#8230;!).</p>
]]></content:encoded>
	</item>
</channel>
</rss>
