Генерация новостей исполнителям при изменении процессов

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

Перейти к: навигация, поиск

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

....
private void generateNews( Connection con, Process process, UserEvent event )
    throws BGException
{
	ProcessLinkDAO linkDao = new ProcessLinkDAO( con );
	ParamValueDAO paramDao = new ParamValueDAO( con );
	NewsDAO newsDao = new NewsDAO( con );
 
	CommonObjectLink linkCustomer = Utils.getFirst( linkDao.getObjectLinksWithType( process.getId(), Customer.OBJECT_TYPE ) );
 	ParameterAddressValue address = Utils.getFirst( paramDao.getParamAddress( process.getId(), PROCESS_PARAM_ADDRESS ).values() );
	if( address == null )
	{
		address = Utils.getFirst( paramDao.getParamAddress( process.getId(), PROCESS_PARAM_ADDRESSES ).values() );
	}
 
	if( linkCustomer == null || address == null) )
	{
		return;
	}
 
 	News news = new News();
	news.setCreateDate( new Date() );
 	news.setLifeTime( 200 );
	news.setReadTime( 400 );
	news.setUserId( event.getForm().getUserId() );
 
 	Set<Integer> userIds = new HashSet<Integer>( process.getExecutorIds() );
 
	// обработка события "сообщение добавлено"
	if( event instanceof ProcessMessageAddedEvent )
	{
		final int typeId = process.getTypeId();
		ProcessType type = ProcessTypeCache.getProcessType( typeId );
 
		news.setTitle( type.getTitle() + " " + linkCustomer.getLinkedObjectTitle() + " =&gt; новое сообщение" );
 
                // описание и ссылка открытия процесса в теле сообщения
		String text =
		   type.getTitle() + " \"" + linkCustomer.getLinkedObjectTitle() + ", " + address.getValue() + "\" получено новое сообщение.<br/>" +
		   "<a href='#UNDEF' onClick='openProcess( " + process.getId() + " )'>Перейти к процессу</a>";
 
		news.setDescription( text );
	}
 
        // пользователь, добавивший сообщение, новость не получает 
	userIds.remove( event.getForm().getUserId() );
 
	if( userIds.size() > 0 &&
	    Utils.notBlankString( news.getTitle() ) )
	{
		newsDao.updateNewsUsers( news, userIds );
	}
}
....
Личные инструменты