Cherry
Cherry

Reputation: 33544

How to finish a second task with activiti bpmn?

There are 2 task started in parallel: ManagerReviewTask and DirectorReviewTask.

When:

How do I do that? Could you please provide an example with activiti xml?

Upvotes: 2

Views: 1463

Answers (3)

Greg Harley
Greg Harley

Reputation: 3240

A rather standard pattern. A standard inclusive gateway and a signal to cancel.

enter image description here

Upvotes: 2

Ister
Ister

Reputation: 6318

From BPMN perspective you have to possibilities to choose from:

  1. After DirectorReviewTask (or as ending event for it) add send signal (lets say stopManagerReviewTask). On ManagerReviewTask you need to add handling of stopManagerReviewTask as Boundary interrupting signal event.
  2. If DirectorReviewTask is the last action in the process, end the flow containing DirectorReviewTask with End terminate event.

In case 1 you only need to consider how to force activiti to stop only one DirectorReviewTask from the same process not all instances running in parallel.

Upvotes: 1

flavio.donze
flavio.donze

Reputation: 8100

This is how I would add a listener to DirectorReviewTask and finish ManagerReviewTask.

<userTask id="DirectorReviewTask" name="DirectorReviewTask">
    <extensionElements>
        <activiti:taskListener event="complete" class="listeners.DirectorReviewTaskListener"/>
    </extensionElements>
</userTask>

Here the listner class:

public class DirectorReviewTaskListener implements TaskListener {

    @Override
    public void notify(DelegateTask delegateTask) {
        if (TaskListener.EVENTNAME_COMPLETE.equals(delegateTask.getEventName())) {
            String executionId = delegateTask.getExecutionId();
            Task managerReviewTask = taskService.createTaskQuery().executionId(executionId).taskName("ManagerReviewTask").singleResult();
            if (managerReviewTask != null) {
                taskService.complete(managerReviewTask.getId());
            }
        }
    }
}

I think you should end up with a parallel gateway:

<parallelGateway id="fork" />
<sequenceFlow sourceRef="fork" targetRef="ManagerReviewTask" />
<sequenceFlow sourceRef="fork" targetRef="DirectorReviewTask" />

<userTask id="ManagerReviewTask" name="ManagerReviewTask" />
<sequenceFlow sourceRef="ManagerReviewTask" targetRef="join" />

<userTask id="DirectorReviewTask" name="DirectorReviewTask">
    <extensionElements>
        <activiti:taskListener event="complete" class="listeners.DirectorReviewTaskListener"/>
    </extensionElements>
</userTask>
<sequenceFlow sourceRef="DirectorReviewTask" targetRef="join" />

<parallelGateway id="join" />
<sequenceFlow sourceRef="join" targetRef="GO_FROM_HERE" />

Upvotes: 2

Related Questions