Конструктор выражения предназначен для создания, редактирования и проверки выражения, используемого в параметре действия и в действии «Вычислить выражение» на схеме робота. Используя конструктор, вы можете формировать выражения из операторов, значений переменных, свойств элементов и результатов действий.

Вызов конструктора выражений

Чтобы открыть конструктор выражений, нажмите кнопку «Настроить выражение»:

  • в параметре действия с типом Строка/Число/Логический/Объект;

  • в действии «Вычислить выражение выражение» на схеме робота.

Интерфейс конструктора

Окно конструктора выражений включает следующие области:

  1. Поле ввода выражения – центральная рабочая область. Здесь вы формируете выражение из отдельных блоков.
  2. Панель операторов – содержит кнопки всех доступных операторов. Подробнее в ;
  3. Тип результата выражения;
  4. Панель доступных для использования переменных, свойств элементов и результатов действий. Подробнее ;
  5. Панель ошибок. Подробнее.

Создание выражения

Чтобы создать выражение, начните вводить значение в поле ввода. Выражение формируется из отдельных блоков ввода.

В блоке ввода можно использовать:

  • числовые значения – вводятся напрямую (например, 2, 3.14); 
  • строковые значения – обязательно в двойных кавычках ("текст"); 
  • логические значения – true или false; 
  • операторы – вводятся вручную или выбираются из верхней панели; 
  • переменные, свойства и результаты – вводятся через символ @ или выбираются на левой панели.

Чтобы создать выражение:

  1. Заполните первый блок значением:
    • вручную введите число или строку в двойных кавычках;
    • для ввода переменной/свойства элемента/результата действия введите символ @ и выберите подходящий вариант из списка автодополнения. Подробнее;

    • кликните по переменной/свойства элемента/результата на левой панели. Подробнее.

  2. Добавьте операторы:
    • вручную введите необходимый оператор;
    • выберите оператор из значений на верхней панели. Подробнее.
  3. Продолжайте формировать выражение.

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


Автодополнение

Автодополнение отображается при вводе значения в блок и изменяется по мере ввода текста. 

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

Меню блока ввода

Для каждого блока ввода доступно меню со следующими действиями:

  • очистить блок (Ctrl+Shift+Backspace)
  • удалить блок (Ctrl+Shift+Del)
  • открыть скобку
  • закрыть скобку
  • вставить блок слева (Alt+←)
  • вставить блок справа (Alt+→)
  • вставить значение переменной, свойства, результата (@), для обращения к переменным, свойствам, результатам (Ctrl+2)
  • вставить текст (")" для вставки строки (в блок добавляются двойные кавычки, курсор устанавливается между них) 
  • вызвать метод (.) Подробнее 
  • перенести строку (Shift+Enter)

Навигация между блоками

Навигация между блоками осуществляется с помощью клавиатуры:

  • ← – переход к предыдущему блоку при расположении курсора в начале блока;
  • → – переход к следующему блоку при расположении курсора в конце блока;
  • Tab – переход к следующему блоку;
  • Shift + Tab – переход к предыдущему блоку;
  • Shift + Enter – перенос строки (также выполняется автоматически при достижении ширины области).

Верхняя панель

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

Левая панель

Левая панель содержит вкладки:

  • Переменные;
  • Свойства;
  • Результаты.

Во вкладках Переменные и Результаты доступна фильтрация по типам:

  • Логический;
  • Строка;
  • Число.

По клику на элемент выполняется вставка ссылки в новый блок ввода.

Методы

Проверка выражения и ошибки

Проверка выражения выполняется автоматически по мере ввода. 

Если в выражении есть ошибка:

  1. Ошибочные фрагменты подсвечиваются в поле ввода.
  2. Список ошибок отображается в нижней панели. При клике на текст ошибки курсор автоматически переместится к блоку, содержащему ошибку.

Учтите, что кнопка «Сохранить» заблокирована до тех пор, пока в выражении присутствует хотя бы одна ошибка.

Типичные причины ошибок:

  • отсутствие закрывающей скобки;
  • незакрытая кавычка в строке;
  • два оператора подряд (например, 5 + * 7);
  • лишний оператор в конце выражения;
  • несовместимые типы в операции (например, "строка" - 5).

Сохранение выражения

Когда вы сформировали выражение, и оно не содержит ошибки, нажмите кнопку «Сохранить».

После сохранения:

  1. Выражение, сформированное в конструкторе, преобразуется в действие «Выражение» на схеме робота.
  2. Если конструктор вызывался из параметра действия и выражения – выражение разместится на схеме перед тем действием, в параметре которого оно было написано.

Учтите, что вы не сможете сохранить выражение, если выражение, если в нем присутствуют ошибки. Подробнее об ошибках

<script>
  AJS.toInit(function() {
    var toc        = document.querySelector('.toc-float');
    var aside      = toc.closest('.cell.aside');
    var mainHeader = document.getElementById('main-header');
    var auiHeader  = document.querySelector('nav.aui-header');
    var marginTop  = 10; // дополнительный отступ сверху

    // Вставка заголовка, если ещё не вставлен
    function insertHeader() {
      if (!toc.querySelector('.toc-header')) {
        var header = document.createElement('div');
        header.textContent = 'На этой странице:';
        header.className = 'toc-header';
        header.style.fontWeight = 'bold';
        header.style.marginBottom = '10px';
        toc.insertBefore(header, toc.firstChild);
      }
    }

    // Применение inline-стилей
    function applyStyles() {
      insertHeader();

      // Получаем ширину родителя
      var asideRect = aside.getBoundingClientRect();

      // Вычисляем вертикальный отступ
      var offset = 0;
      if (mainHeader) {
        var mhRect = mainHeader.getBoundingClientRect();
        if (mhRect.bottom > 0 && mhRect.top < window.innerHeight) {
          offset = mhRect.bottom;
        }
      }
      if (offset === 0 && auiHeader) {
        var ahRect = auiHeader.getBoundingClientRect();
        offset = ahRect.bottom;
      }
      var topOffset = Math.max(offset + marginTop, asideRect.top);

      Object.assign(toc.style, {
        position:     'fixed',
        top:          topOffset + 'px',
        left:         asideRect.left + 'px',
        width:        asideRect.width + 'px',
        maxHeight:    (window.innerHeight - topOffset - 20) + 'px',
        overflowY:    'auto',
        boxSizing:    'border-box',
        border:       '1px solid #ddd',
        borderRadius: '4px',
        padding:      '15px',
        zIndex:       'auto'
      });
    }

    // Инициалный вызов
    applyStyles();

    // Обновление при скролле, ресайзе окна
    window.addEventListener('scroll', applyStyles);
    window.addEventListener('resize', applyStyles);

    // Наблюдатель за изменением размеров родителя
    if (window.ResizeObserver) {
      new ResizeObserver(applyStyles).observe(aside);
    }
  });
</script>