Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Spis treści

Table of Contents
exclude.*Spis treści.*

Tip
titleJavadoc

 http://javadoc.plusworkflow.pl/javadoc/plusworkflow/

Wstęp

API Systemu PlusWorkflow udostępnia zbiór interfejsów i klas umożliwiających wykonywanie operacji systemowych. Najważniejszymi elementami API są usługi (Service) i klasy wyszukujące (Finder). Dostęp do tych elementów uzyskujemy poprzez klasy ServiceFactory oraz FinderFactory. Przykłady:

Code Block
languagejava
titlePobieranie usług
UserService us=ServiceFactory.getUserService();
ActivityService as=ServiceFactory.getActivityService();
Code Block
titlePobieranie klas wyszukujących
UserFinder uf=FinderFactory.getUserFinder();
PositionFinder pf=FinderFactory.getPositionFinder();

Gdy mamy stworzoną instancję klasy Service możemy wykonywać dowolne operacje. Lista dostępnych serwisów:

  1. UserService - zarządzanie użytkownikami, oraz grupami użytkowników
  2. StructureService - zarządzanie stanowiskami, jednostkami organizacyjnymi,
  3. RoleService -zarządzanie rolami,
  4. UserSettingsService - zarządzanie ustawieniami użytkowników
  5. ArchiveStorageService - zarządzanie strukturą archiwum ( urządzenia, katalogi )
  6. DocumentClassSerivce - zarządzanie klasami dokumentów
  7. DocumentService - zarządzanie dokumentami archiwum systemowego
  8. FileService - zarządzanie plikami systemu
  9. ActivityService - zarządzanie zadaniami
  10. ProcessService - zarządzanie procesami
  11. FormService - odczyt informacji dotyczących formularza procesów
  12. CommentService - zarządzanie komentarzami procesów
  13. CustomService - zarządzanie własnymi obiektami bazodanowymi
  14. DocumentTemplateService - zarządzanie szablonami dokumentów dla procesów

Lista dostępnych interfejsów wyszukujących:

  1. UserFinder - wyszukiwanie użytkowników
  2. UserGroupFinder - wyszukiwanie grup użytkowników
  3. DocumentFinder - wyszukiwanie dokumentów
  4. ProcessFinder - wyszukiwanie procesów
  5. ActivityFinder - wyszukiwanie zadań
  6. PositionFinder - wyszukiwanie stanowisk
  7. OrganizationalUnitFinder - wyszukiwanie jednostek organizacyjnych
  8. RoleFinder - wyszukiwanie ról

Przykłady użycia usług

Code Block
languagejava
titleDodanie użytkownika (UserService)
linenumberstrue
 		UserService us=ServiceFactory.getUserService(); 
        User user = new User("jkowalski","haslo");
        user.setFirstName("Jan");
        user.setLastName("Kowalski");
        us.createUser( user , "Pracownicy");

 

Code Block
languagejava
titlePobranie użytkownika (UserService)
UserService us=ServiceFactory.getUserService(); 
User user = us.getUser("jkowalski");

Pobieranie powiązanych obiektów

Większość obiektów w systemie ma powiązania z innymi obiektami. Powiązania te obrazują schemat bazy danych. W większości przypadków obiekt podstawowy np. User, Position itd., znajduje się w osobnej tabeli bazy danych dlatego obiekty powiązane nie są domyślnie pobierane, aby zminimalizować czas wykonywania zapytania. Aby umożliwić pobieranie obiektów powiązanych metody służące do pobierania danych tj. get(), getAll(),getBy,,,() są wyposażone w parametr 'joins', określający które elementy mają zostać dołączone do pobieranego obiektu. Każda klasa podstawowa ma zdefiniowane stałe statyczne, których możemy użyć jako wartości parametru 'joins'. Argument  'joins' możemy ustawiać przekazując do funkcji tablicę lub listę wartości oddzielonych przecinkiem (parametr jest typu String). Przykłady:

 

Code Block
languagejava
titlePobranie użytkownika i jego grup (UserService)
User user = service.getUser( "jkowalski", User.JOIN_GROUPS );
for ( UserGroup ug : user.getGroups() )
{
   log.debug( ug.getName() );
}


Warning
titleUwaga

Gdyby w funkcji getUser nie przekazano parametru 'joins' to podczas odwołania do pola 'groups' klasy User wystąpiłby wyjątek LazyInitializationException(chyba, ze w momencie odwołania do pola 'groups' istnieje otwarta transakcja).

 

Code Block
languagejava
titlePobranie wielu obiektów powiązanych (UserService)
User user = service.getUser( "jkowalski", User.JOIN_GROUPS, User.JOIN_POSITIONS, User.JOIN_OU );
Set<UserGroup> groups=user.getGroups();
Set<Position> positions=user.getPositions();
for ( Position position : positions )
{
   log.debug( position.getOrganizationalUnit().getName() );
}
 

Jak widać na powyższym przykładzie możemy pobierać obiekty powiązane pośrednio. W przykładzie pobieramy stanowiska użytkownika i dla każdego stanowiska pobieramy również jednostkę organizacyjną.

 

Info
titleZaawansowane dołączanie obiektów

Tak naprawdę w celu dołączenia obiektów powiązanych nie musimy korzystać z pól statycznych tj. User.JOIN_GROUPS, ponieważ pod nimi kryje się zwykły ciąg znaków zawierający pola klasy, które mają zostać dołączone podczas pobierania. Musimy pamiętać, aby dołączyć również wszystkie pola pośrednie. Spójrzmy na przykład:

Code Block
languagejava
User user = service.getByUserId( "jkowalski", "positions", "positions.organizationalUnit", "positions.organizationalUnit.directorPosition","positions.organizationalUnit.directorPosition.roles" );

Powyższe zapytanie pobierze użytkownika o loginie 'jkowalski', dołączy stanowiska, do stanowiska dołączy jednostkę, do jednostki dołączy stanowisko kierownicze i dla tego stanowiska dołączy również role. Dzięki temu możemy wykonać np. następujący kod:

Code Block
languagejava
  for ( Position p : user.getPositions() )
            {
                if ( p.getOrganizationalUnit() != null )
                {
                    if ( p.getOrganizationalUnit().getDirectorPosition() != null )
                    {
                        for ( PositionRole pr : p.getOrganizationalUnit().getDirectorPosition().getRoles() )
                        {
                            log.debug( pr.getRoleId() );
                        }
                    }
                }
            }

Oczywiście tak złożone zapytanie poza tym, że raczej nie ma większego sensu, nie jest zalecane z uwagi na stosunkowo długi czas wykonywania.

Używanie pól statycznych do dołączania obiektów jest zalecane, ponieważ eliminuje możliwość popełnienia błędu (literówki).