Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Current »

Wstęp

Przydatne klasy:

  • SubstitutionService - zarządzanie zastępstwami użytkowników
  • SubstitutionFinder - wyszukiwanie zastępstw
Dostęp do usług
		SubstitutionService substitutionService = ServiceFactory.getSubstitutionService();
        SubstitutionFinder substitutionFinder = FinderFactory.getSubstitutionFinder();

Zarządzanie zastępstwami

Do zarządzania zastępstwami należy używać usługi SubstitutionService. Umożliwia ona m. in. dodawanie, zmianę, usuwanie zastępstw.

Przykłady
SubstitutionService ss = ServiceFactory.getSubstitutionService();		

//Utworzenie zastępstwa
Substitution substitution = new Substitution();
substitution.setProcessDefId( "test" );

RoleService rs = ServiceFactory.getRoleService();
ProcessService ps = ServiceFactory.getProcessService();
ProcessDefinition pd = ps.getProcessDefinition( substitutionForm.getProcessName() );
Role role = rs.getRole( pd.getPackageId(), pd.getProcessDefinitionId(), roleId );
substitution.setRole( role );

UserService us = ServiceFactory.getUserService();
substitution.setSubstituted( us.getUser("jkowalski") );
substitution.setSubstitute( us.getUser( "admin" ) );

substitution.setStartDate( new LocalDateTime( "2014-10-20") );
substitution.setFinishDate( new LocalDateTime( "2014-10-22" ) );

ss.createSubstitution( substitution );
 
//Pobieranie zastępstw
Substitution substitution  = ss.getSubstitution( 34L ); //pobieranie na podstawie id z bazy danych
List<Substitution> substitutions = ss.getSubstitutions( "admin" ); //pobieranie na podstawie loginu użytkownika (zastępstwa, w których podany użytkownik jest zastępcą lub zastępowanym)
 
//Modyfikacja zastępstwa
Substitution substitution  = ss.getSubstitution( 34L );
substitution.setProcessDefId( "test2" );
ss.updateSubstitution( substitution );
 
//Usuwanie zastępstwa
Substitution substitution  = ss.getSubstitution( 34L );
ss.deleteSubstitution( substitution ); //usuwanie na podstawie całego obiektu pobranego z bazy
ss.deleteSubstitution( 30L ); //usuwanie na podstawie id z bazy danych

Wyszukiwanie zastępstw

Usługa SubstitutionService udostępnia podstawowe i najczęściej wykorzystywane wyszukiwania zastępstw, np.: pobieranie zastępców dla danego użytkownika.

Do bardziej złożonego wyszukiwania służy usługa SubstitutionFinder, która pozwala na wyszukiwanie zastępstw w zależności od zdefiniowanych kryteriów.

Przykład z wykorzystaniem filtrów
SubstitutionFinder sf = FinderFactory.getSubstitutionFinder();
 
//definiujemy filtry wyszukiwania
List<HibernateFilter> filters = new ArrayList<HibernateFilter>();
//Łączenie kryteriów za pomocą operatora logicznego OR
GroupHibernateFilter groupFilter = new GroupHibernateFilter();
groupFilter.setLogicOperator( LogicOperator.OR );
 
//Warunek - processDefId = "test"
SimpleHibernateFilter filter1 = new SimpleHibernateFilter( "processDefId", "test" );
groupFilter.addFilter( filter1 );
//Warunek - lStartDate (data rozpoczęcia) > obecna data
SimpleHibernateFilter filter2 = new SimpleHibernateFilter( "lStartDate", ( new Date() ).getTime() );
filter2.setOperator( FilterOperator.GT );
groupFilter.addFilter( filter2 );
 
filters.add( groupFilter );
 
//Sortowanie malejąco po id z bazy
Sorter sorter = new Sorter( "id", SortDirection.DESC );
int start = 0;
int limit = 10;
 
Pagination pagination = Pagination.create( sorter, start, limit );
 
CountedResult<Substitution> substitutions = sf.findByFilters( filters, pagination );

Zdefiniowane powyżej wyszukiwanie znajdzie zastępstwa, które zdefiniowane są dla procesu "test" lub ich data rozpoczęcia jest późniejsza niż aktualna data. Wyniki zostaną zawężone do 10 pozycji i posortowane malejąco po "id" z bazy danych.

Do utworzenia filtrów zastosowano zdefiniowane filtry HibernateFilter.

Powyższy przykład można również zaimplementować za pomocą DetachedCriteria.

Przykład z wykorzystaniem DetachedCriteria
SubstitutionFinder sf = FinderFactory.getSubstitutionFinder();

DetachedCriteria dc = DetachedCriteria.forClass( Substitution.class );

//Łączenie kryteriów za pomocą operatora logicznego OR
Disjunction or = Restrictions.disjunction();
or.add( Restrictions.eq( "processDefId", "test" ) );
or.add( Restrictions.gt( "lStartDate", ( new Date() ).getTime() ) );

dc.add( or );

int start = 0;
int limit = 10;

/*Można wybrac jeden z dwóch poniższych wariantów:*/
 
//Pobieranie listy zastępstw za pomocą metody findByCriteria (musimy dodać order do DetachedCriteria.
dc.addOrder( Order.desc( "id" ) );
List<Substitution> substitutions = sf.findByCriteria( dc, start, limit );

//LUB
 
//pobieranie zastępstw wraz z całkowitą liczbą za pomocą getCountedResult (musimy utworzyć obiekt Sorter do sortowania)
Sorter sorter = new Sorter( "id", SortDirection.DESC );
Pagination pagination = Pagination.create( sorter, start, limit );
CountedResult<Substitution> substitutions = sf.getCountedResult( dc, pagination );
  • No labels