Skip to main content
Version: 2.5

Form Logic Editor

The Form Logic Editor is a visual view of a form's effects and dynamic JEXL dependencies. It helps you answer questions such as:

  • Which fields trigger this effect?
  • Which controls can this action change?
  • What does a widget event start?
  • Does a chain contain a field cycle or recursive runEffect call?
  • Which dynamic widget properties depend on a selected field?

For an introduction to triggers, conditions, and actions, start with Form Effects. For the complete JSON contract, use the Form Effects Reference.

One Schema, Two Editors

The Form Designer provides two synchronized views of the same root-level effects[] array:

ViewBest suited for
Form Designer → EffectsCreating or editing one effect as a linear form, reviewing every property, and deactivating read-only configuration effects
Form LogicUnderstanding relationships between fields, effects, widget events, actions, script branches, and dynamic properties

The diagram is not a second workflow format. You can switch between both views without migrating the form or duplicating its logic.

Open the Diagram

Open a form and select the Form Logic tab. The editor has three resizable areas: a palette on the left, the diagram canvas in the center, and the logic inspector on the right.

Form Logic tab with two effects, a detected field cycle, the palette, graph canvas, and cycle inspector

The labels in the screenshot are Czech; the same layout is available in every application language.

AreaPurpose
PaletteAdd a trigger, action, form control, watched variable, or widget event
CanvasConnect nodes, follow execution flow, and inspect diagnostics
Logic inspectorEdit the properties of the selected node or relationship

An empty diagram is expected when the form has no root-level effects. Adding a trigger creates a new, initially empty effect. Standalone actions, fields, and events affect the saved schema only after they are connected.

Add Nodes from the Palette

The palette contains only building blocks that are valid for the current form:

  • Triggers — Value change, Widget event, and Invoked effect
  • Actions — Set, Clear, Copy, Script, and Run effect
  • Form controls — Fields discovered from the current schema
  • Watched variables — Context paths such as $runtimeInfo.language
  • Widget events — Semantic events declared by widgets in the current layout

The Form controls section is hierarchical. Expand an object or inner form to choose a nested target such as customer.address.street. Arrays expose a concrete item path such as items.0.price; Form Effects do not use a wildcard row target.

Drag a palette item to the required canvas position, or activate it by click or keyboard. A trigger creates an effect. A field, widget event, or action starts as a standalone node.

Connections are explicit

Adding a node does not automatically modify an existing effect. Connect it to a compatible node deliberately.

Connect the Workflow

Drag from a node port to a highlighted compatible target. The most important connections are:

ConnectionResult in the schema
Form control → value-change effectAdds the prefixed field path to listen
Widget event → effectCreates a widgetEvent trigger with objectPointer and event
Effect ↔ standalone actionAdds the action to the effect's do array
Set or Clear action → form controlSets field
Copy action → form controlSets from or to, according to the selected port
Run effect action → invoked effectSets effectId
Effect → invoked effectCreates and connects a new runEffect action

The editor accepts either drawing direction for trigger connections between a field or widget event and an effect. The stored schema relationship remains the same.

Edit a Selection

Select a node to open its settings in the right inspector. The inspector reuses the same Effects and Expressions editors as the rest of the Form Designer, so advanced properties remain available without leaving the diagram.

Selecting an item narrows the inspector to the relevant context:

  • an effect shows its metadata, trigger, condition, and actions;
  • an action shows only the properties supported by that action type;
  • a widget event shows its source widget, event name, and payload suggestions;
  • an expression shows its JEXL and schema location;
  • a relationship shows its source, target, and available delete action.

Deleting a relationship removes only that connection. Deleting an effect, action, or dynamic-property node removes the corresponding schema item. The Delete key is also supported for a selected deletable item.

Choose the Visible Scope

Use the scope switch above the canvas:

ScopeContents
All logicThe complete graph
Selection contextThe selected node and its related subgraph
WorkspaceOnly newly created nodes and branches explicitly added to the working view

For example, selecting a field in Selection context shows effects that listen to or write that field and expressions that read it. Without a selection, this scope is disabled. Selecting another node recalculates the context immediately.

Workspace changes only the working view. Hiding a node from the workspace does not remove it from the form schema.

Arrange the Diagram

The toolbar provides:

  • Data dependencies — show or hide non-executable JEXL dependency edges;
  • Auto layout — arrange the visible graph automatically;
  • Fit diagram — fit the visible nodes into the canvas.

Dragged positions are stored separately in settings.formLogicDiagram.nodePositions. They affect only the diagram layout, not the form's runtime behavior.

Direct and Derived Relationships

Not every displayed edge is stored as an independent schema property:

RelationshipHow it is represented
Value-change or widget-event triggerDirectly stored in listen or trigger
runEffect connectionDirectly stored in effectId
Set, Clear, or Copy write edgeDerived from field or to
JEXL data dependencyDerived from a referenced value in an expression
Script success or error branchDerived from successDo or errorDo

Edit a derived relationship through its action or expression in the inspector. Deleting a directly editable edge removes the associated listen, trigger, or effectId relationship.

A data dependency is not a trigger

An edge from $value.customer.id to a set.value expression shows that the expression reads that value. The effect reruns on the field's change only when the field is also included in listen.

Dynamic Widget Properties

JEXL in a widget attribute is also form logic. The diagram projects dynamic properties as expression nodes and connects referenced form fields with a visually distinct data-dependency edge.

Use the inspector's Expressions tab to search all expressions, see their schema locations, and open the corresponding editor. These edges describe data flow; they do not execute actions.

Diagnostics

The editor analyzes executable dependencies whenever the schema changes:

  • A field dependency cycle is a warning. It can still be saved, but the highlighted path should reach a stable value at runtime.
  • Direct or indirect runEffect recursion is an error and blocks saving until the recursive chain is removed.

Select a reported cycle to focus its nodes and edges. The cycle counter and the inspector list every detected path. The original Effects view displays the same cycle diagnostics.

The Effects inspector can also warn when a $value path used by when, set.value, or scriptData is not covered by listen. This is not a graph cycle: it means the expression reads a value whose change may not rerun the effect.

Configuration Effects

Effects supplied by a base form or plugin configuration are read-only. They are visible in the Effects editor inside the inspector and in the original Form Designer, but they are not copied onto the editable canvas as user-owned effects.

A form can deactivate a configuration effect from the read-only Effects section. See Configuration effects for the persisted schema representation and merge behavior.