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:

  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:

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:

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.

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

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 .

 

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 .

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);
...