Przydatne linki
Zadanie zaplanowane
Zadanie zaplanowane to komponent użytkownika pozwalający na zdefiniowanie zadania wykonywanego okresowo.
Stworzenie zadania zaplanowanego możliwe jest w panelu administratora (Administracja -> Konfiguracja systemu -> Zadania zaplanowane)
Definiowanie zadania zaplanowanego
Zadanie zaplanowane tworzone jest w oparciu o definicję stworzoną przez użytkownika. Definicja taka musi zawierać następujące elementy:
- Adnotację @ScheduledTask (jeżeli zadanie zaplanowane nie jest definiowane we wtyczce, musi ono pochodzić z pakietu
com.suncode) - Publiczną metodę oznaczoną adnotacją @Define z jednym parametrem ScheduledTaskDefinitionBuilder
- Publiczną metodę o nazwie execute, która ma zostać wykonana okresowo. Metoda execute może zwracać dowolny typ włącznie z void. Zwrócona wartość będzie wyświetlona jako wynik przetwarzania zadania zaplanowanego. Ustawienie typu void jest jednoznaczne z brakiem rezultatu.
Przykładowa definicja przedstawiona jest poniżej:
@ScheduledTask
public class ExampleScheduledTask {
@Define
public void definition( ScheduledTaskDefinitionBuilder builder ) {
builder
.id( "example-scheduled-task" )
.name( "example.scheduled.task.name" )
.description( "example.scheduled.task.desc" )
.cancelable()
.parameter()
.id( "scheduled-task-param" )
.name( "example.scheduled.task.param.name" )
.description( "example.scheduled.task.param.desc" )
.type( Types.STRING )
.create();
}
public void execute( @Param( value = "scheduled-task-param" ) String param )
{
// Ciało zadania zaplanowanego
...
}
}
Implementacja metody execute
Zadanie zaplanowane musi posiadać metodę o nazwie execute. Metoda może posiadać następujące typy parametrów:
- pojedynczy parametr zadania zaplanowanego - typ parametru musi być zgodny ze zdefiniowanym typem oraz musi być poprzedzony adnotacją @Param. Obsługiwane typy parametrów:
- STRING
- INTEGER
- FLOAT
- DATE - mapowane do org.joda.time.LocalDate (format yyyy-MM-dd)
- DATETIME - mapowane do org.joda.time.LocalDateTime (format yyyy-MM-dd HH:mm:ss)
- Parameters - zawiera wszystkie zdefiniowane parametry zadania zaplanowanego wraz z ich wartościami, jest to alternatywa dla pobierania parametru za pomocą wyżej wspomnianej adnotacji @Param,
- Translator - translator dla tego komponentu. Więcej informacji tutaj,
- CancelationHandler - przechowuje informację o tym, czy użytkownik w GUI kliknął przycisk Anuluj wykonywanie. Sam mechanizm anulowania zadania musi zaimplementować twórca komponentu. Przycisk Anuluj wykonywanie pokaże się tylko, jeżeli w builderze została wywołana metoda cancelable,
- Logger - logger do logowania własnych komunikatów w komponencie. Komunikaty są zapisywane do plików (skonfigurowanych w Log4j) oraz zostaną wyświetlone w historii wykonywania zadania.
- ProgressHolder - obiekt, w którym ustawić można aktualny progress wykonywania zadania zaplanowanego (liczba między 0 a 1). Progress ten zostanie wyświetlony w GUI.
Rejestracja zadania zaplanowanego we wtyczce
Jeżeli zadanie zaplanowane jest definiowane we wtyczce to należy dodatkowo zaznaczyć, że wtyczka ta udostępnia komponenty. W tym celu należy w pliku suncode-plugin.xml dodać wpis:
<!-- Udostępnianie komponentów (m.in. zadań zaplanowanych) --> <workflow-components key="components" />
Metoda jako zadanie zaplanowane we wtyczce
Zadanie zaplanowane we wtyczce nie musi być komponentem. Może zostać stworzone tak samo, jak zadania zaplanowane definiowane w projektach klienckich - zadanie zaplanowane jako wywołanie publicznej metody.
Np. po stworzeniu klasy we wtyczce:
package com.suncode.plugin;
public class SomePluginClass
{
public void someMethod( String text, Integer number )
{
System.out.println( "Text: " + text + ", number: " + number );
}
public void someMethod2( String text, Double number )
{
System.out.println( "Text: " + text + ", number: " + number );
}
}
Po wpisaniu com.suncode.plugin.SomePluginClass w pole Nazwa klasy w oknie dodawania nowego zadania zaplanowanego wyświetlone zostaną metody someMethod oraz someMethod2, które można wybrać i dodać jako zadanie zaplanowane.
Takie zadania mają jednak ograniczenia:
- nie można użyć adnotacji AdvancedTask do nadania nazwy, opisu itd. dla zadania zaplanowanego
- nie można przerwać takiego zadania
- nie można ustawić progresu dla takiego zadania
- nie można logować
Ze względu na powyższe ograniczenia funkcjonalność ta powinna służyć jedynie do testowania własnych klas we wtyczkach. Preferowane jest, aby docelowo zadania zaplanowane we wtyczkach były komponentami.
