Service Task

Service Task
A Service Task is a Task that uses some sort of service, which could be a Web service or an automated application.
— BPMN 2.0.2 Standard, 10.3.3.1, Service Task

In Flowable, Service Tasks are used to perform some form of "technical" task. Whenever you want to perform calculations, trigger some action within your application’s backend or integrate with another system, it will often involve Service Tasks. Most custom tasks such as the Email task or the HTTP Task are specialized versions of Service Tasks. This is possible thanks to the extensible nature of the BPMN standard which allows us to create our own tasks based on an existing type.

It is possible to configure Service Tasks in four ways:

  • Use a Value Expression.

  • Specifying a class that implements JavaDelegate or ActivityBehavior.

  • Evaluating an expression that resolves to a delegation object.

  • Invoking a method expression.

In many cases it makes sense to store the result of an operation carried out by a Service Task. For that matter, you can specify a result variable.

Example

The following example shows a very simple process where a user enters some information about a client. The following service task then takes that information and creates a new client in the backend.

Service Task

Attributes

Group Attribute Description

Details

Execution listeners

Active Execution Listeners of the activity. This lets you react to the following events:

  • Start: Occurs when the process instance is started.

  • End: Occurs when the process instance is completed.

Expression

An expression which will be resolved once the task is executed. The expression can either be a value expression such as ${firstName} or it can resolve a named object (e.g. a Spring Bean) and interact with it. For instance, in the above example, a possible expression could be ${clientService.createNewClient(firstName, lastName, email)}.

Delegate expression

An expression which resolved to a named object (e.g. a Spring Bean) which either implements the class JavaDelegate or ActivityBehavior.

Result variable

The name of the variable in which the result of the Service Task’s execution will be stored. If no result variable is indicated, the result will be discarded.

Use local scope

Indicates whether to store the result variable as a local variable.

Class

The fully qualified name of a class which either implements the class JavaDelegate or ActivityBehavior.

Asynchronous

When enabled, the activity will be started as an asynchronous job. The process state is persisted before this element is executed. Then, the process execution will be resumed asynchroneously. This can be used when the execution an activity takes a long time to return the UI to the user quicker in case the user does not need to see the next step immediately. However, if an error occurs before the following wait state, there will be no direct user feedback.

Class Fields

Class fields make it possible to inject field values into your delegated class. You can either inject a fixed string value or an expression. See the section 'Field Injection' of the Flowable documentation for more information.

Triggerable

Sets the Service Tasks to be triggerable. This makes it possible that an external trigger determines when to continue the execution of the process once the Service Task was executed. For instance, in the above example, such an external trigger could be the activation of the new client.