A fairly common thing you want to do in your process is to loop back.
Consider this process, for example, which illustrates a simple approval Proposal Review and Approval.

What happens during that process is quite self-explanatory: you submit a proposal till it gets approved.
Some BPMN Modelers don’t support loopback (hint: Intalio|BPMS Designer CE does not, at least not yet). If it something easy to do at modeling time, it can get fairly complex to generate an equivalent BPEL process that conveys the same thing since BPEL does not support out of sequence flow changes (What some people would call GO TO). BPEL execution model likes well structured, nested sequences (sub processes, conditional code and while loops).
So, if the modeler does not let you model the process as above, how can you model that process?
Fortunately, BPMN provides a looping sub-process shape. So you could model your process this way:

Maybe not as intuitive, but it expresses exactly the same thing. And it has its benefits too. For example, you can collapse the subprocess to unclutter your diagram, tasks inside the subprocess get their own scope.
In fact, absent of parallel flows, Böhm and Jacopini proved over 40 years ago that:
“any logic problem can be solved with only sequence, choice (IFTHENELSE), and repetition (DOWHILE) structures)â€
in “Flow Diagrams, Turing Machines and Languages with Only Two Formation Rulesâ€,Communications of the ACM, No. 5, May 1966, pp 366-371.
The same approach can be used for more complex processes and nesting more than one looping sub-process.
However, some processes may not be valid:

Anyone wants to venture why?

3 responses so far ↓
1 Aaron Donovan // Feb 21, 2007 at 6:35 pm
What is the recommended approach if the two tasks that contain the loopback are in different lanes? A looping subprocess can’t span lanes can it?
2 Pascal // Feb 28, 2007 at 4:30 pm
In this case, it may make sense to model it as one single lane so you can use the technique I described. Lanes are only used for organization purposes and have no meaning at execution time.
3 Marlon Dumas // Apr 23, 2007 at 5:52 pm
There is an algorithm that can translate the simple repeat-until loop-back found in the first diagram:
http://eprints.qut.edu.au/archive/00005266/01/5266.pdf
http://eprints.qut.edu.au/archive/00006810/01/6810.pdf
And there’s a open-fully source tool called BPMN2BPEL that implements this algorithm:
http://www.bpm.fit.qut.edu.au/projects/babel/tools/
The last of the processes in this posting is valid in BPMN (assuming you add the appopriate start and end events, etc.). However it is not “safe”, meaning that it is possible for the same activity in this process to execute multiple times concurrently. In this scenario, task “Request funding” will be executed multiple times (each time “Review Proposal” is completed). And these “multiple instances” of activity “Request funding” may potentially execute concurrently. The above BPMN2BPEL tool can deal with such process models, but it would generate horrible BPEL code (for such unsafe processes, the tool relies on BPEL event handlers).
As for the theorems that state that all programs with unstructured loops can be translated to equivalent programs with structured loops, they do not apply to languages such as BPMN which include parallel splits and joins.
Leave a Comment