Możliwe jest dodanie do systemu akcji zmiennych formularza (AUTO_UPDATE), data chooser'ów (dynamiczne listy), zadań automatycznych, narzędzi systemowych, walidatorów przycisków akceptacji, klas ustawiających zmienne, które zostaną wykryte podczas uruchamiania modułu edytora procesów. Dodatkowo moduł próbuje zaczytać pliki js z biblioteki CUF, które definiują parametryzowane funkcje dla przycisków tabeli dynamicznej, przycisków akceptacji. Możliwe będzie ich wykorzystanie podczas definiowania poszczególnych komponentów. Konieczne wtedy będzie uzupełnienie tylko konkretnych wartości (najczęściej wybranie zmiennych procesu/formularza z listy).

 

1. Data chooser (dynamiczna lista):

Klasę będącą data chooser'em umieszczamy w classpath projektu. Oznaczamy ją adnotacją @StandardDataChooser:

@StandardDataChooser( conf = DataChooserExampleConf.class )
public class DataChooserExample
    implements DataChooser
{
...
}

Adnotacja ta posiada właściwość conf, która przechowuje informację o klasie opisującej definicję danego data chooser'a w zależności od wersji językowej (pochodzącej z java.util.Locale np. pl, en). Klasa ta musi implementować interface StandardDataChooserDef. Posiada on następujące metody:

 

 

2. Auto update (akcja zmiennej formularza):

Klasę będącą auto update'em umieszczamy w classpath projektu. Oznaczamy ją adnotacją @StandardAutoUpdate:

@StandardAutoUpdate( conf = AutoUpdateExampleConf.class )
public class AutoUpdateExample
    extends HttpServlet
{
...
}

Adnotacja ta posiada właściwość conf, która przechowuje informację o klasie opisującej definicję danego auto update'u w zależności od wersji językowej (pochodzącej z java.util.Locale np. pl, en). Klasa ta musi implementować interface StandardAutoUpdateDef. Posiada on następujące metody:

 

 

3. Narzędzia systemowe:

Klasę będącą narzędziem systemowym umieszczamy w classpath projektu. Pozwala dodać narzędzie systemowe w jednym kroku (dodaje aplikację na poziomie procesu i zadania). Wymagane jest tylko określenie aktualnych parametrów w zadaniu. Klasę oznaczamy adnotacją @StandardTool:

@StandardTool( id = "exampletool", name = "Przykladowy", category = "Examples", description = "Opis tool'a", icon = "img/tool.png",
type = Type.JAVA_APPLICATION_WITH_TRANSACTION )
public class ToolExample
{
...
}

Adnotacja narzędzia systemowego posiada następujące właściwości:

 

Następnie należy zaimplementować statyczną, publiczą metodę o nazwie execute i oznaczyć jej parametry typu org.enhydra.shark.api.internal.toolagent.AppParameter (o ile posiada) adnotacjami @StandardToolParameter:

public static void execute( @StandardToolParameter( description = "Przykladowy parametr", mode = Mode.IN, type= Type.INTEGER ) AppParameter parameter )
{
...
}

Adnotacja parametru narzędzia systemowego posiada następujące właściwości:

 

Jeżeli właściwość actualParametersForm w adnotacji @StandardTool przyjmuje wartość FIELDS, to edytor procesów buduje formularz parametrów aplikacji na podstawie szablonu w postaci pliku xml. Szablon musi posiadać określoną strukturę. Nadrzędnym elementem jest element Form. Może posiadać on następujące dzieci:

 

Podczas budowania formularza niektóre pola mają zdefiniowane zdarzenia, których nie należy nadpisywać w sekcji Lisneters w definicji pola. Są to następujące zdarzenia dla pól:

 

Obsługa dynamicznej listy po stronie serwera (dostarczenie danych) wiąże się z przygotowaniem kontrolera. Należy stworzyć klasę oznaczoną adnotacją @Controller, która implementuje interfejs DynamicListProvider<T>. Implementowana przez niego metoda getData powinna być oznaczona adnotacją @RequestMapping(value = "url_wywolania", method = RequestMethod.POST) (istotne jest, żeby kontroler oczekiwał żądania wywołanego za pomocą metody POST). Za pomocą DynamicListForm możliwa jest obsługa filtrowania poprzez wykorzystanie właściwości query oraz filtrowania poprzez wykorzystanie właściwości start i limit.

 

Obsługa pola wywołującego serwis po stronie serwera (zwrócenie statusu, dostarczenie danych) wiąże się z przygotowaniem kontrolera. Należy stworzyć klasę oznaczoną adnotacją @Controller, która implementuje interfejs ServiceCallerProvider<T extends ControllerResult>. Implementowana przez niego metoda getData powinna być oznaczona adnotacją @RequestMapping(value = "url_wywolania", method = RequestMethod.POST) (istotne jest, żeby kontroler oczekiwał żądania wywołanego za pomocą metody POST). Zwracany obiekt dziedziczy z obiektu ControllerResult. Akcje po wywołaniu serwisu są wykonywane jedynie w przypadku, gdy właściwość success zwracanego obiektu jest ustawiona na wartość true. Dodatkowo, gdy właściwość success ma wartość false, możliwe jest wyświetlenie wiadomości o błędzie umieszczonej we właściwości errorMessage.

 

Podczas wywoływania skryptów przygotowanych przez twórcę szablonu formularza parametrów aplikacji możliwe jest wykorzystanie globalnej zmiennej formApi, która stanowi API JS formularza. Udostępnia ono następujące funkcje:

 

4. Akcje przycisków tabeli dynamicznej:

Ich definicja znajduje się w pliku CUFdefs.js w projekcie CUF w lokalizacji scripts/external/CommonUsedFunctions. Plik js zawiera zmienną CUF, która jest obiektem. Posiada on właściwość DTButtons, który także jest obiektem. Kolejne właściwości definiują obiekty zawierające tłumaczenia (np. pl, en). Wewnątrz nich znajdują się właściwości określające akcje przycisków przycisków (nazwa właściwości jest identyfikatorem przycisku). Obiekt definicji akcji przycisku tabeli dynamicznej zawiera następujące pola:

var CUF = {
    DTButtons: {
        pl: {
            importFromXls: {
                name: 'Import pliku Excel',
                descr: 'Import linii tabeli z pliku Excel',
                buttonId: 'CUF_import_from_xls_button',
                text: 'Importuj',
                icon: 'style/img/fam/page_excel.png',
                tooltip: 'Importuj linie z pliku',
                handler: 'CUF.table.service.TableButton.importFromExcel',
                params: [ {
                    viewName: 'Uwzględnij ukryte kolumny',
                    realName: 'showHidden',
                    type: 'boolean',
                    defaultValue: false
                },{
                    viewName: 'Zapisz dane po wczytaniu',
                    realName: 'saveData',
                    type: 'boolean',
                    defaultValue: true
                }, {
                    viewName: 'Przycisk wyboru pliku',
                    realName: 'fileButtonLabel',
                    type: 'string',
                    defaultValue: 'Wybierz plik'
                }, {
                    viewName: 'Przycisk importowania',
                    realName: 'loadButtonLabel',
                    type: 'string',
                    defaultValue: 'Importuj'
                }, {
                    viewName: 'Tytuł okna',
                    realName: 'windowTitle',
                    type: 'string',
                    defaultValue: 'Import pliku Excel'
                }, {
                    viewName: 'Dodatkowa funkcja',
                    realName: 'functionName',
                    type: 'string',
                    defaultValue: ''
                } ]
            }
		}
	}
};

 

5. Akcje przycisków akceptacji:

Ich definicja znajduje się w pliku CUFdefs.js w projekcie CUF w lokalizacji scripts/external/CommonUsedFunctions. Plik js zawiera zmienną CUF, która jest obiektem. Posiada on właściwość AcceptButtonFunctions, który także jest obiektem. Kolejne właściwości definiują obiekty zawierające tłumaczenia (np. pl, en). Wewnątrz nich znajdują się właściwości określające akcje przycisków (nazwa właściwości jest identyfikatorem przycisku). Obiekt definicji akcji przycisku tabeli dynamicznej zawiera następujące pola:

var CUF = {
    AcceptButtonFunctions: {
        pl: {
            checkComment: {
                handler: 'CUF_checkComment',
                descr: 'Sprawdza, czy w obecnym zadaniu został dodany komentarz'
            }
		}
	}
};

 

setFieldStoreParameter