Top-Down Modeling and BPMN Subprocesses

That's the basic fact that a subprocess in BPMN has one entry point and one exit point. Let me illustrate the problem.


Here is a familar diagram of an order handling process in BPMN - three subprocesses in a sequential flow. But when you drill down, you typically want to say that if Check Credit fails, you terminate the order. Something like this:


Unfortunately the diagram above is not legal in BPMN! A sequence flow cannot cross a subprocess boundary. Hmmm. Let's look at the options. I'm not crazy about any of them, but I'm hoping BPMS Watch readers will help me recommend one as the "best".


The first option, shown above, is to separate the top-level subprocesses with gateways. But to show the semantics you have to use a task to set the end state of the subprocess that is tested in the gateway. That means business analysts have to think like programmers. I don't like it.


The second option, shown above, is to use Link events. You've never heard of Link events? They're in the spec. A Link End event is a GoTo to a Link Start event or Link Intermediate event with matching LinkId in another subprocess of the same parent process. That's what we have here. In fact, each of the top-level subprocesses can have a Link End that jumps to the End subprocess to kill the order. So I kind of like it, except that I heard a talk by Steve White who said OMG didn't like it and they were going to replace it with something else in BPMN 1.1. The other thing is that my Process Modeler tool's simulation engine doesn't handle it today. But if you all like this, maybe they'll put that in.


The third option uses an Error event throw-and-catch. Programmers get it, but I'm not sure business analysts would. Besides, I don't think of bad credit as an error, but maybe that's just me. So if the credit is bad, an Error Intermediate event in normal flow throws the error, and the attached Error Intermediate event catches the error, terminates the subprocess and triggers the exception flow, which terminates the order process. So that works, but I don't like the idea of asking analysts to deal with this throw-catch business. Also, I'm not sure my simulation engine works with it yet, but again... they might, if this is the best way to do it.

So what do you think? Don't be shy, all comments welcome.