Custom Form Elements

Custom form elements are developed within an organization to provide custom functionality for forms in the organization's workflows. The specific functionality provided by a Custom form element is up to the organization. For example, an organization could develop a form element that presents a table with selectable rows.

Each Custom form element that an organization develops is assigned a unique type. To use a Custom form element, you add a Custom element to your form and set the Custom Type property to the element's unique type.

See also...

Custom Development

Custom Form Element Properties

The Properties table describes the properties of the Custom form element.

The type of a property defines what types of values the property can have. Many properties are type string, which means that the property's value is text. Boolean properties can be true or false. Some properties have more than one possible type.

Property names in Workflow Designer's Properties panel are written using the capitalization and spacing of a title. Property names in expressions are valid JavaScript identifiers and start with a lower case letter.

In the table below:

Expressions are case sensitive. When you access a form element property in an expression, you must use the correct capitalization.

Properties of the Custom Form Element

Accessible Description

Type: String

Name in Properties Panel: Accessible Description

Name to Use in Expressions: accessibleDescription

An accessible version of the description of the element. The accesible description is not visible on the page; it is hidden.

You can use the Accessible Description property to provide a description that can be used by assistive technologies, such as screen readers.

Custom Type

Type: String

Name in Properties Panel: Custom Type

Name to Use in Expressions: customType

The type of Custom form element. The type is specified in the custom activity that registers the Custom form element.

To access the customType property in an expression:

${Display Form ID}.state.{Element ID}.customType

For example:

$form1.state.custom1.customType

Description

Type: String

Name in Properties Panel: Description

Name to Use in Expressions: description

A description of the element. The description appears below the element's title.

You can use the Description property to describe what the element represents or to provide instructions to the user about how to use the element.

You can format the description using Markdown.

Element ID

Type: String

The element's ID, which is used in other form elements and activities to access the element's properties, including the user's input. The ID must be unique across all elements in the form.

You cannot set the value of the Element ID property in an expression—you can only use the value that you configured for it. To use the Element ID property in an expression:

${Display Form ID}.state.{Element ID}.{property name}

For example:

$form1.state.custom1.visible

enabled

Type: Boolean

The code for the Custom form element must implement support for enabling and disabling the element. Otherwise the enabled property will never be set.

If the Custom form element supports enabling and disabling, then the enabled property indicates whether the element is enabled in the running workflow.

When a form element is enabled, the user can interact with it. When it is disabled, the user can see the form element but cannot interact with it.

To access the enabled property in an expression:

${Display Form ID}.state.{Element ID}.enabled

For example:

$form1.state.custom1.enabled

error

Type: String | MarkdownRef

Indicates whether an error occurred in the element.

We recommend using the Set Form Element Error and Clear Form Element Error activities to work with errors in form elements.

styleName

Type: String

Indicates the name of the style that will be applied to the element.

To access the styleName property in an expression:

${Display Form ID}.state.{Element ID}.styleName

For example:

$form1.state.custom1.styleName

Title

Type: String

Name in Properties Panel: Title

Name to Use in Expressions: title

The element's title, which appears at the top of the element. You may want to change the title to describe what the element represents in your workflow.

You can format the title using Markdown.

Title Location

Type: String

Name in Properties Panel: Title Location

Name to Use in Expressions: titleLocation

Specifies whether the element's title appears above (default) or beside the element.

The value must be either "above" or "beside".

type

Type: String

The variety of form element. Custom elements are type "Custom".

Use the type property to find out the variety of a form element in a form with many elements. Loop through ${Display Form ID}.state, comparing each element to the known form types and performing some action on the elements that meet your type criteria.

To access the type property in an expression:

${Display Form ID}.state.{Element ID}.type

For example:

$form1.state.custom1.type

value

Type: any

The code for the Custom form element must implement support for the value. Otherwise the value property will never be set.

If the Custom form element supports having a value, then the value property is the element's current value.

To access the value property in an expression:

${Display Form ID}.state.{Element ID}.value

For example:

$form1.state.custom1.value

Visible

Type: Boolean

Name in Properties Panel: Visible

Name to Use in Expressions: visible

Indicates whether the element is visible to the user. By default, Custom elements are visible. If you want to hide the element, clear the Visible checkbox. You may want to change the visibility at run time depending on the user's input in a previous form element.

To access the visible property in an expression:

${Display Form ID}.state.{Element ID}.visible

For example:

$form1.state.custom1.visible

Custom Form Element Events

The following table describes the events associated with the Custom form element.

Events for the Custom Form Element

load

The load event fires when the element finishes loading.

You can use the load event to set one or more of the element's properties at run time. For example, you could set the element's initial value.

change

The code for the Custom form element must implement support for firing the change event. Otherwise the change event will never fire.

If the Custom form element supports the change event, then the change event fires when the user enters some input.

You can use the change event to create dependencies between form elements. For example, you could configure a change subworkflow that enables or disables other form elements depending on the user's input.

The change event fires every time the user's input changes. This means that the change subworkflow can run multiple times. Because of this, you should make sure that the change subworkflow is not computationally intensive or long running.

click

The code for the Custom form element must implement support for firing the click event. Otherwise the click event will never fire.

If the Custom form element supports the click event, then the click event fires when the user clicks a button in the Custom form element.

custom

The code for the Custom form element must implement support for firing the custom event. Otherwise the custom event will never fire. The code controls when the custom event fires.

validate

The validate event fires when the user clicks a button that causes validation.

You can use the validate event to verify that the user's input is valid before allowing the form to submit. If the input is not valid, use the Set Form Element Error activity to display an error to the user and prevent the form from submitting. If the input is valid, use the Clear Form Element Error activity to clear an existing error and allow the form to submit.

If you use a Set Form Element Error activity, make sure you also use a Clear Form Element Error activity to clear the error. Otherwise, the form may get stuck in an invalid state.

For an example, see Example - Subworkflow for a Validate Event.