Verwenden einer Multi-Instanz
Sie können Mehrfachausführungen zu Benutzeraktivitäten und Subprozessen hinzufügen. Voraussetzung dafür ist, dass die Aktivität oder der Prozess auf einer Variable mit Mehrfachwert basiert. Für jeden Wert der Variable wird eine Ausführung der Aktivität vorgenommen.
![]() |
Zum Einstieg in das Arbeiten mit Multi-Instanzen ist es hilfreich, wenn Sie zunächst einen einfachen Prozess mit einer Benutzeraktivität erstellen. Dieser Prozess sieht beispielsweise so aus:
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" targetNamespace="" exporter="d.velop process modeler"> <process id="multi_instance_process" name="Multi Instance Process" isExecutable="true"> <startEvent id="start" /> <userTask id="task_hello_world" name="Hello World" camunda:candidateUsers="${variables.get('dv_initiator')}" /> <endEvent id="end" /> <sequenceFlow id="s1" sourceRef="start" targetRef="task_hello_world" /> <sequenceFlow id="s2" sourceRef="task_hello_world" targetRef="end" /> </process> </definitions>
Hinzufügen einer Multi-Instanz
Fügen Sie der Benutzeraktivität das BPMN-Element multiInstanceLoopCharacteristics hinzu. Ändern Sie anschließend die Variable, die den Empfänger der Benutzeraktivität bestimmt, in myPerformer.
... <process id="multi_instance_process" name="Multi Instance Process" isExecutable="true"> ... <userTask id="task_hello_world" name="Hello World" camunda:candidateUsers="${variables.get('myPerformer')}" > <multiInstanceLoopCharacteristics isSequential="false" camunda:collection="${variables.get('performers')}" camunda:elementVariable="myPerformer" /> </userTask> ... </process>
Erläuterung der Eigenschaften
isSequential: Verwenden Sie den Wert true, um die Aktivitäten nacheinander auszuführen und false, um sie gleichzeitig auszuführen.
camunda:collection: Ausdruck, der eine Mehrfachvariable zurückgibt.
camunda:elementVariable: Variablenname, der lokal für den jeweiligen Wert verwendet wird. Für die Variable muss eine Definition vorhanden sein.
Im Beispielprozess wird für jeden Wert der Variable performers eine Aktivität zugestellt. Mit der lokalen Variable myPerformer kann jedes einzelne Element als Empfänger angegeben werden.
Damit die Variablen performers und myPerformer verwendet werden können, müssen Sie diese definieren. Fügen Sie die BPMN-Elemente extensionElements und camunda:properties zum BPMN-Element process hinzu. Zum Definieren der Prozessvariablen fügen Sie den BPMN-Elementen camunda:properties noch jeweils das Element camunda:property hinzu.
... <process id="multi_instance_process" name="Multi Instance Process" isExecutable="true"> <extensionElements> <camunda:properties> <camunda:property name="variable:performers*" value="[Identity]!" /> <camunda:property name="variable:myPerformer" value="Identity" /> </camunda:properties> </extensionElements> ... </process>
Damit das BPMN-Diagramm im Modellierungswerkzeug sowie der Benutzeroberfläche korrekt dargestellt werden kann, wurde es noch um Diagramminformationen erweitert. Die finale BPMN-Definition sieht folgendermaßen aus:
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" 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="" exporter="d.velop process modeler"> <process id="multi_instance_process" name="Multi Instance Process" isExecutable="true"> <extensionElements> <camunda:properties> <camunda:property name="variable:performers*" value="[Identity]!" /> <camunda:property name="variable:myPerformer" value="Identity" /> </camunda:properties> </extensionElements> <startEvent id="start" /> <userTask id="task_hello_world" name="Hello World" camunda:candidateUsers="${variables.get('myPerformer')}" > <multiInstanceLoopCharacteristics isSequential="false" camunda:collection="${variables.get('performers')}" camunda:elementVariable="myPerformer" /> </userTask> <endEvent id="end" /> <sequenceFlow id="s1" sourceRef="start" targetRef="task_hello_world" /> <sequenceFlow id="s2" sourceRef="task_hello_world" targetRef="end" /> </process> <!-- Diagram information --> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="multi_instance_process"> <bpmndi:BPMNShape id="start_di" bpmnElement="start"> <dc:Bounds x="179" y="99" width="36" height="36" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="task_hello_world_di" bpmnElement="task_hello_world"> <dc:Bounds x="290" y="77" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="end_di" bpmnElement="end"> <dc:Bounds x="462" y="99" width="36" height="36" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="s1_di" bpmnElement="s1"> <di:waypoint x="215" y="117" /> <di:waypoint x="290" y="117" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="s2_di" bpmnElement="s2"> <di:waypoint x="390" y="117" /> <di:waypoint x="462" y="117" /> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>
Den Wert der Variablen performers müssen Sie nun beim Start des Prozesses belegen.