Написание функций скрипта поведения на языке BGBS

Первая вкладка содержит возможность управления функциями скрипта поведения, написанными на BGBS.

Данная подсистема оставлена для совместимости с ранними версиями биллинга. Предпочтительно использовать динамический Java код.

images/download/attachments/43385248/img144.gif

images/download/attachments/43385248/x_089.png

Получение имени класса события по Ctrl + i.

images/download/attachments/43385248/x_506.png

Редактор скриптов обладает подсветкой синтаксиса, индикацией строки и позиции и следующими горячими клавишами:

  • Ctrl+X - вырезать

  • Ctrl+C - копировать

  • Ctrl+V - вставить

  • Ctrl+Z - отменить

  • Ctrl+R - повторить

  • Ctrl+L - переход к строке

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

images/download/attachments/43385248/x_411.png

Если во время редактирования скрипт был изменен другим пользователем, то при сохранении выводится сообщение об этом с указанием имени и логина пользователя, внесшего изменения.

images/download/attachments/43385248/x_471.png

Программирование в BeanShell в целом идентично Java, но есть некоторые исключения:

  • print( "test" ) - вывод строки (будет видна в логе обработки) вместо System.out.println( "" ).

  • error( "error" ) - вывод ошибки вместо System.err.println( "" ).

При обработке события в скрипт передаются следующие переменные:

  • con - объект типа java.sql.Connection - соединение с базой биллинга;

  • conSlave - объект типа java.sql.Connection - соединение с Slave базой биллинга, либо Master, если ее нет;

  • setup - объект класса ru.bitel.bgbilling.server.util.DefaultServerSetup - конфигурация сервера биллинга;

  • event - объект, расширяющий bitel.billing.server.script.bean.event.Event - содержит класс-описание события.

Тело скрипта может выглядеть, например, следующим образом. Приведен пример обработки абстрактного события. Это оптимальная по производительности схема скрипта, когда главная функция onEvent интерпретируется один раз и далее запускается многократно.

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" );

Сами библиотеки скриптов определяются в меню Сервис=>Автоматизация=>Библиотеки скриптов. Для каждой библиотеки должно быть определено уникальное имя. Библиотека представляет из себя функции, которые становятся доступными после включения в скрипте инструкции includeBGBS. На снимке ниже представлен код библиотеки default, использованной в скрипте выше.

images/download/attachments/43385248/x_418.png

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