What is important for us (as maintainers of bpmn.io) is that our tools are editors, not drawing tools. Hence we’re careful to adopt anything that may have weak semantics and/or could easily break the consistency of diagrams during refactoring; we opt to offer what is predicable and common ground (over supporting all quirks).
From what I understand we discuss two topics here:
Can sub-processes have lanes? Yes, according to the BPMN spec and schema) I think this could be a simple and reasonable addition to our existing sub-process features.
Can (external) participants/pools be shown inside of (collapsed) sub-processes for the purpose of visualizing that external connection? This would allow us to keep the (visual) semantics, once collapsing something like this:
Here we have to answer many important questions, around UX, and representation in the BPMN. We want to avoid a situation where every vendor implements their own way of representing such “external ghost element”.
Do I capture the essence of the conversation correct?
That was my original thought! I was thinking there might be a way to A) store the message flow information as a custom extension property and B) use the renderer customization (as used in this example, since we’ve already got it implemented on our instance) to either allow “special” pools or just represent the parent pool. It might not be feasible; I was looking to get a starting point to dig around from.
This seems to contradict the explanation given earlier (my emphasis):
So it’s not the Foo lane that is replicated, but the Foo lane within the sub process is a subdivision of the Foo lane in the parent process.
By the way, lanes without parent pools are already rendered within sub processes. See this sample model I’ve exported from Adonis: nested-lanes-export.bpmn (9.3 KB)
@kirstenhh Editing this model shows some bugs, e.g. elements can be placed outside of the lanes and dragging lanes won’t work. Those might be starting points to get into the code.
@kirstenhh Yes, a model extension and some kind of custom rendering could achieve this but it’s not a simple customization use case so it’s difficult to provide easy pointers.