Подстановка данных в зависимости от текущего пользователя биллинга
Материал из BiTel WiKi
Функционал доступен от 4.6 версии.
Актуален для случаев, когда нужно вывести какую-либо информацию в шаблоне карточки договора либо счёта модуля Bill в зависимости от текущего пользователя биллинга. Например, номер доверенности, Ф.И.О. пользователя. Для примера рассмотрим случай, когда необходим вывод параметра dover - номер доверенности.
В конфурации сервера биллинга надо прописать jaas.subject=1, затем перезапустить сервер. Создадим библиотеку скриптов с именем user.
import java.security.AccessController; import javax.security.auth.Subject; import bitel.billing.server.admin.bean.User; import bitel.billing.server.admin.bgsecure.bean.UserLoginModule.UserPrincipal; public User getCurrentUser() { Subject subject = Subject.getSubject( AccessController.getContext() ); if( subject != null ) { for( UserPrincipal userPrincipal : subject.getPrincipals( UserPrincipal.class ) ) { return userPrincipal.getUser(); } } return null; } public Integer getCurrentUserId() { Subject subject = Subject.getSubject( AccessController.getContext() ); if( subject != null ) { for( UserPrincipal userPrincipal : subject.getPrincipals( UserPrincipal.class ) ) { return userPrincipal.getUser().getID(); } } return null; } public String getCurrentUserParam( String paramName ) { String result = ""; // Integer currentUserId = getCurrentUserId(); if( currentUserId != null ) { // проверка кода пользователя if( currentUserId == 1 ) { if( "dover".equals( paramName ) ) { result = "на осн. доверенности 1 от 23.33.33"; } else if ( "param2".equals( paramName ) ) {} } else if ( currentUserId == 2 ) { if( "dover".equals( paramName ) ) { result = "на осн. доверенности 2 от 23.33.33"; } else if ( "param2".equals( paramName ) ) {} } } // return result; }
В желаемом XSLT шаблоне вверху должно быть так (тут важен определённый неймспейс и xalan и script и описание xalan:component):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xalan="http://xml.apache.org/xalan" xmlns:script="bitel.billing.server.util.exslt.Scripting" version="1.0"> <xalan:component prefix="script" functions="invoke"> <xalan:script lang="javaclass" src="xalan://bitel.billing.server.util.exslt.Scripting"/> </xalan:component> .........
Скорректируйте заголовок.
3) В месте, где нужно подставить параметр с именем dover текущего юзера делаете так:
<xsl:value-of select="script:invoke('user','getCurrentUserParam', 'dover')" />
Соответственно, вы можете придумывать новые имена параметров, только не забывайте описывать их значения в скрипте для каждого юзера.. В примере описан параметр для юзера с кодом 1 (admin). Данный метод удобен тем, что позволяет в отличие от inline параметров модуля Bill делать глобальные определения параметров пользователей для всего биллинга и всех его модулей.
Ссылки по теме:
- http://wiki.bgbilling.ru/index.php/XSLT (Выполнение скрипта из библиотек скриптов)
- http://wiki.bgbilling.ru/index.php/Получение_текущего_пользователя_биллинга