Skip to main content
Version: 2.4

Form Effects Reference

This page is the compact persisted-schema reference. Open the topic page for execution details and worked examples.

NeedPage
Trigger forms and whenTriggers and conditions
set, copy, dispatchActions
clear modes and arrayBehaviorClearing and resetting
script, runEffect, action orderingScripts and execution order
Paths, context, data sourcesPaths and expressions
$row and nested widgetsArrays and nested forms
Validation and runtime errorsDiagnostics and troubleshooting

Schema Location

Effects are stored in the root schema's effects array:

{
"type": "object",
"properties": {
"firstName": {"type": "string"},
"lastName": {"type": "string"},
"fullName": {"type": "string"}
},
"layout": ["firstName", "lastName", "fullName"],
"effects": [
{
"id": "combine-names",
"listen": ["$value.firstName", "$value.lastName"],
"when": "${$value.firstName != null || $value.lastName != null}",
"do": [
{
"type": "set",
"field": "fullName",
"value": "${[$value.firstName, $value.lastName].filter(x => x).join(' ')}"
}
]
}
]
}

Effect Object

PropertyRequiredTypeDescription
idConditionalstringIdentifier used for diagnostics and references. Required and unique for an invoked effect. Unique IDs are recommended for every effect.
nameNostringHuman-readable label used only for display and documentation.
descriptionNostringLonger human-readable explanation. It does not affect execution.
listenConditionalstring[]Paths watched by a value-change effect. Mutually exclusive with trigger.
triggerConditionalEffectTriggerA widgetEvent or invoked trigger. Mutually exclusive with listen.
whenNostringJEXL condition. The effect runs only when it evaluates to boolean true.
doYesEffectAction[]Actions executed in array order when the condition passes.
disabledNobooleanKeep the effect in the schema but skip it at runtime.
runOnInitializationNobooleanRun a value-change effect once after initialization settles. Default: false.

When when is omitted, the condition is treated as satisfied and do runs after the trigger fires.

An effect is one of three forms:

// Value change
{listen: string[], when?: string, do: EffectAction[]}

// Widget event
{trigger: {type: 'widgetEvent', objectPointer: string, event: string}, do: EffectAction[]}

// Explicit invocation
{id: string, trigger: {type: 'invoked'}, do: EffectAction[]}

Widget Event Catalog

Representative built-in widget events include:

WidgetEventsKnown payload
dtl-button, dtl-create-entity-button, dtl-submit-request-buttonsuccess, errorOperation-specific response
dtl-fluent-inplacesaveSuccess, saveError, scriptSuccess, scriptErrorSave or script outcome
dtl-attachments-widgetuploadSuccess, uploadError, uploadScriptSuccess, uploadScriptError, deleteAttachmentSuccess, deleteAttachmentError, deleteAttachmentScriptSuccess, deleteAttachmentScriptErrorUpload, deletion, or script response
dtl-fluent-accordionpanelOpened, panelClosedindex, header
dtl-fluent-tabactiveTabChangedpreviousIndex, activeIndex, previousId, activeId
dtl-fluent-stepsactiveStepChanged, stepsViewStateChangedTransition IDs/indexes or visited-step counts
dtl-fluent-accordion-arrayactiveItemChangedNullable previousIndex, activeIndex
dtl-form-input-textleftIconClicked, rightIconClickedNo payload
dtl-clipboard-buttoncopySuccess, copyErrorError reason when copying fails
LOV widgets with create supportitemCreatedid, value

This table is intentionally representative. The selected widget's event list in the Form Designer is the source of truth for the installed widget version.

Legacy widget actions

Older schemas can contain successDo, errorDo, saveSuccessDo, or similar arrays inside widget configuration. They remain runtime-compatible. When the schema is edited, the Form Designer migrates them to root widget-event effects and removes the legacy arrays from the widget configuration.

Legacy ${$response.total} expressions may become ${$event.payload.total}. This is equivalent to the preferred ${$payload.total} form.

Configuration Effects

Plugins and base-form configurations can supply predefined effects for an entity type. These effects:

  • use the same runtime contract as schema effects;
  • are visible but read-only in the Form Designer;
  • are applied automatically to forms using that configuration;
  • can be deactivated for one schema by ID.

The designer persists deactivation as a minimal disabled stub:

{
"id": "configuration-effect-id",
"disabled": true,
"listen": [],
"do": []
}

At runtime, configuration and schema effects are matched by id. A disabled schema stub suppresses the matching configuration effect. Other form-owned effects remain unchanged.

To deactivate a configuration effect:

  1. Open the form in the Form Designer.
  2. Open Effects.
  3. Expand the effect in Configuration Effects.
  4. Enable Deactivate this effect in schema.