Консоль

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

Консоль существует начиная с версии 3.1. Отладчики, «Проверить», «Форматировать» и автодополнение JavaScript появились в версии 3.2.0 (бета).

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

Вкладка доступна только администраторам. На ней виден лишь её значок — окно терминала — между вкладками Отладчик и Ошибки; название появляется при наведении. Вкладка отключается в окне Настройки Ninext, раздел «Менеджер скриптов».

Выбор контекста выполнения

Код выполняется в контексте записи, как формула её таблицы, — или без записи:

КонтекстДействие
Без средыБез записи: код вычисляется как глобальный код.
Активная записьЗапись, показанная на переднем плане в Ninox. Контекст следует за вами, когда вы переходите к другой записи.
ЗаписьВыбранная вами запись — одна из открытых в окнах Ninox или найденная через пункт Выбрать другую запись…, который открывает окно выбора (таблица, поиск, список записей).
ФормулаЗапись, которую возвращает написанная вами формула, например record(Customer, 12). Формула вычисляется заново при каждом выполнении.

Панель контекста напоминает о выбранном контексте; крестик на ней сбрасывает его.

Написание кода

Редактор Консоли предлагает:

  • подсветку синтаксиса Ninox;
  • автодополнение функций, таблиц, полей и ключевых слов — во время ввода или по Ctrl + Пробел;
  • подчёркивание ошибок (красная волнистая линия) и предупреждений (янтарный пунктир) во время ввода, со значком ⛔ или ⚠ на полосе слева;
  • подсветку остальных вхождений выделенного слова;
  • кнопку Копировать в правом верхнем углу при наведении на редактор;
  • ручку под редактором, которая регулирует его высоту.

Автодополнение JavaScript в нативных блоках

В блоке #{ … }# Консоль предлагает ту же помощь при вводе, что и консоль браузера, с учётом того, что блок действительно получает:

  • видимые переменные и параметры Ninox в их JavaScript-форме, с указанием типа;
  • локальные функции Ninox, ui, database, а также callback, если блок объявлен как :callback или :async;
  • после точки — члены объекта (для записи — имена её полей); имя, которое не является идентификатором JavaScript, вставляется в виде ['…'];
  • в заголовке #{: — типы; после :nid( или :rid( — список таблиц.

Эта помощь есть только в Консоли.

Выполнение

Три режима выполнения в Консоли

Зелёная кнопка Выполнить запускает код, как и Ctrl + Enter (⌘ + Enter на Mac). Её шеврон предлагает три режима:

РежимДействие
ВыполнитьВыполняет код за один проход и показывает результат.
ВоспроизведениеВыполняет код один раз, а затем позволяет просматривать ход выполнения вперёд и назад.
Пошаговый режимВыполняет код инструкция за инструкцией, останавливаясь там, где вы решите.

Выбранный режим запоминается; кнопка принимает его название, а сочетание клавиш запускает этот режим. Если выбрать Пошаговый режим или Воспроизведение, под редактором сразу появляется панель этого отладчика — с командами на своих местах, но неактивными: до запуска ничего не выполняется. После успешного выполнения код в редакторе заново форматируется; в истории сохраняется текст в том виде, в каком вы его написали.

Чтение результатов

Результат запроса в Консоли

Результаты складываются стопкой, самый свежий — вверху; Консоль хранит двадцать последних. Каждый результат показывает свой тип, контекст, дату, время и длительность выполнения; щелчок по его заголовку сворачивает его, крестик удаляет, а Очистить очищает весь список.

  • Простое значение выводится с кнопкой Копировать.
  • Запись выводится с кнопкой, открывающей её в Ninox, и с деревом её полей.
  • Список записей выводится так же, как в представлениях Ninox: условное форматирование, миниатюры фотографий, цветные метки, ширина колонок. По вкладке на каждое представление, в порядке Ninox; представления, которые вам не разрешено видеть, скрыты. Когда не все вкладки помещаются, кнопка … («Другие представления») показывает список не поместившихся. Щелчок по строке открывает запись, а строки подгружаются по 100 по мере прокрутки.
  • Объекты и списки выводятся в виде раскрывающегося дерева; каждое значение можно скопировать, а запись открывается одним щелчком.
  • Текст, содержащий JSON, выводится как есть; кнопка Дерево раскрывает его по требованию.
  • Текст длиннее 100 000 символов выводится сразу — усечённым, с кнопкой Показать всё; Копировать всегда копирует текст целиком.

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

Проверка без выполнения

Проверить (Ctrl + Shift + Enter, ⌘ + Shift + Enter на Mac) компилирует код без выполнения: данные не затрагиваются. Кнопка сообщает об ошибках и предупреждениях Ninox и применяет собственные проверки Ninext:

  • функция интерфейса или нативный блок внутри do as server, где они не дали бы эффекта;
  • переменная, объявленная, но ни разу не прочитанная;
  • синтаксис JavaScript в нативных блоках;
  • HTML и CSS, передаваемые в html().

Вердикт выводится на панели, а курсор ставится на первую найденную проблему. Когда два типа не согласуются, пояснение говорит, какие именно. Если код корректен, он форматируется.

Форматирование

Форматировать (Ctrl + Shift + F, ⌘ + Shift + F на Mac) приводит код в порядок, не выполняя его: отступы, пробелы вокруг операторов, имена полей в том виде, в каком их показывает Ninox. JavaScript в нативных блоках #{ … }# тоже форматируется: блок, записанный одной строкой, разворачивается под строкой, в которой он находится.

Код с ошибками сначала нужно исправить; а если форматирование рискует потерять часть текста, оно не выполняется и сообщает об этом.

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

Пошаговый отладчик

Пошаговый отладчик: точка останова и переменные

Точки останова

  • Щелчок на полосе слева или по номеру строки ставит точку останова (красный кружок); повторный щелчок убирает её.
  • Правый щелчок или Alt + щелчок открывает панель Условие останова: выполнение остановится здесь, только если ваше условие истинно, например i > 10. В той же панели точку можно Отключить, не теряя её (серое кольцо), а затем снова Включить. Условная точка — янтарный кружок.
  • Условия вычисляются без доступа к базе, с помощью простых функций (count, length, text, upper, lower, contains…). Если условие не удаётся вычислить, выполнение останавливается из соображений безопасности.
  • Как только поставлена активная точка останова, Выполнить тоже останавливается на ней, а затем продолжает в пошаговом режиме.

Команды

Сеанс начинается с паузы на первой инструкции.

КомандаДействие
Следующий шагВыполняет инструкцию и останавливается перед следующей.
Под-шагПродвигается от подвыражения к подвыражению, показывая полученное значение. На вызове функции или на поле-формуле схемы входит в их код.
ВыйтиЗавершает текущую функцию и возвращается в вызывающий код.
ПродолжитьВыполняет код до следующей точки останова или до конца.
ОстановитьПрерывает выполнение.

Когда панель узкая, команды показывают только значок; их название появляется при наведении. Кнопка информации (ⓘ) на панели раскрывает описание работы отладчика, а крестик, который появляется по окончании выполнения, закрывает его панель.

Когда выполнение входит в функцию или формулу, её код открывается в наложенном кадре, который выезжает справа, как в Ninox. В нём можно ставить точки останова: они сохраняются по имени функции, действуют для всех вызовов этой функции и для последующих запусков и исчезают при перезагрузке страницы. Кадр формулы схемы помечен словом формула. Ручка на левом краю кадра регулирует, какую часть нижележащего кадра он закрывает. Блок #{ … }# считается одним шагом.

Переменные

На каждом шаге панель Известные переменные на этом шаге показывает значение и тип каждой переменной; значение можно раскрыть и скопировать, а запись открывается одним щелчком. Переменные, которые существуют, но находятся вне области видимости, показаны серым.

Полезно знать

На каждой паузе выполнение действительно приостанавливается, а база тем временем продолжает жить: другие пользователи, программный интерфейс, триггеры. То, что уже выполнено, остаётся применённым, даже если вы остановите выполнение. Пауза дольше десяти минут прерывает выполнение.

Отладчик с воспроизведением

Код выполняется по-настоящему, один раз и за один проход. Затем вы просматриваете ход выполнения вперёд и назад с помощью команд пошагового режима — Следующий шаг, Под-шаг, Выйти, Продолжить, — а также Первый шаг и Предыдущий шаг. Список шагов показывает значение, полученное на каждом из них; щелчок по шагу сразу ведёт к нему. Воспроизведение считает большими шагами: один на каждую выполненную инструкцию и один на каждый виток цикла, который показывает значение переменной цикла. Подшаги с отступом несут номер своего большого шага (3.1, 3.2…) и считаются отдельно («+6 подшагов»); Выйти также поднимает от подшага к большому шагу, который его содержит. Наложенные кадры и панель переменных — те же, что в пошаговом режиме. Идеально, чтобы понять, что произошло, не запуская код заново.

Ограничения:

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

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

Отладка из редактора Ninox

При наведении на редактор скриптов Ninox в правом верхнем углу появляется кнопка Отладка в Консоли. Она открывает Консоль и переносит туда ваш код, не выполняя его, с текущей записью в качестве контекста: если активной записи этой таблицы нет, открывается окно выбора записи из этой таблицы. Из глобального кода контекстом становится Без среды, и переносится только функция, в которой стоит курсор.

Перенесённый код заменяет код Консоли вместе с его точками останова.

История и работа, которая всегда с вами

  • Кнопка История показывает 50 последних команд; Alt + ↑ и Alt + ↓ перебирают их прямо из редактора. Щелчок загружает код и его контекст вместо текущего кода и его точек останова.
  • При наведении на строку истории появляется корзина, которая её удаляет.
  • Код, взятый из истории, перестраивается на текущем языке Ninox: «Id» превращается в «Nr» на немецком. Поэтому код, вызванный из истории после смены языка, всегда компилируется.
  • При запуске Консоль восстанавливает ваш последний код, его контекст, результаты и точки останова — на общем компьютере у каждого свои.
  • У администратора история и последний код к тому же переходят с одного компьютера на другой и сохраняются после очистки данных браузера.

Внимание

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