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

ProcessInstanceHelper starts always the first found start event message #4560

Open
TobiasWebelsiep opened this issue Feb 2, 2024 · 0 comments

Comments

@TobiasWebelsiep
Copy link

The ProcessInstanceHelper contains an invalid fix to start instances by messages since 7.2.0:

` public ProcessInstance createAndStartProcessInstanceByMessage(...) {
...
for (FlowElement flowElement : process.getFlowElements()) {
if (flowElement instanceof StartEvent) {
StartEvent startEvent = (StartEvent) flowElement;
if (CollectionUtil.isNotEmpty(startEvent.getEventDefinitions()) && startEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) {

                MessageEventDefinition messageEventDefinition = (MessageEventDefinition) startEvent.getEventDefinitions().get(0);
                String messageRef = messageEventDefinition.getMessageRef();
                if (messageRef.equals(messageName)) {
                    initialFlowElement = flowElement;
                    break;
                } // FIXME: We should not need to reset eventDefinition messageRef to message name
                else if (bpmnModel.containsMessageId(messageRef)) {
                    Message message = bpmnModel.getMessage(messageRef);
                    messageEventDefinition.setMessageRef(message.getName());
                    initialFlowElement = flowElement;
                    break;
                }`

The 'FIXME' part uses always the first found 'StartEvent', if the given 'messageName' contains to process model definition. But if the process definition contains two or more messages they will be ignored and the first one is chosen.

<definitions ...> <message id="FirstMessage" name="FirstMessage"/> <message id="SecondMessage" name="SecondMessage"/> <process id="myProcess" name="myProcess"> <startEvent id="FirstStartEvent" name="FirstStartEvent.label"> <messageEventDefinition messageRef="FirstMessage"/> </startEvent> <startEvent id="SecondStartEvent" name="SecondStartEvent.label"> <messageEventDefinition messageRef="SecondMessage"/> </startEvent> ... </process> </definitions>

But if we call getRuntimeService().startProcessInstanceByMessage("SecondMessage", "myProcess") the wrong 'FirstStartEvent' is chosen and executed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant