English
Transform
Defines fields in the working data from text that accepts {{ }} expressions, with a few formatting options.
The Transform node sets fields in the working data. Each row has a field name, a templatable value and an optional formatting (trimmed, UPPERCASE, lowercase). Use it to give a short, stable name to a value built from several places, to normalise a value before comparing it, or to prepare the fields that a later node, a table or a called workflow will read.
It does not compute anything beyond expressions: the value is rendered first, then the formatting applies. The formatting options are the same as the trim, upper and lower filters, so {{ email.subject | upper }} in a value gives the same result. To compute a date, use Compute a date.
At a glance
- Type:
data.transform· version 1 - Category: Data
- Kind: Step — one stage of a run
- Effect: No external effect (
none) — nothing is written outside Mankomail; safe to replay - Needs a carrier email: No
- Connection: None
- Inputs:
main - Outputs:
main
Parameters
assignments
Fields — Each row sets a field in the working data, reusable downstream with {{ data.… }}.
- Type: List of items (
collection) - Required: No
- 1 to 50 items
- Each item has:
key— Field name- Type: Text (
string) - Required: Yes
- 200 characters at most
- Example:
order.number - Expressions:
{{ }}not accepted
- Type: Text (
value— Value- Type: Text (
string) - Required: No
- Default:
""(empty) - 10000 characters at most
- Type: Text (
operation— Formatting- Type: One choice (
options) - Required: No
- Default:
none - Options:
none— Nonetrim— Trimmedupper— UPPERCASElower— lowercase
- Type: One choice (
Outputs
main
Data produced
What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).
{{ data.<step>.<field> }}—string. One field per row, named after "Field name", holding the rendered value after formatting. Values are always text.{{ data.<step>.<a>.<b> }}—object. A dotted field name builds nested objects:order.numberis read as{{ data.<step>.order.number }}, and{{ data.<step>.order }}is the object holding it.
Example
Prepare the fields of a CRM record from an Extract step named Extract. Name the Transform node Record and add the rows:
key: customer.email value: {{ email.from.email }} operation: lower
key: customer.name value: {{ data.extract.name }} operation: trim
key: reference value: {{ data.extract.reference }} operation: upper
key: source value: email operation: noneDownstream, {{ data.record.customer.email }} holds the sender address in lowercase and {{ data.record.reference }} the reference in uppercase.
Tips
- Values are text. The node stores the rendered string; a number or a list taken from an expression arrives as text (lists and objects as JSON).
- Field names. Each segment between dots must start with a letter,
_or$and contain only letters, digits,_and$, or be a number.__proto__,prototypeandconstructorare refused. One unusable name fails the whole step withnode_invalid_param, and nothing is written. Accented letters are not accepted in field names. - The field name cannot contain
{{ }}: downstream nodes must know which fields exist. - Row order matters. When two rows write the same path, the last one wins:
customer = xaftercustomer.email = yreplaces the object with the textx, and the opposite replacesxwith an object. - A row without a field name is ignored.