Скрипты поведения

Скрипты поведения предоставляют возможность пользователю произвольным образом обрабатывать события договоров биллинга. События делятся на два типа: синхронные (запросы) и асинхронные (сообщения).

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

Синхронное событие (запрос) обрабатывается в процесе программы, породившем его и результат обработки используется в дальнейшей работе программы. Примером запроса является событие Запрос учётного периода в модуле DialUP. Обработка синхронного запроса, порожденного сервером биллинга так же производится центральным интерпретатором и не отличается по возможностям от асинхронного.

Для модификации данных в БД можно использовать как напрямую Java SQL API так и предлагаемые с ABilling API, описанное в разделе документации API документация для разработки скриптов. Все классы-события расширяют базовый класс ru.avantis.abilling.kernel.event.Event.

Для получения имени класса события воспользуйтесь горячей клавишей Ctrl + i, располагаясь на списке событий в редакторе привязки событий к скрипту BGBS, либо Java-классу (см. далее). В JavaDoc по классу события представлена полная информация по событию.

Создание скрипта поведения

Скрипты поведения заводятся в Справочники⇒Другие.

Справочник скриптов повдения

В меню Сервис⇒Автоматизация⇒Скрипты поведения производится привязка к скрипту поведения его функций. Оно содержит две вкладки: Скрипты BGBS и Классы Java.

Привязка динамически загружаемых Java-классов к скриптам поведения

Вкладка Классы Java содержит интерфейс управления привязкой динамических классов к скриптам поведения. Добавление привязки динамически загружаемого класса Java к скрипту поведения в качестве реакции на определённое событие в целом аналогично такому же действию при добавлении функции скрипта поведения на BGBS. Однако в качестве прямого редактирования кода предлагается выбрать лишь один из динамических классов, реализующих интерфейс ru.avantis.abilling.kernel.script.server.dev.EventScript, можно использовать наследование от класса ru.avantis.abilling.kernel.script.server.dev.EventScriptBase.

В базовом классе реализованы методы print и error, позволяющие выводить отладочную информацию и сообщения об ошибках простым способом, обеспечивая их попадание в логи выполнения скриптов.

Классы java

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

Редактор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

import avantis.billing.server.contract.bean.*;
import avantis.billing.server.util.*;
import java.sql.*;
import java.util.*;
import avantis.billing.server.contract.bean.*;

includeBGBS( "bgbs://ru.avantis.abilling.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 avantis.billing.server.contract.bean.*;
import avantis.billing.server.util.*;
import java.sql.*;
import java.util.*;
import avantis.billing.server.contract.bean.*;

includeBGBS( "bgbs://ru.avantis.abilling.kernel.script.common.bean.ScriptLibrary/default" );

if( event.getActionId() != 3333 )
{
   return;
}

gets(event);

event.addReport(doSomething("vvv"));

Обратите внимание на инструкцию включения библиотеки:

includeBGBS( "bgbs://ru.avantis.abilling.kernel.script.common.bean.ScriptLibrary/default" );

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

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

Привязка скриптов поведения к договору

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

Узел Скрипт

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

.логи выполнения
Сообщения об ошибках выполнения скриптов отправляются на E-Mail посредством системы оповещения биллинга.