Skip to main content

Form Editor

The Form Editor is the primary means to construct a form using simple drag-and-drop commands. The form is used by other elements such as cases and tasks to interact with the user.

User Interface

The Form Editor interface is roughly divided into four areas:

  • The menu bar on top, just below the navigation bar

  • The palette on the left side

  • The canvas in the middle

  • The attribute bar on the right side

510 design form editor

The following sections describe each area in detail.

The menu bar offers a number of actions, some of them only affecting the currently opened model while others have a more global impact.

510 design form menu bar

GroupIconDescription
Save210 icon saveSaves the currently opened model.
210 icon save allSaves all opened models.
Validate210 icon validateValidates the currently opened model.
Edit210 icon copyCopy the selected element.
210 icon pastePastes the contents of the clipboard.
210 icon cutCuts the currently selected element.
210 icon deleteDeletes the currently selected element.
Protocol210 icon undoUndoes the previous action.
210 icon redoRedoes the most current action.
Zoom210 icon zoom inZooms into the model.
210 icon zoom outZoom out of the model.
210 icon zoom standardResets the zoom level.
210 icon zoom fitSet the zoom level to fit the model.
Documentation210 icon commentsShows all comments made on elements.
210 icon languageSwitches the language of the model.
510 icon form previewView run-time preview.
510 icon display gridlinesShow or hide gridlines.
Model210 icon data model viewerOpens the Data Model Viewer.
210 icon compare revisionsOpens the Revision Editor, see revisions.
210 icon search attributesSearches for an attribute value within the currently opened model.
Export210 icon exportExports the currently opened model, only possible if the model was saved.
Publish210 icon publishPublish an app, see publishing apps.

Drawing Area

A form is a graphical layout of fields that are bound to a data model to allow the data model to be displayed to the user. The fields are arranged in rows on the canvas.

510 design form drawing area rows

Each row is made up of exactly twelve slots. All slots are equal in size, so the width of a slot is one-twelfth the width of the whole form. A field can occupy exactly all slots, or it can occupy only a part of the slots. It is possible to place more than one field in a row.

510 design form drawing area slots

Not every slot needs to be occupied by a field. It is allowed that single slots of a row are empty. These empty slots can be at the beginning, in the middle, or at the end of a row.

510 design form drawing area empty

To create your forms, you can use simple drag-and-drop commands. To do so, select an element in the palette on the left side and drag it to the drawing area. The element is then part of the form.

If you click anywhere in the canvas, you can change specific attributes in the attribute panel on the right side. If you click on an element, you can change its attributes. If you click outside of an element (in the "space between"), you can change the attributes of the form itself, for instance, the outcomes.

Key Concepts

Form Definition

For the BPMN engine, we adhere to the BPMN specification and for the DMN engine, we use the DMN specification. For start and task forms no Oasis specification exists. Therefore, we have defined a JSON-based form definition structure that we use as an output format for the Flowable Form Editor and is used to render start and task forms in the Flowable Task application.

Fields

Field Layout

A field is made up of several parts (all but the widget part are optional):

NameDescription
WidgetThe widget visualizes the data model. Most widgets are interactive and let the user change the data model; however some widgets are read-only. There are widgets to manipulate strings, numbers, dates, rich text, selections, and many others. The widget is located in the center of the field; all other parts are arranged around the widget. The field configuration defines the precise positioning of the field parts.
LabelThe label tells the user to which part of the data model the widget is bound. The label is located on the left side or top of the widget (depends on the field configuration).
Required indicatorThe required indicator is displayed for required fields. Required means that the widget cannot be empty. The required indicator is located on the right side of the widget.
DescriptionThe description gives additional information to the user. This can be formatting instructions or further description about of the App uses the entered value. The description is located on the bottom of the widget.

Fields

Field Alignment

To enhance the readability of a form, the field parts of all fields are aligned among themselves: the labels are aligned, the widgets and descriptions are aligned, the required indicators are aligned.

The alignment is performed per slot. All fields that start in the same slot build a field group. Inside such a field group Flowable looks for the widest label which becomes the dominating label for that slot. All labels in the field group are then enlarged to the same width of the dominating label. This is done by adding space between the label and the widget. This ensures that all widgets and descriptions of a field group start in one line and all.

Field alignment

The only exception is with fields that have top label positions. For these fields, the label, the widget and the description all start at the beginning of the slot.

Field alignment

Binding

Binding is the process to connect the form fields to the data model. The binding in Flowable is always bi-directional. When the user changes the form fields, then those changes are immediately propagated to the data model. On the other side changes in the data model are immediately propagated back to the form fields.

A binding expression defines to which part of the data model the form field is connected. The binding expression has to be a writable front end expression, e.g., {{foo}}, {{case.bar}}.

There are some reserved expressions that cannot be used as they are used internally to save some work item information. The reserved front end expressions are:

  • id

  • definitionId

  • definition

  • type

  • state

  • creationTime

  • updateTime

  • currentUser

Common Component Attributes

There are different available components in the Form Editor. The following attributes are attributes which are shared among all the components.

GroupNameDescription
GeneralIDThis is a unique id for the component.
LabelThe label attribute adds a label to the component, if not empty.
Label positionThe position of the label, you can choose between Left or Top.
Label tooltipWhen it is defined, a question mark icon appears in the component label. When the user hovers over it, it shows this text in a tooltip.
ValueThe binding for the component (if the component is a value component). Use an appropriate expression to bind the component to its value and thus specify where the value is saved read. For example, use {{myVariableName}} to store the value of the component in a variable named myVariableName. Use prefixes to define the scope of the value, e.g., root. for referencing the root case to store the value in or parent. to store the value in the parent work item of the current one. For instance {{root.foo}} stores the value in the root case using a variable named foo. For more information please refer to the Flowable Forms section.
Default valueIf a value is not set, the default value is used (only if the component is a value component). Use an appropriate value; e.g., a text, a number, an id or a comma-separated list.
DescriptionThe description attribute additionally adds a description to the component.
VisibleBoolean value or expression specifies whether the component is visible or hidden. This expression might include another value in the same form, for instance, use a checkbox bound to {{showAdditionalFields}} and use the very same expression as the visible attribute to show or hide the component according to the checked state of the checkbox. If you want only to show the component, if the form is not used as the init-form, you can use the expression {{root.id}} which evaluates to true only, if there is a current id which is not the id in a start form.
IgnoredIf true the component is hidden and the value is not part of the payload.
EnabledA Boolean value or expression specifies whether component is enabled or disabled.
PlaceholderThe text that appears in the component when there is no value. (only if the component is a value component)
ValidationCustom validationsList of additional validations to apply.
DocumentationDocumentationDocumentation intended to explain concepts of its use for future reference.
CustomizationStyle classStylesheet class name. Add any style classes to be applied to the component for the desired styling and rendering.

DataSource Component Attributes

There are different available components in the Form Editor. The following attributes are attributes which are shared among all the components that have a DataSource.

GroupNameDescription
Data sourceData sourceSpecify the data source type: Static (for fixed predefined options or a variable binding), REST (for data coming from any REST endpoint), or Master (for Master Data instances coming from the MasterData REST endpoint of Flowable Work).
ItemsIf the data source type is Static then specify a set of predefined options or a variable binding for the selection list. The name is used as the label in the selection list, and the value is used to store the selected element.
Query URLIf the data source type is REST then specify the REST endpoint URL used to query for the full list of items.
Lookup URLIf the data source type is REST then specify the REST endpoint URL used to retrieve the item by id.
PathWhere to find the array of items in the REST response, e.g., 'data.users'.
Master data keyIf the data source type is Master then specify the key representing the master data to load, e.g. md-country
FormatThis is an expression used to generate the label for each item. For example, Mr. {{$item.name}} {{$item.surname}}. The expression is evaluated against the current work object. The selected item is available as $item.
StorageSpecifies how the data provided by the Data Source is stored in the variable. Choose 'ID' if only the uniquely identifying field (see attribute map to) of the selected entry should be saved in the variable, choose 'Full value' if the whole object should be saved and thus making it possible to display other values of the selected element within the form as well. Pay attention as storing the full value could lead to bloating the variables with unnecessary information depending on the amount of data retrieved by the REST endpoint.
Map toThe attribute of an item into which the value is mapped, which uniquely identifies each item within the set of options. For a Static data source value is commonly used as the map to attribute and for a REST data source id is commonly used as the map to attribute.
Client side filterSpecifies whether the result filtering needs to be done in the frontend rather than in (or in addition to) the backend.
Navigation URLThe URL to navigate to for the selected item. The URL might contain expressions, most likely at least {{$item.id}} to include the id of the selected element in the navigation URL.
TargetSpecifies the target for the navigation URL, use '_blank' to open the selected item in a new window or '_self' to use the same window for navigation.

Common Button Attributes

There are different available components in the Form Editor. The following attributes are attributes which are shared among all the components.

GroupNameDescription
Common buttonButton alignmentThe alignment of the button, either 'Left' or 'Right'.
Icon URLThe URL of the icon to show.
Icon alignmentThe alignment of the icon, either 'Left' or 'Right'.
PrimaryMark the button as primary. This has an impact on the button styling.
TooltipWhen the user hovers the button it will show this text in a tooltip.

Form Outcomes

Form outcomes are used to complete a user task and allow the user to indicate how the completion should be considered, for example, if a task is approved or rejected. Outcomes are typically displayed to the user to select as part of the task or form. These outcomes can be defined in the form details outcomes property or inside the form using an Outcome button group.

By default, if you do not set any outcome, the default Complete outcome is used. There are two additional task actions that are usually displayed with outcomes, Save and Claim. These actions can be configured explicitly to change the default behavior.

To achive this, set one of the following values as the outcome value:

  • __CLAIM : Use this value to configure a claim action in a form. This action will be visible when a task has no assignment. This allows users to claim a task and assign it to themselves.

  • __SAVE : Use this value to configure a save action in a form. This action will be visible only if the task is assigned to a user. It saves the form contents without completing the task, to allow work on it later.

  • __CANCEL : Use this value to configure a cancel action in a form. It cancels the form contents. This is only applicable to modal forms such as start forms.

  • COMPLETE : Use this value to configure a complete action in a form. This action will be visible only if the task is assigned to a user. It completes the task.

Defined at Form Level

In the detail section of the form it is possible to set a list of outcomes that will always be rendered in the task header.

Form Details

Defined inside the Form

It is also possible to configure outcomes inside a form using two form components, they are the Outcomes Button group and Outcome button.

Form Outcomes Button group

The Outcomes Button group has a specific Keep in form property to display these custom outcomes in the task header, like outcomes defined at the form level, as above.

Form Outcomes Keep in Form

Form Components Overview

Flowable Forms provides numerous pre-defined components which enables you to build rich, beautiful forms. There are four categories of components:

  • Data Entry: These components allow users to enter data directly. A typical example is a text field or a date picker.

  • Selection: Selection components offer a number of pre-defined options to choose from. Checkboxes, buttons and radio buttons are commonly used components in this category.

  • Display: These components display content. Images and data tables belong in this group.

  • Container: Container components allow you to better structure your form. Tabs, Wizards and Subforms belong in this group.

Data Entry Components

The following Data entry components are available:

Text

The Text component is the most common element on every form: a simple text field. It is intended to capture short text elements such as the name of a person. It is possible to validate and restrict the component to only accept certain values.

For longer text, consider using the Multiline text component. For numbers, there are two components: Number and Decimal.

Appearance

DesignRendered
Text component designText component rendered

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
Minimum lengthSpecifies the minimum length of the text. By default, there is no minimum length.
Maximum lengthSpecifies the maximum length of the text. By default, there is no maximum length.
Validation regexIt allows you to specify a regular expression (RegEx) with which to validate the text. This enables you to create powerful validations. A regular expression essentially defines a pattern which your text must follow. There are many tutorials and validators online where you can practice regular expressions.
Example: ABC\d{5}
This RegEx would accept the value ABC12345 and would reject 12345 or EFG98765.
Example: [1-9][0-9]{3}
This pattern would accept the values 1000, 1002 or 9999 but would reject 0001 or A200.
Validation maskWith a validation mask, you can define a simple pattern of letters and numbers which the input value must follow. This is especially useful if the user has to enter something like a reference number which always follows the same pattern. See above for a full reference of the mask patterns.
Example: AAA-999
This pattern would accept the value ABC-111 and would reject 999-ABC or AAA-99.
Example: 9999.99$
This pattern would accept the values 1001.01$ and 0000.00$ but would reject 100.99$.
Error messagesMinimum lengthSpecifies the message shown if the defined minimum length is not reached.
Maximum lengthSpecifies the message shown if the defined maximum length is exceeded.
Validation regexSpecifies the error message shown if the value does not match the regular expression validation pattern.
Validation maskSpecifies the error message shown if the value does not match the validation mask pattern.

Multiline Text

The Multiline Text component is very similar to the Text component. It is intended for longer text, e.g., the description of a defect. It expands as the text becomes longer. Naturally, this component’s validation is more limited since longer text usually does not follow a specific pattern.

For short text, you may consider using the Text component. For numbers, there are the two components: Number and Decimal.

Appearance

DesignRendered
Multiline Text component designMultiline Text component rendered

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
DetailsMinimum rowsSpecifies the initial number of rows of text.
Maximum rowsSpecifies the maximum number of rows of the text before scrolling.
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
Minimum lengthSpecifies the minimum length of the text. By default, there is no minimum length.
Maximum lengthSpecifies the maximum length of the text. By default, there is no maximum length.
Error messagesMinimum lengthSpecifies the message shown if the defined minimum length is not reached.
Maximum lengthSpecifies the message shown if the defined maximum length is exceeded.

Rich Text

The Rich Text component is an input field to enter multiple lines of styled text. The content is stored in Markdown or HTML format.

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
GeneralText formatDetermines how the value will be stored: HTML or Markdown. HTML has more options, but has security implications (i.e. do not expose this to unauthorized users).
Minimum rowsSpecifies the initial number of rows of text.
Use spell checkerDetermines whether, or not the spell checker of the browser is used. Please note that the spell checker must be activated in the browser of the user as well.
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
Minimum lengthSpecifies the minimum length of the text. By default, there is no minimum length.
Maximum lengthSpecifies the maximum length of the text. By default, there is no maximum length.
Custom validationsList of additional validations to apply.
Error messagesMinimum lengthSpecifies the message shown if the defined minimum length is not reached.
Maximum lengthSpecifies the message shown if the defined maximum length is exceeded.

Attachment

The Attachment component allows any type of documents (for example, images, PDF files, Microsoft Word files, etc.) to be uploaded. As the attachment is bound to a variable like every other component, the attached documents can be referenced through that variable anywhere later in the process, case or any other form.

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
DetailsUpload URLSpecifies the URL used to upload new attachment content. Leave blank to use default pre-configured endpoints.
Update file URLURL to upload a file when the user chooses to upload a new version of an existing file. Leave blank to disable this feature.
Delete URLWhen Delete URL is provided and the user removes a file, a DELETE request will be fired to that URL. The information in the file can be used if the Delete URL contains expressions with {{$item}}.
Allow file deletionUploaded files can be removed when Allow file deletion is true, or when the file has just been uploaded and Allow file deletion is newOnly.
Drop files textCustom text when dragging and dropping files.
Max. files reached textThe maximum number of attachments allowed to be uploaded, leave it blank for no limit.
Select files textSpecifies the message to be shown in the attachment component to tell the user to select files.
Has content modelWhen true the user will be able to select a content type for the uploaded files and to fill in additional metadata defined by the content model for the file.
Allowed content modelsA list of IDs of content models from which the user can choose as the content type. If empty, all available content models are allowed.
Require content modelWhen true, the user will be forced to select one of the allowed content types.
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
Minimum attachmentsThe minimum number of attachments needed to be uploaded for this component.
Maximum attachmentsThe maximum number of attachments needed to be uploaded for this component.
Valid file extensionsSpecify the valid file extensions separating them by comma (for example .doc, .pdf, .png).
Custom validationsList of additional validations to apply.
Error messagesMinimum attachmentsSpecifies the error message shown if the value is lower than the minimum specified in validation.
Maximum attachmentsSpecifies the error message shown if the maximum number of attachments is already reached.

Number

The Number component allows you to capture integer values, that is whole numbers. Numbers can be both positive and negative. The maximum value for a number is 9007199254740991. The minimum value for a number is -9007199254740991.

Appearance

DesignRendered
Number component renderedNumber component rendered

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
DetailsFormatDefines the format of the number with thousand and decimal separators.
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
MinimumThe minimum value which can be entered in the number field. Optionally, for the runtime value an expression to be evaluated dynamically can be used.
MaximumThe maximum value which can be entered in the number field. Optionally, for the runtime value an expression to be evaluated dynamically can be used.
Error messagesMinimumSpecifies the error message to display if the value is smaller than the minimum value allowed.
MaximumSpecifies the error message to display if the value is larger than the maximum value allowed.

Decimal

The Decimal component allows you to capture decimal values. Decimals can be both, positive and negative. The smallest and largest possible values are 5e-324 and 1.7976931348623157e+308 respectively.

info

Since decimals are represented as 64-bit floating point values, they can represent very large numbers. However, it is very important to note that floating point arithmetic is not precise. For instance, the values 0.1 + 0.2 equates to 0.30000000000000004.

Appearance

DesignRendered
Decimal component renderedNumber component rendered

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
DetailsFraction sizeDefines the maximum number of decimal characters.
FormatDefines the format of the number with thousand and decimal separators.
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
MinimumThe minimum value which can be entered in the number field. Optionally, for the runtime value an expression to be evaluated dynamically can be used.
MaximumThe maximum value which can be entered in the number field. Optionally, for the runtime value an expression to be evaluated dynamically can be used.
Error messagesMinimumSpecifies the error message to display if the value is smaller than the minimum value allowed.
MaximumSpecifies the error message to display if the value is larger than the maximum value allowed.

Date

The Date component offers a convenient way to select a date and optionally a time.

Appearance

DesignRendered
Date component renderedDate component rendered

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
DetailsEnable timeIf true, allows the selection of hour and minute values.
Store without timeStore the date in the payload without any time or timezone information.
FormatThe optional format for the date e.g.:
'DD.MM.YYY' → '10.01.2014'
'MMMM DD, YYYY' → 'January 10, 2014'
'dddd DD MMM, YYYY' → 'Friday 10 Jan, 2014'
See http://momentjs.com for more details.
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
Minimum dateSpecify the earliest date for minimum date validation. You can choose between an absolute date, a relative date in relation to the current date or an expression.
Maximum dateSpecify the latest date for maximum date validation. You can choose between an absolute date, a relative date in relation to the current date or an expression.
Error MessagesMinimum dateSpecifies the error message displayed if the currently selected date is before the minimum date specified.
Maximum dateSpecify the error message displayed if the currently selected date is after the maximum date specified.

Password

The Password component is an input field for entering passwords. The input is rendered with stars '*' instead of plain characters entered by the user.

Appearance

DesignRendered
Password component renderedPassword component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
Minimum lengthThe minimum number of characters required for the password.
Maximum lengthThe maximum number of characters allowed for the password.
Error MessagesMinimum lengthSpecifies the message shown if the defined minimum length is not reached.
Maximum lengthSpecifies the message shown if the defined maximum length is exceeded.

Data Selection Components

Currently, the following Selection components are available:

Radio Buttons

The Radio Buttons component provides a choice between two or more options.

Appearance

DesignRendered
Radio Buttons component renderedRadio Buttons component rendered

Attributes

In addition to the Common component attributes and DataSource component attributes this value component has the following attributes

GroupNameDescription
DetailsOrientationSpecifies how the items are arranged: Horizontal or Vertical. The default arrangement is vertical.
Text optionIf the attribute is not empty an additional ending option named with that string and with a writable text field are added.
note

The Navigation URL and Target data source attributes are not available for this component

Checkbox

A Checkbox indicates a choice between the two Boolean values: true and false. If the checkbox is ticked or selected, the stored value is true, otherwise false.

If the component is marked as Required, it must be ticked (true) for the form to be valid.

Appearance

DesignRendered
Checkbox component renderedCheckbox component rendered

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.

Checkbox Group

The Checkbox Group component provides multiple choices between a list of options.

Appearance

DesignRendered
Checkbox Group component designCheckbox Group component rendered

Attributes

In addition to the Common component attributes and DataSource component attributes this value component has the following attributes

GroupNameDescription
DetailsOrientationSpecifies how the items are arranged: Horizontal or Vertical. The default arrangement is vertical.
Text optionIf the attribute is not empty an additional ending option named with that string and with a writable text field are added.
note

The Navigation URL and Target data source attributes are not available for this component

Text list

The Text list component is an editable list of text strings which look like tags. Contrary to the multi-select component, any value can be entered by the user even if a static DataSource is modeled.

Attributes

In addition to the Common component attributes and DataSource component attributes this value component has the following attributes

GroupNameDescription
ValidationMinimum elementsWhen Multi-selection is enabled, it specifies the minimum number of items to be selected.
Maximum elementsWhen Multi-selection is enabled, it specifies the maximum number of items to be selected.
Custom validationsList of additional validations to apply.
RequiredThe required flag specifies whether entering a value for the component is mandatory or not.
Error messagesMinimum itemsWhen Multi-selection is enabled, it specifies the error message shown if the number of items selected is lower than the minimum specified in the validation.
Maximum itemsWhen Multi-selection is enabled, it specifies the error message shown if the number of items selected is lower than the maximum specified in the validation.

Select (Single)

The Single Select or drop-down component allows a user to select a single element from a list of choices. The component supports auto completion which is helpful when working with long lists.

Appearance

DesignRendered
Select (Single) component renderedSelect (Single) component rendered

Attributes

In addition to the Common component attributes and DataSource component attributes this value component has the following attributes

GroupNameDescription
AutocompleteEnable autocompleteWhen true, the user can filter the list by typing part of the text.
Input min. lengthThe filtering of the list starts after this number of characters are entered. The default is 1.
ValidationRequiredThe required flag specifies whether entering a value for the component is mandatory or not.
Error messagesInvalid selectionSpecifies the error message to display if the selection is invalid.

Select (Multiple)

The Multiple Select allows a user to select one or more elements from a list of choices. All elements are stored in a list.

The component has support for auto completion which is helpful when working with long lists.

Appearance

DesignRendered
Select (Multiple) component renderedSelect (Multiple) component rendered

Attributes

In addition to the Common component attributes and DataSource component attributes this value component has the following attributes

GroupNameDescription
AutocompleteEnable autocompleteWhen true, the user can filter the list by typing part of the text.
Input min. lengthThe filtering of the list starts after this number of characters are entered. The default is 1.
ValidationMinimum elementsWhen Multi-selection is enabled, it specifies the minimum number of items to be selected.
Maximum elementsWhen Multi-selection is enabled, it specifies the maximum number of items to be selected.
Error messagesMinimum elementsWhen Multi-selection is enabled, it specifies the error message shown if the number of items selected is lower than the minimum specified in the validation.
Maximum elementsWhen Multi-selection is enabled, it specifies the error message shown if the number of items selected is lower than the maximum specified in the validation.
Invalid selectionSpecifies the error message to display if the selection is invalid.

Person

The Person component is a specialized Single Select which allows for the selection of a user from a list. By default, the ID of the selected is stored. This component is already preconfigured with the attributes set for selecting a person.

Group of People

The Group of People component is a specialized Single Select which allows for the selection of a group from a list. By default, the ID of the selected group is stored. This component is already preconfigured with the attributes set for selecting a group.

Button

The Button component specifies a URL link for navigation. The URL is a relative or absolute value.

Appearance

DesignRendered
Button component renderedButton component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
GeneralButton textThe text rendered within the button. You can also use expressions (for example, 'click here to go to {{name}}').
DetailsNavigation URLSpecify the URL to navigate to, might be an absolute value (for example, 'http://www.flowable.com') or a relative URL. The link might also contain expressions (e.g., '#/work/all/process/{{myProcessId}}').
Context variablesParameters added to the URL.
Common linkTargetThe target for the button link, use '_blank' to open the link in a new window or '_self' to stay in the same window.

REST Button

The REST Button provides a way to perform a GET request on a REST endpoint. That way, data can be loaded dynamically at runtime into the form. The response is stored in the Value variable.

Setting a REST Button to Auto Execute is possible. This allows for even more dynamic integration scenarios.

Appearance

DesignRendered
REST Button component renderedREST Button component rendered

Attributes

In addition to the Common component attributes and Common button attributes this value component has the following attributes

GroupNameDescription
GeneralButton textThe text rendered within the button. You can also use expressions (for example, 'click here to go to {{name}}').
DetailsREST URLThe REST endpoint from where data is retrieved.
Response data pathWhere to find data in a JSON response.
Store response attributesMap some attributes from the response into the payload with frontend expressions. For example, attribute attributeFromResponse can be accessed through {{$response.attributeFromResponse}}.
Value expressionExpression that returns the value to store. $response keeps the value returned by the REST call. For example, {{flw.round($response.returnedValue, 2)}}. If the path is defined, $response keeps the value of the REST response in that path.
Refresh timeThe interval (in milliseconds) to execute the button automatically. If it is not defined, it does not execute automatically.
Auto executeAuto executes the button when rendered.
Execute alwaysIf button should also be auto-executed when in a read-only form.

Expression Button

The Expression Button executes a Form Expression and stores the value in the Value variable. For more information please refer to the Flowable Forms section.

Attributes

In addition to the Common component attributes this value component has the following attributes

GroupNameDescription
GeneralButton textThe text rendered within the button. You can also use expressions (for example, 'click here to go to {{name}}').
Expression buttonExpressionThe expression executed to save the result into the button value.
Refresh timeThe interval (in milliseconds) to execute the button automatically. If it is not defined it does not executed automatically.
Auto executeAuto executes the button when rendered.
Execute alwaysIf button should also be auto-executed when in a read-only form.

Action Button (Flowable Work)

The Action Button component is bound to an Action definition which triggers an Action bot in the backend. This can be used for triggering various operations in the backend from a form.

Attributes

In addition to the Common component attributes and Common button attributes this value component has the following attributes

GroupNameDescription
GeneralOverride button textReplace the default action button text with this (leave blank to use default action name).
DetailsAction definition keyKey of the action definition.
Definition Id(s)Comma separated ids of scope definitions
Scope idId of the Scope definition
Scope typeType of the Scope definition
Send full payloadSend the whole payload when executing the action. When the action definition has a form, that form payload is sent instead.
Send full scopeSend the scope of this action button when executing the action. When the action definition has a form, that form payload is sent instead.
Send payload mapSend a mapping of the current scope (you can use also $payload.something expressions).
Store full responseStore all the attributes iofn the response into the payload.
Store response inside scopeStore the response attributes in the current scope or in the payload root.
Store response attributesMap some attributes from the response into the payload with frontend expressions. For example, attribute attributeFromResponse can be accessed through {{$response.attributeFromResponse}}.
Send scope id to get definitionSend the scope id to the action definition GET request (it is always sent to the execute POST request). Unchecking it may lead to less requests fired when several buttons pointing to the same action definition are rendered in the same form.
Navigation URLSpecify the URL to navigate to, might be an absolute value (for example, 'http://www.flowable.com') or a relative URL. The link might also contain expressions (e.g., '#/work/all/process/{{myProcessId}}').
Permission groupsUser groups that will see this button. All the users will see it if this attribute is left empty. Note: The default permission checks defined in the action button are also applied when executing it.
Expression buttonRefresh timeThe interval (in milliseconds) to execute the button automatically. If it is not defined it does not executed automatically.
Auto executeAuto executes the button when rendered.
Execute alwaysIf button should also be auto-executed when in a read-only form.

Outcome Button

The Outcome Button component fires the main form actions (save, complete...) as well as custom form outcomes. See also Form outcomes defined inside the Form for general information about form outcomes.

Attributes

In addition to the Common component attributes and Common button attributes this value component has the following attributes

GroupNameDescription
DetailsIgnore payloadIgnores the form data and any validation on it and just sends the outcome value.
Ignore validationIgnores the form validation and just sends the payload and outcome value.
Navigation URLSpecify the URL to navigate to, might be an absolute value (for example, 'http://www.flowable.com') or a relative URL. The link might also contain expressions (e.g., '#/work/all/process/{{myProcessId}}').

Display Components

Currently, the following Display components are available:

Text Display

The Text Display component is used to display unformatted text.

If you need formatting or other advanced features, use the HTML Display component.

Appearance

DesignRendered
Text Display component renderedText Display component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
GeneralContentThe to text display.

HTML Display

The HTML Display component allows for the display of complex, formatted text in HTML format.

If you do not need formatting or other advanced features, use the Text Display component.

Appearance

DesignRendered
HTML Display component renderedHTML Display component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsContentThe HTML formatted text to display.
Show borderShow a border around the component.
URLURL where to get HTML content.

List

The List component displays a list of items.

Appearance

DesignRendered
List component renderedList component rendered

Attributes

In addition to the Common component attributes and DataSource component attributes this component has the following attributes

GroupNameDescription
DetailsControl HeightThe height of the control.
TitleIf specified, a title rendered within the list in addition to the label of the list.
Title navigation URLSpecifies a global navigation URL rendered within the title of the list. Use this attribute for instance if you want to navigate to an extended list or the like. Expressions can be used to build the URL, but only global ones, the 'item' is not available here.
CollapsibleSpecifies if the list is collapsible with an arrow button.

Image

The Image component displays an image.

Appearance

DesignRendered
Image component renderedImage component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsSource URLThe image source URL, which can also contain expressions.
Image max. heightSpecifies the maximum height for the image in pixels (for example, 150).
Refresh time (seconds)If provided, the image is refreshed after the specified number of seconds.
Navigation URLIf provided, the image opens the given URL when clicked.
TargetThe target to be used for the navigation link, use '_blank' top open the navigation in a new window or '_self' to stay in the current window for the navigation.

The Link component allows you to navigate to any URL, internal or external.

Appearance

DesignRendered
Link component renderedLink component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsLink textThe text rendered as the link. You can also use expressions (for example, 'click here to navigate to {{foo}}').
Navigation URLSpecify the URL to navigate to, might be an absolute value (for example, 'http://www.flowable.com') or a relative URL. The link might also contain expressions (e.g., '#/work/all/process/{{myProcessId}}'). The URL to be defined should not be encoded as it is encoded automatically.
Context variablesParameters to add to the URL.
Common linkTargetThe target for the button link, use '_blank' to open the link in a new window or '_self' to stay in the same window.

PDF Document

The PDF Document component displays the preview of a PDF file.

Appearance

DesignRendered
PDF Document component renderedPDF Document component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsDocument sourceThis depends on the selected value of source type. If it is a URL, this property specifies the URL of the document to preview, but if it is an expression, this property specifies the form data source of the document or multiple documents to be previewed. If it is an array (multiple documents), the component shows a gallery that can be configured with title, file and thumbnail properties.
HeightThe height of the PDF preview in pixels; an expression is valid.
Show borderIf selected, the PDF preview is displayed with a border

The Document Gallery component shows a list of thumbnails linked to images.

Attributes

In addition to the Common component attributes and DataSource component attributes this value component has the following attributes

GroupNameDescription
DetailsThumbnailPath to thumbnails in data response, for example, '{{$item.thumbnail}}'.
ImagesPath to images in data response, for example, '{{$item.images}}'.
FilePath to files in data response, for example, '{{$item.file}}'.
Open documentOpen document flag.

Data Table

The Data Table component allows you to display complex data in a tabular form.

Through the Selection Mode, Data Tables can also serve as input components. Selected rows are stored in a variable.

Attributes

In addition to the Common component attributes and DataSource component attributes this value component has the following attributes

GroupNameDescription
DetailsShow paginationEnable the pagination bar and buttons.
Client side paginationEnable browser-side pagination.
ColumnsA list of objects containing column definitions.
FilterableAllow filtering per column.
SortableDefines if the columns are sortable.
Page sizeThe number of rows per page.
Page size optionsOptions for the page size selector. Default is: [5,10, 20, 25, 50, 100].
Show total recordsEnable to show the total number of records found.
Row URLURL to go when clicking on a row. It can have column accessor expressions, e.g., ,{{$row.first_name}}.
Sort ascendingWhen a column is sorted in ascending mode, this string is sent to the server.
Sort descendingWhen a column is sorted in descending mode, this string is sent to the server.
Sort patternFor every column used in a multi-sort, this pattern is computed. You can use '{{$sortItem.id}}', (the column ID) and '{{$sortItem.direction}}'.
Sort separatorIn a multi-sort, one or more characters can be used to separate the items. The sort pattern is repeated for every selected column and separated by the sort separator and the result is a string that is used in the query URL with the expression '{{$sort}}'.
Filter patternFor every filterable column where the user typed a value, this pattern is computed. You can use '{{$filterItem.id}}' (the column ID) and '{{$filterItem.value}}' (the text the user wrote in the filter box).
Filter separatorThe filter pattern is repeated for every column (with a filter value) and separated by the filter separator and the result is a string that can be used in the query URL with the expression '{{$filter}}'.
No data messageThe message shown when there is no data.
Conditional formattingEach rule is an Object which should contain a condition and an optional style.
Data sourceShow the refresh buttonDisplay a button with the ability to reload data in the table.
note

The Navigation URL and Target data source attributes are not available for this component

Horizontal Line

The Horizontal Line component draws a line that can help to improve the structure of forms.

Appearance

DesignRendered
Horizontal Line component designHorizontal Line component rendered

Attributes

This component contains only the Common component attributes

Alert

The Alert component can be used to display notifications or temporary messages to the user.

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsTitleThe title of the alert notification.
ValueThe message to display.
SeverityThe severity of the alert changes the color and default icon.
Default iconWith this property, you can override the icon shown inside the alert component.
Close iconShow or hide the icon to close the alert component.
Close buttonShow or hide the a button to close the alert component.
Close button textThe text for the close button.
Custom icon URLUrl of a custom decoration icon.

Chart (Flowable Work)

The Chart component displays graphical representations of reporting data.

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsFeatureWork feature to represent (tasks, cases, processes)
FilterFilter to apply on chart elements in time interval.
FromStart date of the data set to represent.
ToEnd date of the data set to represent.
Chart typeType of chart for the representation (bars, lines, pie).
Group byX Axis. Group data by definition or by time amount.
Report typeY Axis. Which attribute of the data to represent (frequency, duration).
Definition Id(s)Comma separated definition ids of instances to display in the chart.
Definition Key(s)Comma separated definition keys of instances to display in the chart.
Show LegendShow Chart Legend.

Container Components

Currently, the following Container Components are available:

Panel

The Panel component is a way to structure forms. If multiple panels are placed on the same row, the whole row is as large as the tallest panel.

Appearance

DesignRendered
Panel component designPanel component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
GeneralStore panel data into single variableThe binding for the component. Use an appropriate expression to bind the component to its value and specify where the value is saved/read. For example, use {{myVariableName}} to store the value of the component in a variable named myVariableName. Use prefixes to define the scope of the value, for example, root. for referencing the root case to store the value in or parent. to store the value in the parent work item of the current one. For example, {{root.foo}} stores the value in the root case using a variable named foo. For more information please refer to the Flowable Forms section.
DetailsCollapsibleIf true, the panel is collapsible.
CollapsedIf true, the contents are initially hidden but displayed on expansion.
Show borderIf true, show a border around the panel.

A Modal is used to show a panel container definition as a controlled emergent window.

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
GeneralStore panel data into single variableThe binding for the component. Use an appropriate expression to bind the component to its value and specify where the value is saved/read. For example, use {{myVariableName}} to store the value of the component in a variable named myVariableName. Use prefixes to define the scope of the value, for example, root. for referencing the root case to store the value in or parent. to store the value in the parent work item of the current one. For example, {{root.foo}} stores the value in the root case using a variable named foo. For more information please refer to the Flowable Forms section.
DetailsCollapsibleIf true, the panel is collapsible.
CollapsedIf true, the contents are initially hidden but displayed on expansion.
Show borderShow a border around the panel.

Tabs

Tabs are a way to organize complex forms. Each tab represents one section of a form.

To add a new tab, drop a "Tab/Section Panel" component into a tab container.

Tabs are moved by clicking on the < and > symbols in the Designer.

Appearance

DesignRendered
Tabs component designTabs component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
Show borderShow a border around the panel.
DetailsInitial sectionThe section number that is opened initially.
Show borderShow a border for the component.
Sections orderThe display order of the sections in the component.

Accordion

The Accordion component is a container that allows one to group related information into sections. The sections are then stacked beneath each other. The individual sections can be expanded and collapsed on demand.

In order to add a new section to the accordion, simply drag a new "Tab/Section Panel" component into the accordion. The order of the sections can be controlled in the canvas.

Appearance

DesignRendered
Accordion component designAccordion component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsInitial sectionThe section number that is opened initially.
Show borderShow a border for the component.
Sections orderThe display order of the sections in the component.

Wizard

The Wizard component provides a structured way to enter data. Each Wizard page is typically dedicated to a specific topic.

In order to add a new page to the wizard, simply drag a new "Tab/Section Panel" component into the accordion. The order of the sections can be controlled in the canvas.

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsShow last page footerSet visibility of the Final action button in the last step.
Next enabledEnable the btn:[Next] action button.
Next visibleSet the visibility of the btn:[Next] action button.
Previous enabledEnable the btn:[Previous] action button.
Previous visibleSet the visibility of the btn:[Previous] action button.
Initial pageNumber of the page that is initially opened.
Show borderShow a border for the component.
Tabs orderThe display order of the tabs in the component.
Previous button textThe text used in the btn:[Previous] button.
Complete button textThe text used in the btn:[Complete] button.
Next button textThe text used in the btn:[Next] button
Start button textThe text used in the btn:[Start] button.

Tab/Section Panel

Tab/Section Panels are a way to organize tabs, wizards and accordions forms.

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
ValidationServer validation URLWhen the user clicks on Next button from this page a request will be done to this URL. If the server validation fails the wizard will not advance to the next page and an error is shown.
Server validation result pathIf the validation server returns a json, this attribute points to the path of the validation result in that json. For example, data.validationResult.
Result messageIf the validation server returns a json, this attribute points to the path of the validation failure message in that json. For example, data.errorMessage.
Server validation methodWhen it is POST it will fire the validation request using POST method instead of GET.

Button Group

Button Groups are a container which allows for the grouping of buttons. Buttons in a group are all the same size and can be aligned.

To add a new button to the group, simply drag them into the button group on the canvas.

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
GeneralButton alignAlign the button, either left, right or center.

Outcome button Group

Outcome Button Groups are used to hold buttons which will need to be rendered in the main form action bar. To add a new button to the group, simply drag it into the button group on the canvas.

This special button group can also be kept where modeled if attribute Keep in form is checked. See also Form outcomes defined inside the Form for general information about form actions and outcomes.

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
GeneralButton alignAlign the button, either left, right or center.
DetailsKeep in formEnable this attribute to prevent this outcome button group to be rendered in the header, and rather render it where modeled in the form.

Subform

Subforms allow for the creation of a form within a form. That way, form definitions can be re-used which allows you to encapsulate complexity and helps reduce duplication.

By activating the "Multiple elements" option, subforms can store complex lists.

Appearance

DesignRendered
Subform component designSubform component rendered

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
GeneralStore subform data in single variableThe binding for the component. Use an appropriate expression to bind the component to its value and specify where the value is saved/read. For example, use {{myVariableName}} to store the value of the component in a variable named myVariableName. Use prefixes to define the scope of the value, for example, root. for referencing the root case to store the value in or parent. to store the value in the parent work item of the current one. For example, {{root.foo}} stores the value in the root case using a variable named foo. For more information please refer to the Flowable Forms section.
DetailsForm referenceThe referenced form used as a subform. You can either select a form reference directly (static) or even use an expression in order to dynamically specify the subform used at runtime.
Show borderIf true, the subform renders a border around the list of elements in it.
Multiple elementsIf multiple elements are set to 'true', the subform can hold more than one entry and the variable the subform is bound to contain a list of maps holding the data shown in the subforms. Set multiple elements to 'false', if there should only be one subform shown and the variable the subform is bound to hold a map rather than a list of maps.
Minimum elementsIf provided, the minimum number of elements in the subform that must be added. Either provide a fixed number of an expression to specify the minimum number of elements in the subform or leave it blank, if there is no limitation.
Maximum elementsIf provided, it limits the addition of elements to the specified value. Either provide a fixed number of an expression to specify the maximum number of elements in the subform or leave it blank, if there is no limitation.
Show add buttonWhen multiple entries is true, it shows or hides the btn:[Add] button.
Show remove buttonWhen multiple entries is true, it shows or hides the btn:[Delete] button.
Add button textThe text of the button which adds new elements.
CollapsibleIf true, the subform is collapsed or expanded by clicking on an arrow.
CollapsedIf true, the subform is collapsed.
Error messagesMinimum elementsSpecifies the message to be displayed if the minimum number of elements in the subform is not reached.
Maximum elementsSpecifies the message to be displayed if the maximum number of elements in the subform is not reached.

IFrame

The IFrame component allows the display of a web page inside a form.

Attributes

In addition to the Common component attributes this component has the following attributes

GroupNameDescription
DetailsSource URLThe URL of the source to be displayed in the iFrame. Expression can define the URL value. This is an example for embedding a Google map 'https://www.google.com/maps/embed/v1/place?key={{myGoogleAPIKey}}&q={{myLocation}}'.
HeightThe height of the iFrame is specified in pixels and can be an expression.
Show borderIf selected, the iFrame is displayed with a border.
Scrolling typeDecides how to attach a scrolling bar to the iFrame. Scrolling type 'Auto' means the scrolling bar appears just if the content of the iframe is taller than its height. Scrolling type 'Yes' means the scrolling bar always appears. Scrolling type 'No' means the scrolling bar never appears, so part of the iFrame can be potentially hidden.

Translating the Form

In the top right of Flowable Design, you will see the language selector. By default it is set to EN, but if you click it you can add the language you want. In this case French:

Language

With this selected you can now see options in each element to fill in the French information:

Language

This also applies to sub-panels in the form:

Language

For the radio buttons, you need to click the values panel and then you will see the French option:

Language

Flowable Forms Cheatsheet

This document aims to provide users of Flowable Forms with a brief introduction to the most essential concepts surrounding the use of Form Expressions. For a more complete discussion see Form Expressions in the Flowable Developer Guide.

About Form Expressions

Flowable Forms is built on the React technology. As such, there are many dynamic elements. To facilitate working with Flowable Forms, so-called Form Expressions were introduced to perform important tasks with a simple yet powerful expression language. A simple Form Expression consists of two curly braces and an enclosed variable, e.g., {{your_expressions}}. However, it is also possible to construct more complex Form Expressions for specific use cases. That way, modelers can concentrate on modeling instead of coding.

While there are many places where Form Expressions are used, easily the most important one is for binding variables. Many form components require you to set a value, often referred to as binding. Using a Form Expression, it is possible to define what value a form component displays and where it saves its value. For instance, a text field which saves its value to the variable firstName would look like this: {{firstName}}. If that same variable were used in another form, where firstName was already set, it would display the value.

Another common use case for Form Expressions is in so-called Runtime Conditions. These conditions allow you to change certain aspects of a component dynamically. For instance, it is possible to make a text field required if the variable age is greater than 18 with the following expression: {{age > 18}}. This expression is set into the "Required" field of the component.

Components which are only used for formatting can also benefit from the fact that JavaScript functions can also be applied to values in Form Expressions. For instance, if you want to return the lower-case version of a string, simply add toLowerCase() at the end of your value: {{clientName.toLowerCase()}}. It would even be possible to chain several JavaScript functions. The following expression implements turns the name of a person into an email address, albeit in a very rudimentary way: {{txt1.replace(' ', '.').toLowerCase() + '@' + 'flowable.com'}}.

There are many online references that can be consulted, for instance, the Mozilla Developer Network. For instance, the documentation about Numbers describes not only important principles but also lists many useful functions that can be used.

Common Form Expressions and Use Cases

The following table shows some examples to achieve some of the most common tasks.

DescriptionExpression
product is equal to selectedProduct{{product == selectedProduct}}
amount is equal to 0 and it is made sure that amount is a number{{amount === 0}}
product is equal to the string 'abc'{{product == 'abc'}}
product is not equal to 'abc'{{product != 'abc'}}
amount is less than 1000{{amount < 1000}}
amount is less or equal to 1000{{amount <= 1000}}
amount is greater than 1000{{amount > 1000}}
amount is greater or equal to 1000{{amount >= 1000}}
product has a value (exists){{product}}
product was defined{{product != undefined}}
product has no value or is false or is "falsy"{{!product}}
Boolean value isGoldClient is true{{isGoldClient}} or {{isGoldClient = true}}
Boolean value isGoldClient is false{{!isGoldClient}} or {{isGoldClient == false}}
Logical And (is true if all variables evaluate to true){{isGoldClient && income > 7000}}
Logical Or (is true if one of the variables evaluate to true){{isGoldClient || income > 12000}}
Check if a complex JSON variable client contains a variable clientId{{client.hasOwnProperty('clientId')}}
Get the number of elements in the array suppliers{{suppliers.length}}
Get the index (position) of clientId in the clients{{clients.indexOf(clientId)}}
Convert a string to lowercase letters{{textField.toLowerCase()}}
Replace Hi in the String with Hello{{textField.replace('Hi', 'Hello')}}
Check if the value of the variable greeting contains the letters "hello".{{greeting.includes('hello')}}

Truthiness and Falsiness

Unlike Java and other languages, JavaScript knows the concept of "truthy" and "falsy". This differs from the strict definition where a value is only true if it evaluates to a true boolean value as it is the case with Back End Expressions.

A value in Form Expressions evaluates to true if:

  • If a value is the Boolean value true

  • If a value is a string, e.g., 'Product A'

  • If a value contains an object, e.g., a date, a case etc.

  • If a value is a number (positive or negative, with or without fraction)

  • If a value is {} or []

  • If a value is Infinity or -Infinity

A value in Form Expression evaluates to false if:

  • If a value is the Boolean value false

  • If a value is null

  • If a value is undefined

  • If a value is 0

  • If a value is an empty string, i.e., '' or "".