Expression syntax v2
Expressions map data into Step Parameters, Workflow Returns, and control-flow Properties. An Expression can reference available Workflow data, apply operators, and call a registered mapping function.
Use a literal Value when the result is fixed. Use an Expression when the result depends on Workflow input, an earlier Step, or a calculation.
References
Surround every Workflow reference with braces.
Reference a Workflow Parameter with a leading dot:
{.customerId}
Reference a Return from an earlier Step with the Step name first:
{getCustomer.Customer}
Continue the path to select a nested field:
{getCustomer.Customer.address.city}
References are case-sensitive. A Step can use Workflow Parameters and Returns available earlier in its execution scope. It cannot reference a later Step or data outside its container scope.
Names that require quotes
A normal path segment must be a valid identifier. Put a segment in double quotes when its name contains spaces, punctuation, or another character that makes the path ambiguous:
{readRecord.Record."customer-name"}
Quoted segments can contain a literal double quote by doubling it. They also support \\, \b, \f, \n, \r, \t, and four-digit \uXXXX escapes.
Do not nest braces or leave a brace or quoted segment open. The designer reports malformed tokens in Problems.
Literals
Expressions use these common literal forms:
"customer"
123.45
true
false
null
Regular strings use double quotes and C#-style backslash escapes. Verbatim strings use @"..." and double an embedded quote:
@"C:\Import\Customers.csv"
@"He said ""yes"""
Single quotes represent one character. In most mappings, use a double-quoted string unless a function or comparison specifically requires a character.
Operators
The supported operator families are:
| Purpose | Operators |
|---|---|
| Equality | ==, != |
| Relational comparison | <, <=, >, >= |
| Logical | &&, ||, ! |
| Arithmetic | +, -, *, /, % |
| Null fallback | ?? |
| Conditional result | condition ? whenTrue : whenFalse |
Parentheses control evaluation order:
({getOrder.Order.total} >= 1000 && {.priorityCustomer}) || {.manualApproval}
The + operator adds numeric values or concatenates compatible strings. Operand types must be compatible with the selected operator. Compilation reports invalid combinations rather than silently converting unrelated types.
Compatibility aliases
The Runtime also accepts these authored aliases outside string and character literals:
| Alias | Meaning |
|---|---|
= |
Equality (==) |
<> |
Inequality (!=) |
& |
Logical AND (&&) |
| |
Logical OR (||) |
Prefer ==, !=, &&, and || in new Workflows because their meaning is explicit.
Assignments, increment and decrement, bitwise operators, exclusive OR, shifts, and bitwise negation are not supported. Expressions must calculate a value without changing state.
Functions
Write a function outside the reference braces and pass references as arguments:
CONCAT({getCustomer.Customer.firstName}, " ", {getCustomer.Customer.lastName})
Function lookup is case-insensitive, but Console presents the canonical uppercase names. Use the displayed name and signature so code, autocomplete, and documentation remain consistent.
Functions can be nested:
UPPER(TRIM({.customerName}))
See Mapping functions for the complete current registry and the extra rules for collection functions.
Collection scope
An array Expression establishes the row scope used by its nested Property mappings:
Customers:
Type: array
Expression: "{listCustomers.Customers}"
Properties:
id:
Type: string
Expression: "{listCustomers.Customers.id}"
The child reference is evaluated for each item in listCustomers.Customers. Do not project a collection field into an unrelated scalar Property without a valid collection scope or an aggregate function.
A container with child Properties can use a pure reference or one of the container functions supported by the runtime. Other top-level functions are rejected for that parent mapping. See Mapping functions.
Autocomplete, validation, and Preview
In Canvas view, the Expression editor suggests data available from connected earlier Steps and the current function registry. In Code view, autocomplete and linting are available while editing an Expression field. Hover over a recognized function to see its signature, description, and return type.
Validation checks reference formatting, available Step Returns, operator syntax, function names, argument types, and mapping shape. Resolve errors in Problems before relying on a result.
After a Workflow compiles without blocking errors, open the designer's Preview tab. It lists the Property type, Property path, authored Expression, and evaluated design-time result, grouped by Workflow or Step. Preview is derived from compilation samples; it does not call external systems or replace a controlled Debug run with representative data.
Select a Preview row to return to that Property in the designer. Search can highlight matching rows or filter the list.
See Data mapping for shaping objects and arrays and Workflow Properties for where Expressions are allowed.
For focused tasks and diagnosis, see Preview an Expression and Mapping and Expression Errors.