selectors

Селекторы и работа с данными

Как данные передаются между узлами

Каждый узел в workflow получает данные от предыдущего узла и передаёт результат следующему. Данные передаются в формате items — массива элементов:

[
  { "firstName": "Алексей", "lastName": "Петров", "email": "alexey@example.com" },
  { "firstName": "Мария", "lastName": "Иванова", "email": "maria@example.com" }
]
  • Если предыдущий узел вернул один объект — массив содержит один элемент
  • Если вернул список (например, HTTP-запрос к API) — каждый элемент списка становится отдельным item

Селекторы: доступ к данным

Для обращения к данным из предыдущих узлов используются выражения в двойных фигурных скобках: {{ выражение }}.

$input — данные от предыдущего узла

Основной способ доступа к данным. $input указывает на данные, пришедшие от непосредственно предыдущего узла.

ВыражениеОписание
$input.firstNameПоле firstName первого элемента
$input.first().firstNameТо же самое — явное обращение к первому элементу
$input.last().emailПоле email последнего элемента
$input.all()[1].companyПоле company второго элемента (индекс с 0)
$input.lengthКоличество элементов

Примеры использования:

Имя: {{ $input.firstName }}
Email: {{ $input.email }}
Всего записей: {{ $input.length }}
Последний: {{ $input.last().lastName }}

$('Имя узла') — данные из конкретного узла

Позволяет обращаться к результату любого узла по его имени, не только предыдущего.

ВыражениеОписание
$('HTTP Request').first().firstNameПервый элемент из узла "HTTP Request"
$('HTTP Request').last().emailПоследний элемент
$('HTTP Request').all()Все элементы как массив

Когда использовать: если между текущим узлом и источником данных есть промежуточные узлы, и нужно обратиться к данным не от непосредственного предшественника.


Методы доступа к элементам

МетодВозвращаетПример
.first()Первый элемент$input.first().name
.last()Последний элемент$input.last().name
.all()Массив всех элементов$input.all()[2].name
.lengthКоличество элементов$input.length

Когда нужны методы?

При одном элементе$input.firstName достаточно. Это самый частый случай.

При нескольких элементах — используйте .first(), .last(), .all() для явного выбора:

Первый контакт: {{ $input.first().firstName }}
Последний контакт: {{ $input.last().firstName }}
Третий контакт: {{ $input.all()[2].firstName }}

Другие переменные

ПеременнаяОписание
$node.idID текущего узла
$node.nameИмя текущего узла
$nowТекущая дата и время
$itemIndexИндекс текущего элемента (в цикле)

JavaScript-выражения

Внутри {{ }} можно использовать JavaScript:

{{ $input.firstName.toUpperCase() }}
{{ $input.price * 1.2 }}
{{ $input.email ? $input.email : 'нет email' }}
{{ new Date($input.createdAt).toLocaleDateString('ru') }}
{{ $input.all().map(item => item.firstName).join(', ') }}

Drag-and-drop

В панели настройки узла поля данных можно перетаскивать из левой панели (INPUT) в поля параметров. При перетаскивании автоматически формируется селектор:

  • Из INPUT панели (предыдущий узел): {{ $input.fieldName }}
  • Из OUTPUT панели другого узла: {{ $('Node Name').first().fieldName }}

Примеры по типам узлов

HTTP Request → Create Entity

HTTP Request возвращает контакт, Create Entity использует его поля:

Имя:    {{ $input.firstName }}
Email:  {{ $input.email }}
Телефон: {{ $input.phone }}

HTTP Request (массив) → Set Fields

HTTP Request вернул список контактов, Set Fields обрабатывает первый:

Имя: {{ $input.first().firstName }}
Всего: {{ $input.length }} контактов

Trigger → HTTP Request → Create Entity

Create Entity обращается к HTTP Request (предыдущему узлу):

{{ $input.firstName }}

Или явно к HTTP Request по имени:

{{ $('HTTP Request').first().firstName }}