Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »


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:

  1. Adnotację @ScheduledTask (jeżeli zadanie zaplanowane nie jest definiowane we wtyczce, musi ono pochodzić z pakietu com.suncode)
  2. Publiczną metodę oznaczoną adnotacją @Define z jednym parametrem ScheduledTaskDefinitionBuilder
  3. 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.

Definicja może zawierać również adnotację @ScheduledTaskScript. Adnotacja ta przekazuje ścieżkę do skryptu (z classpath) zawierającego definicję formularza dynamicznego.

Przykładowa definicja przedstawiona jest poniżej:

@ScheduledTask
@ScheduledTaskScript( "js/example-form.js" )
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
    • BOOLEAN
    • 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)
    • FILE - mapowanie do com.suncode.pwfl.customfile.ComponentFile
    • STRING_ARRAY
    • BOOLEAN_ARRAY
    • INTEGER_ARRAY
    • FLOAT_ARRAY
    • DATE_ARRAY
    • DATETIME_ARRAY
    • FILE_ARRAY
  • 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.
  • ScheduledTaskInstanceInfo - obiekt przechowujący informacje o danej instancji zadania zaplanowanego.

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.

UWAGA

Jeśli zadanie zaplanowane jest napisane jako rozszerzenie klasy AbstractAdvancedTask i ma włączoną adnotację cancelable = true to by przerwać wykonywanie takiego zadania należy w kodzie metody dodać warunek:

if (Thread.currentThread().isInterrupted())
{
    taskLog.info( "Anulowano....");
    log.info( "Anulowano....");
    break;
}         

Dynamiczny formularz

Dynamiczny formularz umożliwia zdefiniowanie formularza parametrów zadania zaplanowanego.

Rejestracja dynamicznego formularza

Plik przekazany w adnotacji @ScheduledTaskScript
PW.ScheduledTasks.register('example-scheduled-task', {
    buildParams: function (form) {
        form.addCombobox({
            id: 'example-scheduled-task',
            values: [
                ['wartosc1', 'Wartosc 1'],
                ['wartosc2', 'Wartosc 2'],
                ['wartosc3', 'Wartosc 3']
            ]
        });
    }
}

Jeżeli podczas dodawania elementu do formularza zdefiniujemy mu id i ta wartość będzie odnosić się do id parametru zdefiniowanego w komponencie, to wszystkie właściwości dla pola zostaną odczytane z definicji parametru (nazwa, opis, wymagalność, typ).

Jeżeli natomiast chcemy dodać pole, które nie jest związane z żadnym parametrem, to powinniśmy określić nazwę, opis, typ oraz wymagalność.

Dostępne funkcje dynamicznego formularza

FunkcjaParametryOpis
addField(definition, [position])

definition - identyfikator dodawanego parametru

lub obiekt zawierający definicję pola

position - pozycja na której dodany mam zostać parametr.

Gdy position nie zostanie podany, parametr zostanie

dodany na końcu formularza.

listeners - obiekt definiujacy funkcje zdarzeń na zmiennej

  • change - funkcja wywoływana, gdy zmieni się
    wartość pola.
    Funkcja może korzystać z następujących parametrów:
    • field- pole Combobox dla którego nastąpiła zmiana
    • newValue - nowa wartość pola


Dodanie parametru.

Przykład:

...
form.addField('param-1');
...

Jeżeli dodajemy pole niezwiązane z parametrem komponentu, to możemy określić jakiego typu ma być to pole.

Dostępne są następujące typy: string, integer, float, date, datetime, boolean, string[], integer[], float[], date[], datetime[], boolean[].

...
form.addField({
	id: 'custom',
	fieldType: 'date',
	...
});
...
 addTextArea(definition, [position])definition - identyfikator dodawanego parametru

lub obiekt zawierający definicję pola

position - pozycja na której dodany mam zostać parametr.

Gdy position nie zostanie podany, parametr zostanie dodany na końcu formularza.

listeners - obiekt definiujacy funkcje zdarzeń na zmiennej

  • change - funkcja wywoływana, gdy zmieni się
    wartość pola.
    Funkcja może korzystać z następujących parametrów:
    • field- pole dla którego nastąpiła zmiana
    • newValue - nowa wartość pola

Dodanie parametru jako pole typu `TextArea`.

Parametr musi być typu String.

 

Przykład:

...
form.addTextArea('param-1');
...

lub

...
form.addTextArea({
	id: 'param-1',
	...
});
...
addCombobox(definition, [position])definition - obiekt zawierający definicję pola

Definicja powinna zawierać nastepujące pola:

  • id - identyfikator parametru (opcjonalne)
  • valueField - nazwa pola, ustawiającego
    wartość pola
  • displayField - nazwa pola, którego wartość
    zostanie wyświetlona w polu
  • minChars - minimalna liczba wpisanych znaków,
    po której Combobox rozpoczyna filtrowanie.
    Domyślnie: 0.
  • values - ((info) dla typu lokalnego) tablica rekordów wartości wyświetlanych pola; rekordem może być:
    • obiekt z polami valueField i displayField zdefiniowanymi w konfiguracji
    • tablica 2-elementowa z wartością oraz tekstem wyświetlanym
  • remote - ((info) dla typu zdalnego) obiekt zawierający
    definicję zdalnego pobierania danych. Obiekt zawiera
    następujące pola:
    • url - adres URL
    • remoteSort - określa czy dane powinny
      być sortowane po stronie serwera (wartość true)
      czy po stronie przeglądarki (wartość false).
      Domyslnie false.
    • pageSize - liczba wyświetlanych wyników na stronie.
      Domyslnie 25.
  • sort - tablica obiektów definiujących sposób sortowania.
    Obiekt zawiera następujące pola:
    • field - pole po jakim chcemy sortować
    • direction - kierunek po jakim chcemy sortować.
      ASC dla kierunku rosnącego,
      DESC dla kierunku malejącego.
  • listeners - obiekt definiujacy funkcje zdarzeń na zmiennej
    • change - funkcja wywoływana, gdy zmieni się
      wartość pola.
      Funkcja może korzystać z następujących parametrów:
      • field- pole dla którego nastąpiła zmiana
      • newValue - nowa wartość pola

position - pozycja na której dodany mam zostać parametr.

Gdy position nie zostanie podany, parametr zostanie dodany na końcu formularza

 

Dodanie parametru jako pole typu `Combobox`.

Przykład dodania pola typu 'Combobox' lokalnego (local):

...
form.addCombobox({
	id: 'param-1',
	values : [
        ['activity', 'Zadanie'],
		['stage', 'Etap'],
	    ['process', 'Proces']
    ],
	sort: [{
		field: 'display',
		direction: 'DESC'
	}],
	listeners: {
        change: function (field, newValue){
		    ...
	    }
    }
});
...

Przykład dodania pola typu 'Combobox' zdalnego (remote):

...
form.addCombobox({
	id: 'param-1',
	valueField: 'id',
	displayField: 'display',
	remote: {
		url: Suncode.getAbsolutePath('plugin/com.suncode.example-plugin/example-combo/get'),
		remoteSort: false,
		pageSize: 20
	},
	sort: [{
		property: 'display',
		direction: 'DESC'
	}],
	listeners: {
        change: function (field, newValue){
		    ...
	    }
    }
});
...
addCheckbox(definition, [position])definition - identyfikator dodawanego parametru

lub obiekt zawierający definicję pola

position - pozycja na której dodany mam zostać parametr.

Gdy position nie zostanie podany, parametr zostanie dodany na końcu formularza.

listeners - obiekt definiujacy funkcje zdarzeń na zmiennej

  • change - funkcja wywoływana, gdy zmieni się
    wartość pola.
    Funkcja może korzystać z następujących parametrów:
    • field- pole dla którego nastąpiła zmiana
    • newValue - nowa wartość pola

Przykład:

...
form.addCheckbox('param-1');
...

Jeżeli podpinamy to pod parametr komponentu, to typ tego parametru musi być boolean.

addRow( [definition] )

definition - definicja wiersza.

Zawiera następujące pola:

  • id - identyfikator wiersza (opcjonalny)
  • fieldsSpace - odstęp w pikselach pomiędzy elementami wiersza. Domyślnie 5,
  • fieldLabel - nazwa (label) wiersza. Domyślnie nazwa wiersza tworzona jest na podstawie nazw elementów zawartych w wierszu.

Dodaje i zwraca "pusty" wiersz. Zwrócony wiersz umożliwia dodanie do niego pol. Pola będą dodawane obok siebie.

Przykład:

var row = form.addRow();
row.addField('param-1');
row.addField('param-2');
row.addCombobox(...);
addButton(definition, [position] )

definition - definicja przycisku.
Zawiera następujące pola:

  • id - identyfikator przycisku
  • text - wyświetlany tekst przycisku
  • handler - funkcja wywołująca się po kliknieciu przycisku

position - pozycja na której dodany mam zostać parametr.

Gdy position nie zostanie podany, parametr zostanie dodany na końcu formularza

Dodanie przycisku na formularzu.

Przykład:

form.addButton({
	id: 'btn-1',
	text: 'Przycisk',
	handler: function(){
	...
	}
})
addPassword(definition, [position])definition - identyfikator dodawanego parametru lub obiekt zawierający definicję pola

position - pozycja na której dodany mam zostać parametr.

Gdy position nie zostanie podany, parametr zostanie dodany na końcu formularza.

listeners - obiekt definiujacy funkcje zdarzeń na zmiennej

  • change - funkcja wywoływana, gdy zmieni się
    wartość pola.
    Funkcja może korzystać z następujących parametrów:
    • field- pole dla którego nastąpiła zmiana
    • newValue - nowa wartość pola

Dodanie parametru jako pole typu 'Password'.

Parametr musi być typu String.

Przykład:

...
form.addPassword('param-1');
...

lub

...
form.addPassword({
	id: 'param-1',
	...
});
...
hide(elementId)elementId - identyfikator elementu

Ukrywa pole o podanym id.

Przykład

...
form.hide('param-1');
...
show(elementId)elementId - identyfikator elementu

Pokazuje pole o podanym id.

Przykład:

...
form.show('param-1');
...
disable(elementId)elementId - identyfikator elementu

Wyłącza możliwość edycji pola o podanym id.

Przykład:

...
form.disable('param-1');
...
enable(elementId)elementId - identyfikator elementu

Włącza możliwość edycji pola o podanym id.

Przykład:

...
form.enable('param-1');
...
getValue(elementId)elementId - identyfikator elementu

Pobiera wartość parametru o podanym id.

Przykład:

...
form.getValue('param-1');
...
setValue(elementId, value)

elementId - identyfikator elementu

value - wartość do ustawienia

Ustawia przekazaną wartość do parametru o podanym id.

Dla typów tablicowych wartością jest tablica wartości.

Przykład:

...
form.setValue('param-1', 'value');
...
mask(onlyForm)

onlyForm - prawda by nałożyć maskę tylko na formularz parametrów, fałsz by nałożyć maskę na zawartość całego okna.

Nakłada maskę na formularz parametrów lub zawartość okna.

Przykład:

...
form.mask(false);
...
unmask(onlyForm)

onlyForm - prawda by usunąć maskę tylko z formularza parametrów, fałsz by usunąć maskę z zawartości całego okna

Usuwa maskę z formularza parametrów lub zawartości okna.

Przykład:

...
form.unmask(false);
...



  • No labels