Консоль
Консоль позволяет опробовать фрагмент кода 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» на немецком. Поэтому код, вызванный из истории после смены языка, всегда компилируется.
- При запуске Консоль восстанавливает ваш последний код, его контекст, результаты и точки останова — на общем компьютере у каждого свои.
- У администратора история и последний код к тому же переходят с одного компьютера на другой и сохраняются после очистки данных браузера.
Внимание
Эта история хранится в открытом виде в настройках плагина, которые загружают все пользователи базы. Не оставляйте в ней паролей и ключей доступа.
