Skip to main content
Version: v1.8.0

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.

User task

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:

AttributeRequiredDescription
assigneenoThe user the task is assigned to.
candidateGroupsnoComma-separated list of groups whose members can claim the task.

The optional zenbpm:taskDefinition element exposes a single attribute:

AttributeRequiredDefaultDescription
typenouser-task-typeType stored in Job.type and used by job filtering/workers.
  • 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>