W tym miejscu zostanie opisany przykład utworzenia we wtyczce warunkowej akcji formularza, która będzie ukrywać/pokazywać zmienne w zależności od wartości innej zmiennej.
Opis tworzenia wtyczki systemowej znajduje się tutaj: http://192.168.1.52:8081/confluence/display/PWFL31/1.+Stworzenie+projektu+wtyczki, więc przyjmujemy, że wtyczkę mamy już stworzoną.
Utworzenie definicji akcji na serwerze
@Action @ActionScript( "resources/actions/test/hiding-variables-action.js" ) public class HidingVariablesAction { @DefineAction public void action( ActionDefinitionBuilder action ) { action .id( "hiding-variables-action" ) .name( "hiding.variables.name" ) .description( "hiding.variables.desc" ) .icon( SilkIconPack.APPLICATION_FORM ) .category( Categories.TEST ) .destination( ActionDestination.form() ) .parameter().id( "variables" ).description( "variables.to.show.hide" ).name( "variables.to.show.hide" ).type( Type.VARIABLE ).array().create(); } }
Powyżej zdefiniowaliśmy akcję hiding-variables-action z jednym parametrem tablicowym, którego elementy są typu VARIABLE, czyli obiekty zmiennych formularza. Implementacja akcji po stronie przeglądarki znajduje się w skrypcie "resources/actions/test/hiding-variables-action.js".
Utworzenie implementacji akcji po stronie przeglądarki
var variableService = ServiceFactory.getVariableService(); FormActions.create('hiding-variables-action', { init: function() { var me = this, variables = me.value("variables"); me.variables = []; jQuery.each(variables, function(index, variable){ me.variables.push(variable.getId()); }); }, enable: function(){ this.hideVariables(); }, disable: function(){ this.showVariables(); }, hideVariables: function() { this.setVariablesVisibility(false); }, showVariables: function() { this.setVariablesVisibility(true); }, setVariablesVisibility: function(visible) { if(visible) { variableService.show(this.variables); } else { variableService.hide(this.variables); } } });
W tym momencie mamy już gotową akcję. Akcja wykorzystując metody enable i disable oznacza, że jest przystosowana do wykonywania warunkowego.
Zdefiniujemy zatem jeszcze funkcję, którą wykorzystamy jako warunek wykonania akcji. Ustawienie warunku odbywa się za pomocą narzędzia PlusWorkflowEditor.
Definicja funkcji na serwerze
@Functions public class BasicFunctions { @Function public Boolean le( Float a, Float b ) { return a.floatValue() <= b.floatValue(); } }
Implementacja funkcji po stronie przeglądarki
Functions.register({ name: "le", fn: function(value1, value2) { return value1 <= value2; }, parameterTypes: ["float", "float"] });
Wykorzystanie tej funkcji jako warunek wykonania akcji oznaczać będzie, że akcji zostanie uruchomiona, gdy value1 będzie mniejsze lub równe od value2. W przeciwnym razie akcja zostanie zatrzymana.
Na koniec należy "powiedzieć" systemowi, że wtyczka udostępnia akcje i funkcje. Plik suncode-plugin.xml powinien wyglądać następująco:
<?xml version="1.0" encoding="UTF-8"?> <plugin key="${project.groupId}-${project.artifactId}" name="Form Actions Examples"> <!-- <i18n key="i18n-bundle" location="locale/messages" /> --> <!-- Udostępnianie akcji --> <form-actions key="actions" /> <!-- Udostępnianie funkcji--> <functions key="functions" /> <!-- Lokalizacja do skryptów z funkcjami--> <web-scripts key="formScripts" fragment="form" > <resource>/resources/functions/functions.js</resource> </web-scripts> </plugin>