Skip to content

Building a mapping with the graph editor

At a glance

  • A graph entry's mapping is a chain of connected nodes, ending at one output.
  • Add a node by browsing or searching a categorized list of blocks.
  • Click a node to configure it: its Options (what to fill in), its Derivations (options built from their own sub-graph), and its Template (the raw generated code).
  • Undo and redo live in the graph's own header, separate from any browser or OS shortcut.
  • The footer at the bottom always shows the live value the graph currently produces — or why it can't, if something's wrong.

This is the core skill in MorphMapper — building a mapping visually, node by node, for any entry you set to the Graph type in Working with entries.

A brand new graph shows a single Start Graph button in the middle of an empty canvas — click it to open the node picker for your very first node. Every graph after that opens the same picker from a "+" on the canvas or from a node's own output.

Adding a node

Open the node picker and you'll see every available block, grouped by category (things like transformations, math, logic, or table-specific operations — what's available depends on your file's type). Search narrows the list; each entry shows its name and a short description before you commit to it. Click one to add it to your graph.

Which blocks are offered depends on the file type your template is built for — a table-based template offers different blocks than an XML one, for instance, because the underlying document structures are different.

Node picker showing Core blocks (Anchor, Literal, Document Variables, Anchor Variable) and Transformers (Concatenate, Split, Date & Time) with icons and descriptions

Not every block starts in a failed state the way Anchor does when empty — a Literal node, for instance, shows a plain "Output will appear after execution" message and a green success mark even before you've typed a value, since an empty literal is still a valid (empty) result.

A Literal node added to an empty canvas, unconnected, with a green success mark and an empty Output field

The same holds for other Transformer blocks — a freshly added Concatenate node, for example, also starts in that same successful, unconnected state until you wire it up.

A Concatenate node just added to an empty canvas, showing an empty Output field and a green success mark

Zoom and pan controls sit in the canvas's top-right corner (zoom in/out, fit to view, and a lock to stop accidental panning) — standard canvas navigation, not specific to any one graph.

The graph's own header

A graph, once you're inside one, has its own small header, separate from the workspace's top bar:

  • Back arrow — steps back out one level: from a nested derivation graph to the graph it belongs to, or from a top-level graph back to wherever you opened it from.

  • Breadcrumbs — show your position when you're nested inside a graph that belongs to another graph's option (see Derivations below). They're a readout, not a control — clicking a breadcrumb does nothing; use the Back arrow to actually move up a level.

  • Undo / redo — steps backward and forward through your recent changes to this graph. This is specific to the graph editor, not a general "undo everything" — it's grayed out when there's nothing to undo or redo.

  • Run — re-evaluates the graph on demand.

  • Settings (gear icon) — opens the same output view the footer's preview opens (see Watching the result), with a Template tab (the generated code) and an Output tab (the evaluated result) side by side.

    Graph settings panel open next to the canvas, showing Template and Output tabs with the Template tab selected and reading "Empty" for a graph with only an unconnected Start Graph button

Connecting nodes

A graph is a chain: nodes feed into each other, ending at one final output. Connect a node's output to the next node's input to build that chain up. Every graph you build ends at the same place — the terminal node, whose result becomes the entry's value.

Every node card also shows its own live status inline — before it's connected to anything, it shows Failed to evaluate with a reason ("Template did not return a node result"), which clears automatically once the chain reaches the terminal node correctly. You don't have to open a node to know it's not wired up yet.

Some inputs accept more than one connection at once — Concatenate or OR, for instance, or a Switch Case node's cases input. Once you've connected two or more nodes into the same input, the card grows a numbered Inputs list naming each connected source, with small up/down arrows next to each one so you can reorder which input is fed in first without having to disconnect and reconnect anything.

Configuring a node

Click a node to open its configuration panel. What you'll find there:

  • Options — the fields this specific block needs filled in, using whatever input makes sense for each one (a plain text field, a dropdown, a checkbox, or a button that lets you click directly into your source file to pick a value — see Selecting values from the source file).
  • Derivations — for any option whose value isn't something you type directly, but is itself built from another small graph. This tab lists those and lets you jump straight into editing them.
  • Template — the actual generated code this node produces, if you want to see exactly what it's doing under the hood.

Not every block has configurable options — a node with nothing to configure opens straight to its Template view instead.

Each option also has a small type-switcher icon next to its label, for changing how that option's value is sourced: a typed-in literal, a reference to a declared variable, raw code, a boolean toggle, or a graph of its own — which of these are offered depends on the option. Switching one to Graph is what actually creates a derivation: it opens a nested graph editor for that option right away, and once you've built something there, it shows up in the node's Derivations tab so you can jump back into it later.

The option type menu open on a Literal node's "Literal" field, showing Literal, Reference, Graph, Code, and Boolean choices

Which choices actually appear varies by field, confirmed live. The Literal node's own Literal field offers all five (Literal, Reference, Graph, Code, Boolean) — but Anchor's Selector field, and Replace Symbols' Global and Case Insensitive checkboxes, only ever offer three: Literal, Reference, and Graph. Code and Boolean simply don't show up as choices on those fields, even though the menu component is the same one everywhere.

  • Literal — the field's own native input (a text box, number box, checkbox, or selector button, depending on the option) stays as-is. This is the default for every option.
  • Reference — replaces the field with a searchable combobox titled "Select reference," listing every variable available in this context: your own declared environment variables by name, plus the template's own internal schema variables (shown with their raw lowercase names, like clientidentifierraw or selector) — each row paired with a type badge (any for most), and a footer reading "N variables available." Worked example: on an Anchor's Selector switched to Reference, picking Invoice reference from that list sets the Template tab to "$invoicereference" and the node's Output to the unresolved placeholder $invoicereference — the raw variable name, not a value, since nothing upstream feeds it one.
  • Graph — opens a nested graph editor for that option right away (see Derivations below); once built, it shows up in the node's Derivations tab.
  • Code — replaces the field with a plain single-line text input plus a separate Insert button (grayed out until you've typed something). Unlike every other option type, typing here doesn't apply live: the field's actual value stays whatever it was until you click Insert, at which point the button disables again, a small "Code inserted" note appears, and the node's Output updates. Worked example: switching a Literal node's Literal field to Code and typing "acme" leaves the Template tab reading "" and the Output stuck on its prior state until Insert is clicked — after that, Output reads acme.
  • Boolean — replaces the field with a single checkbox labeled with the current value (False or True), defaulting to False. Unlike Code, this one does apply live: clicking it flips the Output immediately (verified: unchecked → False, checked → True) with no separate commit step.

Hovering or selecting a node's card also reveals its own small toolbar — a Replace icon (swap this node for a different block without losing its position in the graph), a Run button scoped to just that node, and a delete (trash) icon — separate from the graph-wide Run in the header above.

A selected Anchor node showing its Options tab with a Selector field, clipboard icon, and description, next to the node card with Failed to evaluate

Watching the result

The bar at the bottom of the graph editor always shows the current status of the whole chain — idle, running, succeeded, or failed — along with a live preview of the value it currently produces. Click the preview to see the full output rather than a truncated one. If something's wrong further up the chain, this is the fastest way to notice, since the status updates as you build.

An Anchor node showing a captured value ($inputdocument.Order.Customer.Name.@.@) after selecting text in the file view and clicking the Selector field's clipboard icon, with a green success checkmark

That screenshot shows the whole loop end to end: a value selected in the file view on the left, captured into the node's Selector field on the right, and the node's status flipping from failed to succeeded the moment it has something valid to work with.

Available nodes

The node picker groups every block into the categories below. Which ones actually show up for you depends on your file type, as noted above — this is the full catalog across all file types.

Core

  • Anchor — select text to act as a reference point of the value you want to extract. Covered in detail above and in Selecting values from the source file. XML and JSON templates give Anchor that same single Selector field, but selecting by path instead of by text. A table-based template (Xls/csv) replaces the Selector field with a different set of options entirely: a Reference choice between Absolute and Relative cell addressing, a Column and Row number to target (with Absolute) or shift by from a reference cell (with Relative — which also adds back a Selector field, to pick that reference cell), an Iterate Rows checkbox, and a Whitespace checkbox to strip trailing whitespace from the output.

    Anchor node's Options tab in a table-based template, showing Reference (Absolute/Relative radio), Column, Iterate Rows, Row, and Whitespace fields

Literal

Adds a constant, typed-in value to your template — a string, a number, or a boolean — rather than something pulled from the source file.

  • Literal — a single text field for the value itself. There's no default; an empty Literal is still a valid (empty) result, which is why a freshly added Literal node starts green instead of failed (see Adding a node above).

Worked example: with the value typed in as Acme Shipping Ref, the node's Template tab shows the generated code as "Acme Shipping Ref" (a plain JSON string literal), and its Output is Acme Shipping Ref.

Literal node's Options tab with its Literal field filled in with "Acme Shipping Ref"

Document Variables

Reads one of a small set of variables tied to the document itself, rather than a value from inside its content — useful for email- or text-based inputs where the file name, sender, or subject line is itself part of the data you want to map.

  • Variable — a dropdown of the variables available for your file type. For an XML/import template the choices are Email Body, Email From, Email Subject, PDF Body, Text Body, File Name, and XLS Column; which of these actually apply depends on the template's input source (an XML file over plain File input won't have a populated email or text body at runtime, even though the option is still selectable).

Worked example: selecting File Name on an XML template's Document Variables node produces $emailData.fileName in the Template tab — the raw variable reference the generator emits, regardless of file type — since MorphMapper always exposes the same variable resolution code and lets the runtime for that particular input source fill it in.

Document Variables node's Options tab with the Variable dropdown set to File Name

Anchor Variable

Retrieves a field value using a variable path, selected from the file the same way an Anchor's Selector is.

  • Selector — a text field, filled in via the same pick-from-file selector button as Anchor's Selector, for the variable path to retrieve. No default.

Worked example: selecting the OrderNumber value from the sample file sets Selector to $inputdocument..@, and the Template tab emits {"$getVariable": "inputdocument..@"} — the leading $ is stripped from the selector string when it's passed to $getVariable. With nothing else in context, the node's Output stays a $__reserved__result__<id> placeholder, since resolving a variable path means evaluating it against the runtime's variable table.

Anchor Variable node's Options tab with Selector set to $inputdocument.Order.OrderNumber.@ after picking the OrderNumber field, showing output DOC-EXP-001

Transformers

Concatenate

Combines two or more incoming values into a single string. It has no Options tab of its own — instead of filling in fields, you wire two or more upstream nodes into its inputs and it joins their values in wiring order.

Worked example: added fresh with nothing wired in, the Template tab emits {"$utils.concat.selective": []} — an empty list of values to join, since nothing is wired into it yet. Each upstream node you wire in adds one more entry to that list.

Remove Words

Removes a number of words from the start and/or end of a string.

  • Starting count — a number field for how many words to remove from the start of the string. Defaults to 0.
  • Words — a number field for how many words to remove from the end of the string. Defaults to 0.

Worked example: added fresh with nothing wired in and Starting count set to 1 (Words left at 0), the Template tab emits {"$helpers.removeWords": [[[]], 1, 0]} — the incoming value as an (empty, since nothing is wired) list, then Starting count and Words in order.

Remove Words node's Options tab with Starting count set to 1 and Words left at 0

Remove Special Characters

Strips special characters, and optionally trailing whitespace, from a string.

  • Trim Whitespace — a checkbox for whether to also remove trailing whitespace from the string. Checked by default.

Worked example: added fresh with nothing wired in and Trim Whitespace left at its default (checked), the Template tab emits {"$utils.regexp.replace": [undefined, ["[\n,\r, ,/,(,)]", "g"], ""]} — a regex character class matching newlines, carriage returns, spaces, slashes, and parentheses, replaced globally with an empty string. The node's Output already resolves (even with nothing wired in) to [ [ null ] ].

Remove Special Characters node's Options tab with Trim Whitespace checked

Remove Leading and Trailing Spaces

Trims spaces from the start and end of a string. It has no options of its own.

Replace Symbols

Replaces one or more symbols in a string with a target value.

FieldTypeDescriptionDefault
ReplaceTag comboboxType a symbol (or sequence of characters) and confirm via + Create to add it as a chip; add more than one chip to replace several different symbols in the same pass.None
WithTag comboboxThe value to replace matches with.None
GlobalCheckboxReplace every occurrence in the string rather than only the first.Unchecked
Case InsensitiveCheckboxWhether the match against Replace ignores letter case.Unchecked

Worked example: with Replace set to a single - chip, With set to a single _ chip, and Global left unchecked, the Template tab emits {"$utils.regexp.replace": [undefined, ["[-]"], "_"]} — the chip(s) in Replace become a regex character class, and (since Global is unchecked) no g flag is added as a second element of that array; checking Global adds "g" there, the same way Remove Special Characters' fixed character class does above.

Replace Symbols node's Options tab with Replace set to a "-" chip, With set to a "_" chip, and Global and Case Insensitive both unchecked

Parse to Number

Parses a string to a whole number. It has no options of its own.

Parse to Float

Parses a string to a floating-point number. It has no options of its own.

Parse to Float (Alternative)

Parses a string to a floating-point number, with reversed comma-and-dot notation from the plain Parse to Float above. It has no options of its own.

Split

Splits a string on a separator into an array, then returns one element of that array by index.

  • Separator — a text field for the string (or character) to split the input on. No default.
  • Select — a number field for which index of the split result to return, starting at 0. Defaults to 0.

Worked example: with Separator set to @ and Select set to 1, the Template tab emits the incoming value as a declared variable, then "$qa.split": "@" with a nested "$result": {"$getVariable": "data.1"} — splitting the input on @ and taking element 1 of the result. Wired to the sample XML's <Email> field (ops@acme-shipping.example), that selects the domain half of the address.

Split node's Options tab with Separator set to "@" and Select set to "1"

Date & Time

Transforms a value into a date, converts between date formats, or outputs UNIX time.

FieldTypeDescriptionDefault
Use Current TimestampCheckboxIgnore the wired input entirely and use the current timestamp instead.Unchecked
Use Current DateCheckboxIgnore the wired input entirely and use the current date instead.Unchecked
Input TypeRadio (Date String / Epoch Time (Unix timestamp))What kind of value is wired into the node.Date String
Input FormatDropdown (also accepts a typed custom value)Date/time formatting of the incoming value.None
Output TypeRadio (Epoch / Custom)What kind of value the node produces.Epoch
Output FormatDropdown (also accepts a typed custom value)Date/time formatting of the outgoing value, offering presets like YYYY-MM-DD, YYYY-MMM-DD, DD-MM-YYYY, and time-inclusive variants like YYYY-MM-DD HH:mm. Only shown while Output Type is Custom.None
Validate Date RangeCheckboxEnable checking whether the date falls within a window around today.Unchecked
Minimum DaysNumberThe date must be at least this many days ago to pass validation. Only shown while Validate Date Range is checked.None
Maximum DaysNumberThe date must be at most this many days in the future to pass validation. Only shown while Validate Date Range is checked.None
Adjust Winter TimeCheckboxAdjust the current date for winter time (DST).Unchecked

Date & Time node's Options tab with Use Current Date checked, Output Type set to Custom, and Output Format set to "YYYY-MM-DD"

Worked example: added fresh with nothing wired in, a new Date & Time node's Output tab already shows a 13-digit epoch-millisecond number (its Output Type defaults to Epoch, and with no input wired the underlying value falls back to the current time). Checking Use Current Date, switching Output Type to Custom, and setting Output Format to YYYY-MM-DD changes the Output to today's date in that format — running it live produced 2026-09-02.

Substring

Extracts a substring from a string by start and end index.

  • From — a number field for the starting index of the substring. Defaults to 0.
  • Use End — a checkbox for whether to cut the substring off at an end index at all. Checked by default (so a fresh node already has an end index in play, not just a from-index to the end of the string).
  • To — a number field for the ending index of the substring. Defaults to 0. Only meaningful while Use End is checked.

Worked example: with From set to 4 and To set to 7, the Template tab emits the incoming value as a declared variable varToParse, then "$varToParse.substring": [0: 4, 1: 7] — taking characters at index 4 up to (not including) index 7 of whatever value is wired into the node.

Substring node's Options tab with From set to 4, Use End checked, and To set to 7

Logical Operators

OR

Combines two or more values with an OR operator. Has no Options tab of its own; wire two or more upstream nodes into it.

Worked example: added fresh with nothing wired in, the Template tab emits {"$utils.or": []}, and the node's Output stays a $__reserved__result__<id> placeholder — an OR over zero operands doesn't resolve to a value the way AND's does.

AND

Combines two or more values with an AND operator. Has no Options tab of its own; wire two or more upstream nodes into it.

Worked example: added fresh with nothing wired in, the Template tab emits {"$utils.and": []}, and the node's Output already reads True — an AND over zero operands is vacuously true.

NOT

Inverts a boolean value. Has no options of its own.

Worked example: added fresh with nothing wired into its input, the Template tab emits {"$utils.not": undefined}, and the node's Output reads {}.

Condition

Forwards a value based on a condition: three inputs (if, then, else) instead of the usual single or multiple ones, so you wire the condition and both branches in directly. It has no Options tab of its own — confirmed live: with nothing wired in, its Template tab reads Empty and the node shows Failed to evaluate.

Switch Case

Evaluates multiple conditions using a switch-case structure. It has no Options tab of its own; instead it takes a condition input, a multi cases input (fed by one or more Case Definition nodes), and an optional default input, so you build the branching by connecting nodes rather than filling in fields.

Switch Case node with two Case Definition nodes feeding its cases input, an Anchor feeding its condition input, and a numbered Inputs list showing each case's [Match, Result] pair

Equal

Checks if two values are equal.

  • Invert — a checkbox for whether to check for inequality instead of equality. Unchecked by default.

Worked example: added fresh with nothing wired into either input, its Output already reads True — both (unwired) sides evaluate to undefined, and undefined equals undefined.

Equal node's Options tab with the Invert checkbox unchecked, and the node's Output showing True

RegExp Test

Checks if a value matches a regular expression.

FieldTypeDescriptionDefault
PatternTextThe regular expression pattern to test against.None
GlobalCheckboxMatch every occurrence of the pattern rather than stopping at the first.Unchecked
Case InsensitiveCheckboxWhether the match ignores letter case.Unchecked

RegExp Test node's Options tab with Pattern set to ^SKU-+$, and Global and Case Insensitive both unchecked

Mathematical Operators

Add

Adds two or more values together. Has no Options tab of its own; wire two or more upstream nodes into it.

Worked example: added fresh with nothing wired in, the Template tab emits {"$math.sum": []} — an empty list of addends — and the node's Output already reads 0, the sum of zero values.

Multiply

Multiplies two or more values together. Has no Options tab of its own; wire two or more upstream nodes into it.

Worked example: added fresh with nothing wired in, the Template tab emits {"$math.multiply": []} — an empty list of factors.

Round

Rounds a value to the nearest integer. Has no options of its own — confirmed live: its Template tab is just {"$math.round": undefined} until you wire a value in.

Ceil

Rounds a value up to the nearest integer. Has no options of its own.

Floor

Rounds a value down to the nearest integer. Has no options of its own.

Maximal

Gets the largest of two or more values. Has no Options tab of its own; wire two or more upstream nodes into it.

Worked example: added fresh with nothing wired in, the Template tab emits {"$math.max": []} — an empty list of candidates.

Subtract

Subtracts a fixed value from the incoming value.

  • Subtract — a number field for the value to subtract. Defaults to 0.

Worked example: with nothing wired into the node and Subtract set to 3, the Template tab emits the incoming value as a declared variable 0 (i.e. undefined coerces to 0), then "$math.minus": [0: undefined, 1: 3], and the node's Output reads -3.

Subtract node's Options tab with the Subtract field set to 3

Divide

Divides the incoming value by a fixed divisor.

  • Divisor — a number field for the value to divide by. Defaults to 1.

Worked example: with nothing wired into the node and Divisor set to 4, the Template tab emits "$math.divide": [0: undefined, 1: 4], and the node's Output reads 0 (undefined divided by 4 resolves to 0 rather than NaN).

Divide node's Options tab with the Divisor field set to 4

Less Than, Less Than or Equal, Greater Than, Greater Than or Equal

Compare the incoming value against a fixed value and return whether the comparison holds.

  • Each node has one number field, named after the node itself (Less Than, Less Than or Equal, Greater Than, Greater Than or Equal), for the value to compare the incoming value against. Defaults to 0. Its description reads "Check if the incoming value is [comparison] this value."

Worked example: Less Than added with nothing wired in and its field left at the default 0 — the incoming (unwired) value is undefined, which is not less than 0, so Output reads False.

Less Than node's Options tab with the Less Than field at its default 0, and the node's Output showing False

Tables

Compose Table Columns

Constructs a table by automatically identifying its columns from a marker in the file.

FieldTypeDescriptionDefault
FromSelectorMarker in the file to compose the table from. Clicking the selector button and then a spot in the file preview without a specific value under the cursor falls back to the document root ($inputdocument..@); the selector accepts any node in the file, not just table-shaped ones.None
Table Definition in HeaderCheckboxWhether the table's column definitions start at the header row.Checked
LinesNumberHow many lines to skip from the marker before the table starts. Only shown when Table Definition in Header is unchecked.1
ComposeCheckboxEnable a different algorithm for inferring the table's structure.Unchecked

Worked example: with From set to the document root and the other options left at default, the Output reads { "#$composeTableColumns": { "from": "$inputdocument..@", "lines": 1, "fromLine": 0, "compose": false } }lines and compose are always present in the generated template regardless of which options are visible in the UI.

Compose Table Columns node's Options tab with From set to the document root, Table Definition in Header checked, and Compose unchecked

Cell

Gets the value of one cell within a table, addressed by row and column number.

  • Target Row — a number field for the row of the cell. Defaults to 0.
  • Target Column — a number field for the column of the cell. Defaults to 0.
  • Iterate — a checkbox to iterate over the cell. Unchecked by default.
  • From — the marker used to compose the table this cell belongs to. No default.
  • From Line — the line used to compose that table. Defaults to 0.
  • Columns — a graph-derived set of column definitions used to index the table's cells: an Open graph / Clear graph pair, the same as Switch Case's cases — you wire in column definitions rather than fill in a field.

Worked example: with Target Row set to 1 and Target Column set to 2 (all other fields left at default), the Output reads { "#1,2$cell#": { "fromLine": 0 } }.

Cell node's Options tab with Target Row set to 1 and Target Column set to 2

Column

Iterates over a single column within a table, by column number.

  • Column — a number field for which column to iterate over. Defaults to 0.

Worked example: with Column set to 3, the Output reads #>$column#3.

Column node's Options tab with the Column field set to 3

Iterators

Count Occurrences

Iterates over a value that appears multiple times in the file, used to relatively reference fields to extract on each occurrence.

  • Count Occurences — a selector (note the source's spelling) for the text in the file to iterate over. No default.
  • Refer Back — a text field that fine-tunes the starting point of each occurrence: from the beginning of the line, or a specific character/word before the keyword. No default.

Worked example: selecting a field inside the sample XML's repeating <Item> block sets Count Occurences to a path like $inputdocument.Order.Items.Item.Quantity.@.@, and the Output reads { "countoccurences": "$inputdocument.Order.Items.Item.Quantity.@.@" }.

Count Occurrences node's Options tab with Count Occurences set to a path inside the repeating Item block

Iterate Table

Iterates over a table to extract values.

FieldTypeDescriptionDefault
From MarkerSelectorMarker in the file where the table starts.None
To MarkerSelectorMarker in the file where the table stops.None
From LineNumberHow many lines to skip from the marker before the table starts.0
Shift RowsNumberHow many rows to skip from the start of the table before iterating over values.0
Find By ColumnsCheckboxEnable a different compose algorithm.Unchecked
ColumnsGraph-derivedColumn definitions used to index the table's cells.
SkipGraph-derivedWhich rows to skip.

Worked example: added fresh with nothing wired into any field, the node's Output already resolves (no markers are required for it to produce something) to { "table": { "findByColumns": false, "fromLine": 0, "shiftRow": 0 } } — the three visible defaults (Find By Columns, From Line, Shift Rows), nested under a table key. From Marker and To Marker don't appear in this output because nothing was selected for them.

Iterate Table node's Options tab with From Marker, To Marker, From Line, and Shift Rows all left empty/default, and Find By Columns unchecked

Get From List

Gets element(s) from a list.

FieldTypeDescriptionDefault
ValueSelectorThe value to extract from the list.None
ReferenceSelectorThe list to iterate over.None
SkipGraph-derivedWhether the current element should be skipped.
Return ModeRadio (Entire List / Single Element)Whether to return the whole list or one element.Entire List
Target ElementNumberIndex of the element to extract. Only shown once Return Mode is set to Single Element.0

Worked example: added fresh with nothing wired into Value or Reference and Return Mode left at its default Entire List, the node's Output doesn't fall back to a placeholder like the math nodes do — it shows an error state instead: "Failed to evaluate — Template did not return a node result."

Get From List node's Options tab with Value and Reference both empty, and Return Mode set to Entire List

Sum From List

Sums the elements of a list.

FieldTypeDescriptionDefault
ValueSelectorThe value to extract from the list.None
ReferenceSelectorThe list to sum over.None

Worked example: added fresh with nothing wired into Value or Reference, the node's Output shows the same error state as Get From List: "Failed to evaluate — Template did not return a node result."

Sum From List node's Options tab with Value and Reference both empty

Container Iterator

Defines the quantity of containers to iterate over — used when a document's repeating structure is driven by a count field rather than by a literal repeated block.

  • Quantity — a selector for the number of containers defined in the file. No default.
  • Variable Declaration — a text field naming the variable to declare, for when this container iterator is itself a self-defined variable. No default.

Worked example: with Quantity selected against the sample XML (a click that resolved to the document root, $inputdocument..@, rather than a specific field), the node's Output — truncated in the preview — starts { "template": { "_containerid": "$ITERATOR1" }, "data": { "#repeatItems": [ { "repeat": { "#parseInt": "$inputdocument..@" }, "_containerid": "$CURRENT_COUNTER" …: the generated template declares an iterator ID, parses the selected value to an integer, and repeats a nested block that many times.

Container Iterator node's Options tab with Quantity selected against the sample file

Requests

Generic Request

Makes a request to a database for custom logic.

FieldTypeDescriptionDefault
DatabaseTextThe database to fetch data from.None
CollectionTextThe collection to fetch data from.None
TargetTextThe value to read from the resulting data.None

Worked example: with Database set to morphjs, Collection to customer, and Target to CODE, the Template tab emits {"$mongoRequest": [{"$db.customer.findOne": {}, "$result": {"$getVariable": "CODE"}}, "morphjs", ["customer"]]} — the three fields become, in order, the query's result shape (the $result value bound to the Target field), the database name, and a one-element array holding the collection name. With nothing else wired in, the node's Output stays a $__reserved__result__<id> placeholder, since resolving it means actually issuing the query.

Generic Request node's Options tab with Database set to morphjs, Collection to customer, and Target to CODE

Vessel Request

Fetches vessel information from a database. Same three fields as Generic Request, but fixed and non-editable: Database defaults to morphjs, Collection to resource, and Target to CODE.

Worked example: added fresh with nothing wired into it, the node still resolves — because its Database/Collection/Target are fixed rather than depending on anything upstream — and its Output shows GERD, an existing resource code from the dev database.

Vessel Request node's Options tab showing its three fields, all disabled, with Database morphjs, Collection resource, and Target CODE

Case Definition

Case Definition

Specifies one condition within a Switch Case node's structure.

  • Match — a text field for the value to compare against the condition. No default.
  • Result — a text field for the value to return when the condition matches. No default.

You add one Case Definition node per branch and feed them all into the Switch Case node's cases input (see the Switch Case screenshot above, which shows two Case Definition nodes feeding it).

Case Definition node's Options tab with Match and Result text fields, both empty