Zmiana indeksów | linenumbers | true |
---|
| WfDocument document = documentService.getDocument( documentId, documentClassId );
IndexInfo indexInfo1 = document.getIndexByName( "idx1" );// pobieramy indeks po nazwie
//ustawienie wartości indeksów
indexInfo1.setValue( "abc" );//typ STRING
document.setIndexValue( 2L,new Date() );//poprzez id, typ DATE
document.setIndexValue( "idx3",333L );//poprzez nazwę, typ LONG
document.setIndexValue("idx4",0.4);//type DOUBLE
//Typy wprowadzanych wartości muszą odpowiadać typom indeksów
documentService.updateDocument( document );//funkcja zapisuje zmiany w bazie danych |
Wyszukiwanie dokumentów Do wyszukiwania dokumentów należy używać klasy DocumentFinder Code Block |
---|
language | java |
---|
title | Podstawowe wyszukiwanie dokumentów |
---|
linenumbers | true |
---|
| DocumentFinder documentFinder=FinderFactory.getDocumentFinder();
Map<Long, Object> idx = new HashMap<Long, Object>();
idx.put( 1L, "wartość tekstowa" );
idx.put( 2L, 555 );
idx.put( 3L, new Date() );//wartości indeksów po których chcemy wyszukiwać
List<Sorter> sorters=new ArrayList<Sorter>();
sorters.add( new Sorter("3",SortDirection.DESC) );//sorujemy malejąco po indeksie o id 3
CountedResult<WfDocument> result=documentFinder.findByIndexes( documentClassId, idx, sorters, start, limit );
long total=result.getTotal();//liczba wszystkich pasujących dokumentów
List<WfDocument> documents=result.getData();//lista znalezionych dokumentów ograniczona przez start i limit |
Info |
---|
title | Uwaga dot. metody getDocumentsFromProcess |
---|
| Metoda getDocumentsFromProcess pobiera dokumenty dołączone tylko do ostatniego zadania procesu tj. takiego, które ostatnie zmieniło swój stan. Co może to mieć znaczenie w przypadku występowania zadań równoległych. Bowiem dokumenty zostaną pobrane tylko z jednego zadania tj. tego które było zmienione ostatnie. Natomiast możliwość pobrania dokumentów z więcej niż jednego zadania daje metoda getDocumentsFromOpenedActivities, która pobiera dokumenty z podanego procesu podłączone do wszystkich otwartych zadań. |
Przedstawiona wyżej metoda wyszukuje dokumenty o indeksach równych (operator '=' ) podanym wartościom i wszystkie warunki łączy operatorem logicznym AND. Jeżeli chcemy stworzyć bardziej zaawansowane warunki wyszukiwania możemy wykorzystać następującą metodę: Code Block |
---|
language | java |
---|
title | Zaawansowane wyszukiwanie |
---|
| DocumentFinder documentFinder = FinderFactory.getDocumentFinder();
List<IndexFilter> filters = new ArrayList<IndexFilter>();
filters.add( new SimpleIndexFilter( 3L, date, FilterOperator.GT ) );//Greater then '>'
filters.add( new SimpleIndexFilter( 1L, "%test%", FilterOperator.LIKE ) );//definiujemy operatory wyszukiwania
CountedResult<WfDocument> result = documentFinder.findByIndexes( documentClassId, filters, sorters, start, limit ); |
W powyższym przykładzie zdefiniowaliśmy operatory wyszukiwania, lecz warunki nadal są połączone logicznym operatorem AND. Aby to zmienić możemy wykorzystać grupowanie filtrów: Code Block |
---|
language | java |
---|
title | Grupowanie filtrów |
---|
linenumbers | true |
---|
| List<IndexFilter> filters = new ArrayList<IndexFilter>();
GroupIndexFilter gif = new GroupIndexFilter( LogicOperator.OR );//tworzymy grupę warunków połączonych operatorem OR
gif.addFilter( new SimpleIndexFilter( 3L, date, FilterOperator.GT ) );
gif.addFilter( new SimpleIndexFilter( 1L, "%test%", FilterOperator.LIKE ) );
GroupIndexFilter subGroup=new GroupIndexFilter(LogicOperator.AND);// tworzymy kolejną grupę warunków
subGroup.addFilter( new SimpleIndexFilter( 5L, "abc") );
subGroup.addFilter( new SimpleIndexFilter( 2L, 555 ) );
gif.addFilter( subGroup );//do grupy warunków możmy dodać inną grupę tworząc drzewo warunków
filters.add( gif );
CountedResult<WfDocument> result = documentFinder.findByIndexes( documentClassId, filters, sorters, start, limit ); |
Powyższy przykład utworzy następujący warunek: idx_3 > date OR idx_1 = '%test' OR ( idx_5 = 'abc' AND idx_2 = 555 ) Code Block |
---|
language | java |
---|
title | Dołączanie powiązanych obiektów |
---|
linenumbers | true |
---|
| CountedResult<WfDocument> result = documentFinder.findByIndexes( documentClassId, filters, sorters, start, limit, WfDocument.JOIN_DOC_CLASS );
List<WfDocument> docs= documentFinder.getDocumentsFromActivity( processId, activityId, WfDocument.JOIN_DOC_CLASS );
WfDocument doc=docs.get(0);
String documentClassName=doc.getFile().getDocumentClass().getName();//bez podania WfDocument.JOIN_DOC_CLASS wywołanie tej linii spowodowałoby błąd |
Podając argument WfDocument.JOIN_DOC_CLASS dołączymy informacje o klasie dokumentów. Wyszukiwanie i zarządzanie dokumentami w zadaniach/procesach
Do zarządzania dokumentami i ich wyszukiwania w zadaniach oraz pobierania szczegółowych informacji o nich można używać usługi ActivityDocumentService. Umożliwia ona : - pobranie informacji o podłączonych dokumentach (w tym informacje o : zadaniach, procesach, plikach, wersji pliku oraz użytkowniku który podłączył)
- sprawdzenie czy jest podłączony co najmniej jeden dokument
- odłączenie wszystkich dokumentów
- odłączanie dokumentu z procesu/zadania
- odłączenie pliku
- modyfikację dokumentu
- przepisanie dokumentu z zadania do kolejnych zadań
- wyszukiwanie dokumentów wg kryteriów
Szczegóły dostępne w najnowszym javadoc.
Code Block |
---|
language | java |
---|
title | Przykład pobrania informacji |
---|
linenumbers | true |
---|
| ActivityDocumentService ads = ServiceFactory.getActivityDocumentService();
Long fileId = 100L;
List<ActivityDocument> documents = ads.getActivityDocuments( fileId, ActivityDocument.JOIN_USER ); |
Drugi parametr jest opcjonalny. Jeśli w zwróconych obiektach, któreś informacje nie są wypełnione to w zależności od potrzeb trzeba jako dodatkowe parametry podać stałe z ActivityDocument: JOIN_USER, JOIN_VERSION, JOIN_FILE, JOIN_PROCESS, JOIN_ACTIVITY. Można podać więcej niż jedną stałą, dodając je jako kolejne parametry.
Do wyszukiwania dokumentów wg kryteriów dostępne są usługi : findOne, findByCriteria, getAll, getCountedResult itp.
Implementacja WfDocument Klasa WfDocument reprezentuje dokument w systemie. Tworzy powiązanie między klasami WfFile, WfFileVersion oraz indeksami dokumentu(wartościami z tabeli pm_idx_000x). WfFileKlasa WfFile reprezentuje plik w systemie. Zawiera podstawowe informacje o pliku. WfFileVersionKlasa WfFileVersion reprezentuje wersję pliku w systemie. Relacja między obiektami WfFile, a WfFileVersion to 1-do-1 |