Скрипты

Интегрированные языки выражений и запросов SberMobile помогают в решении большинства повседневных задач по обработке данных. Однако иногда этого недостаточно. Бывает, становятся необходимыми возможности полноценного языка программирования с циклами, переменными, объявлениями методов и пр. С этой целью, SberMobile Server может обрабатывать скрипты, написанные на Java и R. Эти скрипты выполняются внутри виртуальной машины Java (JVM) сервера, разрешая им доступ ко всем внутренним данным сервера в добавок к входным параметрам самого скрипта. Таким образом, скрипты - это очень мощный инструмент, дающий возможность полностью контролировать сервер в режиме реального времени.

Скрипты можно вызывать из выражений, что делает их доступными для:

  • Подготовки исходных данных для отчета

Существует два способа запустить скрипт:

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

  • Автоматическое выполнение при запуске %ls%>. Выполнение скрипта происходит автоматически при запуске, если включен флажок Запускать автоматически при включении сервера в свойствах скрипта. В этом случае, входные данные не передаются в скрипт.

Скрипт может вернуть некоторые данные в форме объекта таблица данных. Данная таблица возвращается функцией выполнить контекста Скрипт. Если скрипт возвращает NULL, функция выполнить возвращает таблицу из одной ячейки с пустым (nullable) строковым полем.

Как и когда писать скрипты

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

Следующие правила позволяют написать хороший скрипт:

  • Лучший скрипт - тот, который берет входные данные и использует математическую/логическую обработку для преобразования их в выходные данные, не затрагивая и не влияя на среду выполнения.

  • Если необходим доступ к окружению, его следует осуществлять через формализованные программные интерфейсы и классы унифицированной модели данных  SberMobile. К этим интерфейсам относятся Context, ContextManager, DataTable, и др. Для большей информации см. главу Разработка.

  • У скриптов не должно быть доступа к сокетам и они не должны выполнять никакого сетевого взаимодействия. Сетевые операции, используемые для получения внешних данных или для показа локальных данных внешним системам, должны выполняться драйверами устройств.

  • Скрипты не должны иметь прямого доступа к файловой системе сервера. Это можно осуществить через драйверы устройств Файл и Папка.

  • Скрипты не должны создавать потоки и запускать сторонние процессы. Многопоточность осуществляется должным образом во всех "активных" объектах системы (таких как модели), которые могут вызвать ваш скрипт как обратный вызов.

  • Хороший скрипт должен иметь ограниченное и предсказуемое время выполнения. Он не должен надолго зависать ни при каких обстоятельствах.

  • Если скрипт вызывает методы сторонних библиотек, они должны отвечать вышеперечисленным правилам (иметь минимум взаимодействия со средой, не иметь доступа к ресурсам системы и т.д.)

Администрирование скриптов

Для администрирования скриптов используются два контекста: общий контекст Скрипты, который служит в качестве контейнера, и контекст Скрипт, который содержит информацию об определенном скрипте.

Каждый пользователь имеет свой набор скриптов.

Встроенные скрипты

В настоящее время всего один скрипт входит в ядро дистрибутива SberMobile Server. Этот скрипт называется Расчет даты нарушения SLA и описан в руководстве Прогнозирование нарушений SLA.