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.
| ![]() |

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.