Подстановка данных в зависимости от текущего пользователя биллинга
Материал из BiTel WiKi
Admin (Обсуждение | вклад) (Новая: Функционал доступен от 4.6 версии. Актуален для случаев, когда нужно вывести какую-либо информацию в ш...) |
Skyb (Обсуждение | вклад) |
||
(4 промежуточные версии не показаны) | |||
Строка 19: | Строка 19: | ||
{ | { | ||
return userPrincipal.getUser(); | 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(); | ||
} | } | ||
} | } | ||
Строка 28: | Строка 43: | ||
{ | { | ||
String result = ""; | String result = ""; | ||
+ | |||
+ | /*Для получения текущей даты раскоментить | ||
+ | |||
+ | Format formatter = new SimpleDateFormat("dd-MMM-yyyy"); | ||
+ | String s = formatter.format(new Date()); | ||
+ | if( "year".equals( paramName ) ) | ||
+ | { | ||
+ | result = s; | ||
+ | } | ||
+ | */ | ||
// | // | ||
Integer currentUserId = getCurrentUserId(); | Integer currentUserId = getCurrentUserId(); | ||
if( currentUserId != null ) | if( currentUserId != null ) | ||
{ | { | ||
+ | // проверка кода пользователя | ||
if( currentUserId == 1 ) | if( currentUserId == 1 ) | ||
{ | { | ||
Строка 40: | Строка 66: | ||
else if ( "param2".equals( paramName ) ) | else if ( "param2".equals( paramName ) ) | ||
{} | {} | ||
- | } | + | } |
+ | else if ( currentUserId == 2 ) | ||
+ | { | ||
+ | if( "dover".equals( paramName ) ) | ||
+ | { | ||
+ | result = "на осн. доверенности 2 от 23.33.33"; | ||
+ | } | ||
+ | else if ( "param2".equals( paramName ) ) | ||
+ | {} | ||
+ | } | ||
} | } | ||
// | // | ||
Строка 67: | Строка 102: | ||
3) В месте, где нужно подставить параметр с именем dover текущего юзера делаете так: | 3) В месте, где нужно подставить параметр с именем dover текущего юзера делаете так: | ||
- | <xsl:value-of select="script:invoke('user','getCurrentUserParam', 'dover')" /> | + | <xsl:value-of select="script:invoke('user','getCurrentUserParam', 'dover')" /> |
Соответственно, вы можете придумывать новые имена параметров, только не забывайте описывать их значения в скрипте для каждого юзера.. В примере описан параметр для юзера с кодом 1 (admin). Данный метод удобен тем, что позволяет в отличие от inline параметров модуля Bill делать глобальные определения параметров пользователей для всего биллинга и всех его модулей. | Соответственно, вы можете придумывать новые имена параметров, только не забывайте описывать их значения в скрипте для каждого юзера.. В примере описан параметр для юзера с кодом 1 (admin). Данный метод удобен тем, что позволяет в отличие от inline параметров модуля Bill делать глобальные определения параметров пользователей для всего биллинга и всех его модулей. | ||
Строка 74: | Строка 109: | ||
* http://wiki.bgbilling.ru/index.php/XSLT (Выполнение скрипта из библиотек скриптов) | * http://wiki.bgbilling.ru/index.php/XSLT (Выполнение скрипта из библиотек скриптов) | ||
* http://wiki.bgbilling.ru/index.php/Получение_текущего_пользователя_биллинга | * http://wiki.bgbilling.ru/index.php/Получение_текущего_пользователя_биллинга | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Для 5.2 необходимо | ||
+ | return userPrincipal.getUser().getID(); | ||
+ | поменять на | ||
+ | return userPrincipal.getUser().getId(); | ||
+ | Иначе будет сыпать ошибку |
Текущая версия на 06:57, 13 февраля 2012
Функционал доступен от 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 = ""; /*Для получения текущей даты раскоментить Format formatter = new SimpleDateFormat("dd-MMM-yyyy"); String s = formatter.format(new Date()); if( "year".equals( paramName ) ) { result = s; } */ // 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/Получение_текущего_пользователя_биллинга
Для 5.2 необходимо
return userPrincipal.getUser().getID();
поменять на
return userPrincipal.getUser().getId();
Иначе будет сыпать ошибку