User task
A User Task represents work performed by a human. The process pauses at the task until a person completes the work and submits a result — typically through a task list or form application built on top of the ZenBPM API. Internally the task creates a job that the application completes on the user's behalf.
Rendered as a rounded rectangle with a person icon in the top-left corner.
Use cases
- Approvals — a manager approves an order, invoice, or leave request before the process continues.
- Manual data entry — a user fills in a form to supply data the process cannot obtain automatically.
- Exception review — a case flagged by automated checks is reviewed by a human before processing resumes.
Usage in BPMN
A User Task creates a job whose Job.type is configurable through the optional zenbpm:taskDefinition extension element. When the element or its type attribute is missing or empty, the job uses the default user-task-type. The configured value is filterable and can be consumed by workers, but it does not change how the engine resolves assignment, completion, or form rendering. Variable mappings with zenbpm:ioMapping work exactly as for a Service task.
The task can be routed to its performer with a zenbpm:assignmentDefinition extension element:
| Attribute | Required | Description |
|---|---|---|
assignee | no | The user the task is assigned to. |
candidateGroups | no | Comma-separated list of groups whose members can claim the task. |
The optional zenbpm:taskDefinition element exposes a single attribute:
| Attribute | Required | Default | Description |
|---|---|---|---|
type | no | user-task-type | Type stored in Job.type and used by job filtering/workers. |
Related documentation
- Service task — full configuration and execution details for job-based tasks:
zenbpm:taskDefinition, variable mappings, and job handling.
XML example
A User Task assigned to jane.doe, claimable by the sales and support groups, and creating a job of type approval. The input mapping exposes the order total to the form; the output mapping stores the user's decision in the process variable orderApproved.
<bpmn:userTask id="Activity_ApproveOrder" name="Approve order">
<bpmn:extensionElements>
<zenbpm:taskDefinition type="approval" />
<zenbpm:assignmentDefinition assignee="jane.doe" candidateGroups="sales, support" />
<zenbpm:ioMapping>
<zenbpm:input source="=order.total" target="orderTotal" />
<zenbpm:output source="=approved" target="orderApproved" />
</zenbpm:ioMapping>
</bpmn:extensionElements>
<bpmn:incoming>Flow_In</bpmn:incoming>
<bpmn:outgoing>Flow_Out</bpmn:outgoing>
</bpmn:userTask>