Skip to Content

Режим Expression (Выражения)

Режим Expression используется в параметрах действий, которые поддерживают динамические значения. Вместо фиксированного текста или числа поле вычисляется во время выполнения миссии из входных параметров, состояния робота и результатов предыдущих действий.

Expression не следует путать с действием «Выполнить JavaScript». Expression вычисляет отдельное значение поля, а «Выполнить JavaScript» выполняет самостоятельный блок кода.

Открытие редактора

Если поле поддерживает два режима, рядом с ним доступно переключение между обычным значением и «Выражение».

  1. Выберите «Выражение».
  2. Откройте редактор выражений.
  1. Введите выражение с клавиатуры или перетащите переменную из левой панели.
  1. Проверьте, что нет ошибок.
  1. Закройте редактор и сохраните workflow.

В данных шаблона выражение хранится внутри {{ }}. Редактор добавляет внешние скобки автоматически.

{{$params.target_point}}

Доступные данные

ПеременнаяСодержимое
$paramsВходные параметры из настроек действия «Начало»
$inputВходные данные текущего действия
$robotДанные связанного с миссией робота
$nodesРезультаты ранее выполненных действий

Поля $params формируются по JSON Schema входных параметров. Результат действия доступен по его идентификатору или коду:

$nodes.read_order.result

Левая панель показывает доступные подстановки. Неизвестные переменные выделяются красным и не создаются автоматически.

Базовый синтаксис

Поддерживаются:

  • строки, числа, true, false и nil;
  • массивы [1, 2, 3] и объекты {name: "AGV-01"};
  • арифметика +, -, *, /, %;
  • сравнения ==, !=, <, >, <=, >=;
  • логические операции and, or, not либо &&, ||, !;
  • условный оператор condition ? value_if_true : value_if_false;
  • доступ к полям и элементам через . и [];
  • проверка вхождения in;
  • значение по умолчанию ??;
  • безопасный доступ ?..

Примеры

$params.target_point
$robot.battery < 20
$params.priority ?? 5
"Робот " + $robot.name + " направлен в точку " + $params.target_point
$nodes.read_ready.result == 1

Функции

Редактор предлагает автодополнение для доступных функций:

  • строки: trim, upper, lower, split, replace, hasPrefix, hasSuffix;
  • массивы: all, any, map, filter, find, count, sum, sort;
  • числа: min, max, abs, ceil, floor, round;
  • даты и интервалы: now, date, duration;
  • преобразования: int, float, string, toJSON, fromJSON, toBase64;
  • битовые операции: bitand, bitor, bitxor, bitnot, bitshl, bitshr;
  • служебные: len, get, type.

Пример фильтрации:

filter($input.robots, #.battery < 20)

Проверка времени:

now() - $input.last_seen > duration("5m")

Проверка бита состояния:

bitand($input.status_word, 0b100) != 0

Использование с действием «Если»

В параметре условия действия «Если» выражение должно возвращать true или false. Действие имеет отдельные выходы для истинного результата, ложного результата и ошибки вычисления.

$params.priority >= 5 and $robot.battery > 30

Если поле может отсутствовать:

($input.order?.priority ?? 0) >= 5

Диагностика

Если выражение не сохраняется или завершается ошибкой:

  1. Проверьте парность кавычек и скобок.
  2. Убедитесь, что путь начинается с $params, $input, $robot или $nodes.
  3. Проверьте название параметра в схеме действия «Начало» и код предыдущего действия.
  4. Убедитесь, что выражение возвращает тип, ожидаемый полем.
  5. Для действия «Если» проверьте, что результат является логическим.
  6. Для сложной последовательной обработки используйте действие «Выполнить JavaScript».