Селекторы и работа с данными
Как данные передаются между узлами
Каждый узел в 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.id | ID текущего узла |
$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 }}