...
Code Block |
---|
language | java |
---|
title | Operacje na procesach |
---|
linenumbers | true |
---|
|
ProcessBuilderDefinition definition = new ProcessBuilderDefinition();
definition.setPackageId( "suncode" );
definition.setCreator( "admin" );
definition.setCreatorPassword( "enhydra" );
definition.setProcessDefId( "proces1" );
Map<String, Object> variables = new HashMap<String, Object>();
variables.put( "zmienna1", "abc" );
definition.setVariables( variables );
String processId = processService.createProcess( definition );
// Pobieranie informacji o procesie
Process process = processService.getProcess( processId );
process = processService.getProcess( processId, Process.JOIN_PROCESS_DEFINITION );// jeżeli chcemy mieć dostęp
// do definicji procesu
String name = process.getName();
String desc = process.getDescription();
// Definicja procesu
ProcessDefinition processDef = process.getProcessDefinition();
String packageId = processDef.getPackageId();// bez Process.JOIN_PROCESS_DEFINITION rzuci wyjątek
String processDefId = processDef.getProcessDefinitionId();
// Zmiana wartości zmiennych procesu
Map<String, Object> ctx = processService.getProcessContext( processId );
ctx.put( "zmienna", "abc" );
processService.setProcessContext( processId, ctx );
//Usunięcie procesu
processService.deleteProcess( processId ); |
Do wyszukiwania procesów należy używać klasy ProcessFinder
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( idx, sorters, documentClassId, 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 |
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( filters, sorters, documentClassId, 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( filters, sorters, documentClassId, 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 )
Zadania
Code Block |
---|
language | java |
---|
title | Operacje na zadaniach |
---|
linenumbers | true |
---|
|
// Pobieranie informacji o zadaniu
Activity activity=activityService.getActivity( processId, activityId );
String activityDefId=activity.getActivityDefinitionId();
String desc=activity.getDescription();
String name=activity.getName();
ActivityState state=activity.getState();//RUNNING, NOT_STARTED, SUSPENDED, COMPLETED, TERMINATED, ABORTED
Date created=activity.getCreatedTime();//data utworzenia zadani
Date started=activity.getStartedTime();//data uruchomienia
// Zmiana wartości zmiennych zadania
Map<String,Object> activityContext=activityService.getActivityContext( processId, activityId );
activityContext.put( "zmienna", "wartość" );
activityService.setActivityContext( processId, activityId, activityContext );
//Otworzenie zadania przez podanego użytkownika. Jeżeli zadanie ma status 'Oczekujące na uruchomienie'
//i jest przypisane do podanego użytkownika to poniższa funkcja spowoduje przypisanie zadania
//do podanego użytkownia i zmieni status na 'Uruchomione'
activityService.openActivity( userName, userPassword, processId, activityId );
//Akceptacja zadania
String executor="jkowalski";//użytkownik akceptujący
String actionName="akceptacja";//nazwa akcji z mapy
Map<String,Object> map=new HashMap<String,Object>();
map.put( "zmienna", "wartosc" );//mapa nie zostanie całkowicie zastąpiona podaną
//zostaną nadpisane tylko podane wartości
AcceptationDefinition acceptation=new AcceptationDefinition( processId, activityId, executor, actionName );
acceptation.setContextMap( map );//opcjonalnie
|
...