Expressions
Поле может хранить литерал — число, строку, дату — или выражение, которое указывает на то, что отдаёт другая node. Переключатель {} рядом с бейджем типа переключает одно на другое.
{{Fetch Orders.summary.revenue.amount}}
Переключение ничего не теряет: литерал и выражение лежат в разных слотах одного поля. Выключили выражение — вернулось то, что вы вводили до него.
Как ведёт себя поле
В режиме выражения всё поле — один путь: Fetch Orders.summary.count. Скобки набирать не нужно вовсе — поле уже является выражением, а список открывается по фокусу. Скобки в {{Fetch Orders.summary.count}} относятся к тому, что уезжает в рантайм, а не к тому, что вы набираете.
Выражение, вставленное в середину обычного текста, язык и прогон понимают, но подсказок внутри себя текстовое поле пока не даёт — такое поле пишите в режиме выражения или вставляйте ссылку руками.
Выпадашка
Список зависит от каретки, а не от всего поля: платформа спрашивает провайдер выражений, что уместно в этой позиции, и рисует ответ.
- Nodes идут первыми — сначала те, что выше по потоку, потом остальные, потом неймспейс
creds. Groups и сама редактируемая node из списка исключены. - Ключи — это выходы node. Данные текут вперёд, поэтому ссылаться на чужой вход не предлагается.
- Глубже — ключ с объектом или массивом внутри не заканчивает ввод: список остаётся открытым и предлагает следующий шаг,
.поледля объекта и[0]для массива. Вложенность набирается выбором, а не точками и скобками руками.
Клавиатура: ↑ ↓ двигают, ⏎ вставляет, Esc закрывает и оставляет текст как есть. В списке, который открылся сам после вставки, ничего не выбрано: ⏎ сохраняет то, что уже написано, ↓ уводит глубже. Это и есть ответ на «мне нужен summary или summary.count»: и то и другое, вопрос в том, какую клавишу нажать.
Пустой список — тоже ответ, и его видно: ничего не найдено, когда фильтр ничего не дал, и ссылаться пока не на что, когда в графе нет других nodes.
Синтаксис
| Форма | Что значит |
| --- | --- |
| {{Node.key}} | значение выхода |
| {{Node.items[0]}} | элемент массива |
| {{Node.items[i]}} | индекс из переменной |
| {{Node.a[0].b.c}} | вложенность любой глубины |
Тип рядом с ключом берётся из dataType порта и уточняется схемой выхода, если node её объявила, — array<object> вместо array. Это договорённость, а не гарантия: несовпадение типа редактор превращает в предупреждение, а не в запрет.
Переименование node
Ссылка это переживает. Переименование переписывает все выражения, которые ссылались на старое имя, — параметры и входные ports по всему графу — в одном шаге отмены вместе с самим переименованием. Имя сопоставляется целиком, поэтому переименование Fetch не тронет {{Fetch Orders.rows}}.
Секреты
Секреты проекта адресуются неймспейсом, который в продукте уже есть:
{{creds.smtp.token}}
Значение разворачивает бэкенд — до расширения и до интерфейса оно не доходит, в предпросмотре под полем стоит маска. creds — зарезервированное имя node, так что перекрыть неймспейс своей node нельзя.
Что получилось на прогоне
После прогона поле показывает, чем выражение обернулось на самом деле:
на последнем прогоне: 2
Это слот resolved — результат прогона, отдельный и от авторского дефолта, и от того, что ввели вы. В файл проекта он не уезжает, поэтому прогон не делает проект изменённым. Если выражение не разрешилось, в строке будет сказано именно это, а не подставлено пустое значение, — битая ссылка видна без открытия логов.
Значение руками
Значение выходного port правится в inspector так же, как любое другое поле. Это самый быстрый способ проверить, что из него соберут выражения ниже по потоку, ничего не запуская. Ввод значения очищает результат прогона у этого port, поэтому в дело идёт именно введённое.
Смотрите также: ports и их слоты значений, orchestrators.