Подстановка данных в зависимости от текущего пользователя биллинга

Материал из BiTel WiKi

Версия от 06:57, 13 февраля 2012; Skyb (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Функционал доступен от 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 делать глобальные определения параметров пользователей для всего биллинга и всех его модулей.

Ссылки по теме:


Для 5.2 необходимо

return userPrincipal.getUser().getID();

поменять на

return userPrincipal.getUser().getId();

Иначе будет сыпать ошибку

Личные инструменты