Скрипты виджетов
Скрипты виджета позволяют выполнять операции пользователя с компонентами виджета и данными сервера. Скрипты написаны на языке Java. Каждый скрипт выполняется в Java Virtual Machine (JVM), в которой выполняется виджет (это может быть JVM, запускающая SberMobile IIoT Platform Client или SberMobile Server JVM, если виджет запускается в веб-интерфейсе). Таким образом, скрипт имеет доступ ко всем объектам внутренней памяти и струткурам виджета. Скрипты дают вам возможность полностью контролировать виджет.
Права доступа скрипта никак не ограничены. Одна случайная ошибка в скрипте или враждебный программный код могут привести к неправильному функционированию %ag%> сервера или клиента, к их зависанию, 100% загрузке процессора, повреждению данных или даже повреждению данных устройства, которое запустило скрипт! |
Запуск выполнения скрипта
Скрипт виджета выполняется в двух случаях:
- При обработке привязки, чья цель указывает на этот скрипт;
- Когда выражение привязки вызывает функцию
script()
.
Скрипты создаются в потоке обработки привязки, поэтому их выполнение может занимать много времени с учетом обработки других привязок виджета. Рекомендуется создавать новые потоки для выполнения задач скриптов виджета, требующих большого количества времени.
Управление скриптами
Скрипты создаются и управляются редактированием свойств Скриптов корневой панели виджета.
Интерфейс скрипта
Каждый скрипт является классом Java, который должен выполнять интерфейс WidgetScript
:
|
Данный интерфейс определяет метод execute()
, который вызывается при выполнении скрипта.
Результат выполнения выражения привязки передается скрипту виджета в качестве объекта parameter.
Среда выполнения скрипта
Каждый скрипт имеет доступ к объекту, выполняющему интерфейс WidgetScriptExecutionEnvironment
, который передается как аргумент для метода execute(). WidgetScriptExecutionEnvironment
выглядит следующим образом:
|
Экземпляр WidgetScriptExecutionEnvironment
обеспечивает доступ к объекту, выполняющему интерфейс GUIEngine
(получить интерфейс можно путем вызова метода getEngine()
). GUIEngine
обеспечивает доступ к объектам, отвечающим за выполнение виджета.
Метод getCause()
возвращает ссылку (объект типа "ссылка"), которая инициирует обработку привязки, вызвавшую выполнение скрипта. Данная ссылка может указывать на данные контекста или свойство компонента виджета.
Шаблон скрипта
При создании нового скрипта его текст непустой. Он содержит автоматически генерируемый класс с пустым методом execute()
. Далее приведен текст скрипта по умолчанию:
|
Разработка скриптов
См. раздел Общие указания по программированию для получения информации о разработке скриптов виджетов SberMobile.
Написание скриптов
По сути скрипты должны выполнять следующее:
- Читать/записывать свойства компонентов виджета
- Генерировать события компонентов виджета
- Читать/записывать переменные контекста сервера (т.е. настройки аппартаного устройства и свойства ресурсов сервера)
- Вызывать операции сервера и устройства (функции)
В большинстве случаев все операции должны производиться через интерфейс Context
.
Для получения Context
, соответствующего любому объекту сервера, используйте следующий код:
|
Для получения Context
, соответствующего определенному компоненту виджета, используйте следующий код:
|
Когда извлекается экземпляр Context
, вы можете читать/записывать переменные, используя методы getVariable()
и setVariable()
. Для контекстов компонента виджета большинство переменных напрямую соответствуют свойствам компонента (т.е. Шрифт, Ширина, Цвет и т.д.)
Пример 1: Обработка свойства компонента
Например, для применения пользовательской обработки к Таблице Данных, хранящейся в компоненте Редактор Таблицы Данных, используйте следующий код:
|
Пример 2: Закрытие другого виджета
Этот пример иллюстрирует, как один виджет закрывает другой виджет при помощи щелчка мыши.
Скрипт вызывает статический метод ClientUtils.removeFrame()
и передает ключу фрейма действие к закрытию. Ключ фрейма виджета создается методом ClientUtils.createWidgetFrameKey()
, который принимает путь контекста виджета и путь его контекста по умолчанию (или корневой путь контекста, т.е. пустую строку в случае абсолютного виджета).
|
Пример 3: Открытие URL в браузере
Этот пример иллюстрирует, как открыть определенный веб-сайт в браузере. Нижеприведенный скрипт можно запустить при помощи щелчка мыши. Он принимает URL как единственный параметр.
|