Skip to content

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
    • value — Value
      • Type: Text (string)
      • Required: No
      • Default: "" (empty)
      • 10000 characters at most
    • operation — Formatting
      • Type: One choice (options)
      • Required: No
      • Default: none
      • Options:
        • none — None
        • trim — Trimmed
        • upper — UPPERCASE
        • lower — lowercase

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.number is 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: none

Downstream, {{ 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__, prototype and constructor are refused. One unusable name fails the whole step with node_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 = x after customer.email = y replaces the object with the text x, and the opposite replaces x with an object.
  • A row without a field name is ignored.