Первая вкладка содержит возможность управления функциями скрипта поведения, написанными на BGBS.
Данная подсистема оставлена для совместимости с ранними версиями биллинга. Предпочтительно использовать динамический Java код.
Получение имени класса события по
.Редактор скриптов обладает подсветкой синтаксиса, индикацией строки и позиции и следующими горячими клавишами:
- вырезать |
- копировать |
- вставить |
- отменить |
- повторить |
- переход к строке |
При редактировании скриптов нет необходимости перезагрузки запускающих их приложений, достаточно поправить и сохранить нужный скрипт. Перед сохранением скрипта производится его синтаксический анализ с выявлением ошибок, если они есть.
Если во время редактирования скрипт был изменен другим пользователем, то при сохранении выводится сообщение об этом с указанием имени и логина пользователя, внесшего изменения.
Программирование в BeanShell в целом идентично Java, но есть некоторые исключения:
- вывод строки (будет видна в логе обработки) вместо System.out.println( "" ). |
- вывод ошибки вместо System.err.println( "" ). |
При обработке события в скрипт передаются следующие переменные:
- объект типа java.sql.Connection - соединение с базой биллинга; |
- объект типа java.sql.Connection - соединение с Slave базой биллинга, либо Master, если ее нет; |
- объект класса ru.bitel.bgbilling.server.util.DefaultServerSetup - конфигурация сервера биллинга; |
- объект, расширяющий bitel.billing.server.script.bean.event.Event - содержит класс-описание события. |
Тело скрипта может выглядеть, например, следующим образом. Приведен пример обработки абстрактного события. Это оптимальная по производительности схема скрипта, когда главная функция
интерпретируется один раз и далее запускается многократно.import bitel.billing.server.contract.bean.*; import bitel.billing.server.util.*; import java.sql.*; import java.util.*; import bitel.billing.server.contract.bean.*; includeBGBS( "bgbs://ru.bitel.bgbilling.kernel.script.common.bean.ScriptLibrary/default" ); public void onEvent( event, setup, con, conSlave ) { if( event.getActionId() != 3333 ) { return; } gets(event); event.addReport(doSomething("vvv")); }
Вот эта же функция, переписанная по-старому (работает медленнее в 8-10 раз):
import bitel.billing.server.contract.bean.*; import bitel.billing.server.util.*; import java.sql.*; import java.util.*; import bitel.billing.server.contract.bean.*; includeBGBS( "bgbs://ru.bitel.bgbilling.kernel.script.common.bean.ScriptLibrary/default" ); if( event.getActionId() != 3333 ) { return; } gets(event); event.addReport(doSomething("vvv"));
Обратите внимание на инструкцию включения библиотеки:
includeBGBS( "bgbs://ru.bitel.bgbilling.kernel.script.common.bean.ScriptLibrary/default" );
Сами библиотеки скриптов определяются в меню
. Для каждой библиотеки должно быть определено уникальное имя. Библиотека представляет из себя функции, которые становятся доступными после включения в скрипте инструкции . На снимке ниже представлен код библиотеки , использованной в скрипте выше.Библиотеку можно включить из другой библиотеки, но данный подход не рекомендуется, т.к. по неосторожности можно создать зацикливание включения библиотек.