Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Elements Within Sub-Processes are Placed Horizontally #2127

Open
sombrek opened this issue Apr 5, 2024 · 4 comments
Open

Elements Within Sub-Processes are Placed Horizontally #2127

sombrek opened this issue Apr 5, 2024 · 4 comments
Labels
backlog Queued in backlog enhancement New feature or request pr welcome We rely on a community contribution to improve this.

Comments

@sombrek
Copy link
Contributor

sombrek commented Apr 5, 2024

Describe the Bug

Elements are always placed horizontally within collapsed sub processes, even when the sub-process activity is placed within a vertical pool.

Steps to Reproduce

  1. Create a vertical pool.
  2. Add a collapsed sub-process.
  3. Navigate into the sub-process.
  4. Append elements.

Expected Behavior

The new elements should be placed vertically.

Environment

  • Library version: 17.2.0

Additional Information

I think ModelingUtil needs to be extended. I found DrilldownUtil and I see it used with ElementRegistry, but I'm not sure if (and how) ElementRegistry can be used within ModelingUtil.

@barmac Thank you for your great support so far. Do you have an idea how to handle this case?

@sombrek sombrek added the bug Something isn't working label Apr 5, 2024
@sombrek sombrek changed the title Elements Within Sub-Processes are Places Horizontally Elements Within Sub-Processes are Placed Horizontally Apr 6, 2024
@barmac
Copy link
Member

barmac commented Apr 8, 2024

The method that you linked relies on the diagram parent. As a collapsed subprocess is the root of the diagram, it does not have a parent, and thus no participant/pool parent is detected.

We could handle this by checking the businessObject.$parent property instead. This should make it possible to traverse the semantic model instead of the diagram.

@barmac barmac added pr welcome We rely on a community contribution to improve this. backlog Queued in backlog labels Apr 8, 2024
@sombrek
Copy link
Contributor Author

sombrek commented Apr 13, 2024

Good idea. The Participant can be found that way. However, the diagram element is needed to get the isHorizontal attribute.
Using getDi causes an error that refers to #1472.

I'm not sure if it's possible to get the (correct) diagram for the Participant. What would be the best way to get the diagram element?

@barmac barmac added enhancement New feature or request and removed bug Something isn't working labels Apr 15, 2024
@barmac
Copy link
Member

barmac commented Apr 15, 2024

Thanks for trying out the suggestion. Indeed it is a bit more tricky than I assumed.

The getDi error is correct, and it is due to the nature of BPMN Diagram Interchange. BPMN allows to have multiple diagrams within the file, and those diagrams can even depict the same elements but with different coordinates, sizes, and attributes like expansion or vertical/horizontal.

So the relationship between a semantic element and a DI element is not one-to-one, but rather one-to-many (where many is usually one though). The consequence of that is that for a given semantic element, we can retrieve the DI element only within the context of the currently displayed diagram, and in a collapsed subprocess view the participant has no DI, thus the function errors.

I prepared a codesandbox which shows the DI flexibility in bpmn-js. The top-bar buttons allow you to switch between the diagrams of which the first two depict exactly the same semantic elements, but in the first one the participant is depicted as vertical, but on the other it's a horizontal pool.

Bottom-line is that we cannot always tell for sure if the subprocess is currently rendered in a vertical or a horizontal participant.

However, we could potentially employ some heuristics to make most cases working. I believe BPMNs like in the linked example are unusual. I'd rather expect to have a single participant depiction per file. We could then expect the first depicted parent to determine whether the subprocess is vertical or horizontal.

For the implementation, I'd suggest to take the inspiration from the Drilldown Breadcrumbs feature which handles the subprocess-to-parent navigation. Cf. https://github.com/bpmn-io/bpmn-js/blob/develop/lib/features/drilldown/DrilldownBreadcrumbs.js#L68

@barmac
Copy link
Member

barmac commented Apr 15, 2024

For the sake of completeness, I added a third diagram Vertical-expanded which depicts the same model but the subprocess is expanded now. Notice however that in this case the drilldown feature breaks as the contained elements are not displayed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backlog Queued in backlog enhancement New feature or request pr welcome We rely on a community contribution to improve this.
Development

No branches or pull requests

2 participants