Skip to content

BPMN Task Marker and Task Type

A BPMN task is one step in a process model. Two kinds of small symbols refine it: types and markers. The BPMN Activity article covers the wider idea of tasks and activities.

Task types

  • Service task: a work item with a specific type. When the process reaches it, the engine creates a job for a worker to pick up.
  • Script task: the engine evaluates a script. The script can be written in Groovy, JavaScript, or Python.
  • Manual task: a person does the work without external tooling or a user interface. The engine simply passes through it.

Multi-instance marker

Multi-instance repeats a step. It comes in two forms:

  • Sequential: drawn with three horizontal lines at the bottom of the activity.
  • Parallel: drawn with three vertical lines. All instances are created when the activity starts. They run at the same time, independently of each other.

In Camunda 8, parallel is the default.

Loop marker

Camunda 7 does not natively support the loop marker. If you use that engine, model the loop explicitly, for example with gateways. The BPMN Gateway article explains gateways.

Compensation marker

Compensation handlers sit outside the regular flow. They run only when a compensation event is thrown. An association links them, not a sequence flow. The BPMN Compensation Event article covers the event side.

An order process has a parallel multi-instance service task named “Reserve item”. Each order line gets its own instance. All instances start together and run independently. A script task then totals the prices. A manual task, “Pack parcel”, follows. A person does it, and the engine passes straight through.

Check the target engine before you use a marker. Camunda 7 lacks native loop support, so a loop there needs explicit modeling, such as gateways. Parallel multi-instance runs all instances at once and independently. Sequential multi-instance is the other choice when you want repetition one instance at a time.

A parallel multi-instance service task followed by a script task and a manual task.

Diagram source
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" targetNamespace="http://example.org/bpmn">
<process id="orderProcess" isExecutable="true">
<startEvent id="start" name="Order received">
<outgoing>f1</outgoing>
</startEvent>
<serviceTask id="reserve" name="Reserve item">
<incoming>f1</incoming>
<outgoing>f2</outgoing>
<multiInstanceLoopCharacteristics />
</serviceTask>
<scriptTask id="total" name="Total prices">
<incoming>f2</incoming>
<outgoing>f3</outgoing>
</scriptTask>
<manualTask id="pack" name="Pack parcel">
<incoming>f3</incoming>
<outgoing>f4</outgoing>
</manualTask>
<endEvent id="end" name="Order packed">
<incoming>f4</incoming>
</endEvent>
<sequenceFlow id="f1" sourceRef="start" targetRef="reserve" />
<sequenceFlow id="f2" sourceRef="reserve" targetRef="total" />
<sequenceFlow id="f3" sourceRef="total" targetRef="pack" />
<sequenceFlow id="f4" sourceRef="pack" targetRef="end" />
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_orderProcess">
<bpmndi:BPMNPlane id="BPMNPlane_orderProcess" bpmnElement="orderProcess">
<bpmndi:BPMNShape id="BPMNShape_start" bpmnElement="start">
<dc:Bounds x="80" y="102" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="68" y="143" width="60" height="28" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_reserve" bpmnElement="reserve">
<dc:Bounds x="216" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_total" bpmnElement="total">
<dc:Bounds x="416" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_pack" bpmnElement="pack">
<dc:Bounds x="616" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_end" bpmnElement="end">
<dc:Bounds x="816" y="102" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="791" y="143" width="87" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_f1" bpmnElement="f1">
<di:waypoint x="116" y="120" />
<di:waypoint x="216" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f2" bpmnElement="f2">
<di:waypoint x="316" y="120" />
<di:waypoint x="416" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f3" bpmnElement="f3">
<di:waypoint x="516" y="120" />
<di:waypoint x="616" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f4" bpmnElement="f4">
<di:waypoint x="716" y="120" />
<di:waypoint x="816" y="120" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
  • Each loop in a model targeting Camunda 7 is modeled explicitly (for example with gateways), not with the loop marker.
  • Each multi-instance activity is clearly drawn as parallel (vertical lines) or sequential (horizontal lines).
  • Each compensation handler is linked by association and triggered by a compensation event, not reached by sequence flow.
  • Manual tasks are used only for work that needs no external tooling or UI, since the engine passes through them.