Перейти к основному содержимому
Версия: 7.0

Интерпретатор

Интерпретатор — это интерактивный механизм, позволяющий администратору выполнять произвольный код на языке lsFusion (или вызов кода на Java) на уже работающем сервере приложений, без перезапуска и пересборки проекта. Код вводится в форме Система > Интерпретатор (System.interpreter в навигаторе) и выполняется на сервере в рамках новой сессии.

Любой код, выполняемый через интерпретатор, имеет тот же доступ к элементам системы (классам, свойствам, действиям, формам), что и обычный модуль, загруженный при запуске. Это позволяет проверять гипотезы, читать и точечно менять данные, запускать существующие действия и формы и временно вводить новые расчёты — без изменения файлов проекта.

Режимы ввода

Интерпретатор принимает четыре формы исходного кода — выбор режима определяет, как введённый текст оборачивается перед выполнением:

РежимЧто вводитсяЧто запускается
СкриптПоследовательность инструкций модуля, в которой объявлено действие без параметров run[].Запускается это действие run[].
ДействиеТело действия — последовательность операторов действий и объявлений локальных свойств.Платформа оборачивает тело в действие run[] и запускает его.
ФормаТело объявления формы.Платформа создаёт форму по этому телу и открывает её в интерактивном представлении.
JavaФрагмент кода на Java.Платформа оборачивает фрагмент во внутренний вызов Java и запускает его.

Выполнение

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

Если при выполнении возникает исключение, платформа открывает форму с текстом исключения и стэками вызовов на стороне Java и на стороне lsFusion; с этой формы можно скопировать всю эту информацию в буфер обмена.

Журнал

Каждый запуск через интерпретатор сохраняется в журнал скриптов (форма Журнал скриптов) с текстом скрипта, временем последнего изменения текста и временем последнего запуска. Сохранённый скрипт можно вернуть в интерпретатор кнопкой Найти скрипт.

Таблица данных

Форма интерпретатора содержит таблицу, колонки которой хранят строки (string1..string10, класс STRING[1000]), числа (numeric1..numeric5, класс NUMERIC[20,7]) и даты (date1..date3, класс DATE); к объектам этой таблицы выполняемый код может обращаться напрямую. Это позволяет вручную задать входные данные для скрипта и сразу увидеть результат в той же форме. Строки хранятся в базе данных: запуск скрипта предварительно применяет сделанные на форме изменения, поэтому введённые значения сохраняются между запусками, видны всем пользователям формы и остаются, пока их явно не удалят.

Доступ

Доступ к интерпретатору регулируется политикой безопасности: достаточно дать роли доступ к навигаторной форме System.interpreter. Пользователю, имеющему доступ к этой форме, также разрешён внешний доступ к программному интерфейсу даже при отключённом параметре работы enableAPI (см. параметры работы), поскольку этот пользователь и без того может выполнить любой код через интерпретатор.