Przydatne klasy:
SubstitutionService substitutionService = ServiceFactory.getSubstitutionService(); SubstitutionFinder substitutionFinder = FinderFactory.getSubstitutionFinder(); |
Do zarządzania zastępstwami należy używać usługi SubstitutionService. Umożliwia ona m. in. dodawanie, zmianę, usuwanie zastępstw.
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 ListSubstitution> 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 |
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.
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.
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 ); |