Akcje formularza to komponenty, umożliwiające wykonywanie dowolnych akcji na formularzu zadania w reakcji na działania użytkownika, zmiany danych czy też inne zdarzenia formularza. Przykładowe akcje mogą np.
Stworzone akcje dostępne są w edytorze procesów i mogą być łatwo wykorzystane w procesie biznesowym umożliwiając tym samym realizacje logiki biznesowej. Ich zachowanie może być dodatkowo konfigurowane za pomocą parametrów.
Akcje tworzone są w oparciu o ich definicję stworzoną przez użytkownika. Definicja taka musi zawierać następujące elementy:
com.suncode
)@Actions
może być zdefiniowanych wiele różnych akcji)Przykładowa definicja przedstawiona jest poniżej:
@Actions @ActionsScript( "actions/example.js" ) public class ExampleActions { @Define public void logger( ActionDefinitionBuilder action ) { // budowanie definicji akcji } } |
Teraz wykorzystując obiekt definiujemy akcję:
@Define public void logger( ActionDefinitionBuilder action ) { action .id( "logger" ) .name( "actions.logger.name" ) .description( "actions.logger.desc" ) .category( Categories.DEBUG ) .destination( ActionDestination.form() ) .icon( SilkIconPack.APPLICATION_OSX_TERMINAL ) .parameter() .id( "msg" ) .name( "actions.logger.param.msg.name" ) .description( "actions.logger.param.msg.desc" ) .type( Types.STRING ) .create() .parameter() .id( "error" ) .name( "actions.logger.param.level.name" ) .description( "actions.logger.param.level.name" ) .type( Types.BOOLEAN ) .create(); } |
Akcja musi być zdefiniowana po stronie serwera. W tym celu należy utworzyć klasę i oznaczyć ją adnotacją . Adnotacja ta sprawia, że system będzie szukał definicji akcji w tej klasie. Dodatkowo należy dodać adnotację
i jako jej wartość podać relatywną ścieżkę do skryptu z implementacją akcji. W tak przygotowanej klasie należy teraz dodać definicję akcji. W tym celu trzeba dodać metodę i oznaczyć ją adnotacją
. Metoda musi przyjmować jeden parametr typu
. W implementacji metody należy za pomocą przekazanego builder'a zdefiniować wszystkie własności akcji.
Elementy docelowe wskazywane są na etapie tworzenia definicji akcji. Określają one, do jakich elementów formularza może być dodana akcja:
Element | Opis | Przykłady akcji | Wybór w PWE |
---|---|---|---|
form | Formularz Akcja dodana do formularza inicjowana jest metodą | Akcje w których nie można wskazać głównego elementu np.
| ![]() |
variable | Zmienna Akcja dodana do zmiennej formularza inicjowana jest metodą | Akcje w których można jednoznacznie wskazać zmienną, której akcje dotyczy (w największym stopniu) np.
| ![]() |
variableset | Tabelka dynamiczna Akcja dodana do zmiennej formularza inicjowana jest metodą | Akcje które dotyczą tabelki dynamicznej i potrzebują jej identyfikator np.
| ![]() |
button | Przycisk Akcja dodana do przycisku formularza inicjowana jest metodą | Akcje których źródłem jest przycisk np.
| ![]() |
W celu ułatwienia tworzenia akcji które reagują na domyślne zdarzenia elementów docelowych możliwe jest zdefiniowanie tzw. akcji domyślnych.
Twórca akcji może zadeklarować funkcje, które wykonają się automatycznie, jeżeli wystąpi zdarzenie skojarzone z elementem docelowym akcji np. jeżeli akcja dodana jest do przycisku, to klikniecie w ten przycisk spowoduje wywołanie zdefiniowanej akcji domyślnej.
Akcje domyślne są wywoływane tylko jeżeli warunek wykonania akcji jest spełniony. Parametry wywołania akcji domyślnej są takie same jak parametry zdarzeń, które są źródłem wywołania akcji domyślnej. |
Zdarzenia domyślne w zależności od elementu docelowego akcji:
Element docelowy | Nazwa funkcji | Domyślne zdarzenie | Opis |
---|---|---|---|
ActionDestination.button() | button | click ( | Funkcja wywoływana jest po kliknięciu na przycisk, do którego dodana jest akcja. |
ActionDestination.variable() | variable | change ( | Funkcja wywoływana jest po zmianie wartości zmiennej, do której dodana jest akcja. |
ActionDestination.variableSet() | variableSet | change ( | Funkcja wywoływana jest jeżeli zmieni się wartość jakiejkolwiek zmiennej należącej do tabeli dynamicznej, do której dodana jest akcja. |
Poniżej przykładowa implementacja akcji pokazującej skonfigurowaną wiadomość. W zależności elementu docelowego wiadomość pokaże się przy naciśnięciu przycisku, zmianie wartości zmiennej lub zmianie danych w tabelce.
PW.FormActions.create('message', { // domyślne akcje defaultActions: { button: function(button){ this.showMsg(); }, variable: function(variable, newValue, oldValue){ this.showMsg(); }, variableSet: function(variableSet, added, updated, removed){ this.showMsg(); } }, showMsg: function(){ ServiceFactory.getMessageService().showSuccess(this.get('msg')); } }); |
Kategorie ułatwiają podział oraz wyszukiwanie akcji. Opisywane są one za pomocą interfejsu . Dostępna jest podstawowa implementacja tego interfejsu
, która udostępnia podstawowe kategorie. Tworząc akcję można skorzystać z tych kategorii. W przypadku braku jakiejś kategorii można ją dodać do tej implementacji bądź stworzyć własną.
Akcja może być zdefiniowana dla konkretnych elementów formularza. Definicji dokonujemy za pomocą klasy . Dostępne są następujące elementy:
Dla wszystkich elementów formularza poza FORM podczas definicji należy podać id parametru akcji (jeżeli akcja posiada parametry). Umożliwia to automatyczne podpięcie danego elementu do tego parametru podczas wyboru akcji w PlusWorkflowEditor.
Akcje mogą posiadać parametry.
Definicja parametru:
Jeżeli przekazana zostanie do parametru wartość innego typu niż w definicji, to zostanie ona skonwertowana do tego typu.
Akcja musi być zdefiniowana po stronie serwera. W tym celu należy utworzyć klasę i oznaczyć ją adnotacją . Adnotacja ta sprawia, że system będzie szukał definicji akcji w tej klasie. Dodatkowo należy dodać adnotację
i jako jej wartość podać relatywną ścieżkę do skryptu z implementacją akcji. W tak przygotowanej klasie należy teraz dodać definicję akcji. W tym celu trzeba dodać metodę i oznaczyć ją adnotacją
. Metoda musi przyjmować jeden parametr typu
. W implementacji metody należy za pomocą przekazanego builder'a zdefiniować wszystkie własności akcji.
@Action @ActionScript( "resources/actions/test/hiding-variables-action.js" ) public class HidingVariablesAction { @DefineAction public void action( ActionDefinitionBuilder action ) { action .id( "hiding-variables-action" ) .name( "action.hiding.variables.name" ) .description( "action.hiding.variables.desc" ) .icon( SilkIconPack.APPLICATION_FORM ) .category( Categories.TEST ) .destination( ActionDestination.form() ) .parameter().id( "variables" ).name( "action.hiding.variables.parameter.name" ) .description( "action.hiding.variables.parameter.desc" ).type( Type.VARIABLE ) .array().create(); } } |
Zdefiniowana na serwerze akcja formularza musi zostać zarejestrowana i zaimplementowana po stronie przeglądarki. Rejestrację umożliwia klasa za pomocą metody
. Pierwszym parametrem metody jest id akcji (id musi odpowiadać tej akcji, która została zdefiniowana na serwerze), drugim parametrem jest obiekt konfiguracyjny akcji.
var variableService = ServiceFactory.getVariableService(), messageService = ServiceFactory.getMessageService(), Action = { t: PW.I18N.createT('com.suncode-actions-plugin') }; PW.FormActions.create('hiding-variables-action', { init: function(){ var me = this, variables = me.get("variables"); me.variables = []; jQuery.each(variables, function(index, variable){ me.variables.push(variable.getId()); }); }, enable: function(){ this.hideVariables(); this.showMessage(); }, disable: function(){ this.showVariables(); }, hideVariables: function() { this.setVariablesVisibility(false); }, showMessage: function() { var message = Action.t('action.hiding.variables.success', this.variables); messageService.showSuccess(message); }, showVariables: function() { this.setVariablesVisibility(true); }, setVariablesVisibility: function(visible) { if(visible) { variableService.show(this.variables); } else { variableService.hide(this.variables); } } }); |
W przykładzie akcji wykorzystany jest mechanizm tłumaczeń:
Action = { t: PW.I18N.createT('com.suncode-actions-plugin') }; |
Jeżeli akcja jest definiowana we wtyczce to należy dodatkowo zaznaczyć, że wtyczka ta udostępnia akcje. W tym celu należy w pliku suncode-plugin.xml dodać wpis:
<!-- Udostępnianie akcji --> <form-actions key="actions" /> |
Jest to wymagane, aby nie trzeba było przeszukiwać wszystkich uruchomionych wtyczek, tylko te, które faktycznie posiadają akcje.