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ą.
@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".
var variableService = ServiceFactory.getVariableService(); FormActions.create('hiding-variables-action', { //@override init: function() { this.variables = this.value("variables"); }, //@override enable: function(){ this.hideVariables(); }, //@override disable: function(){ this.showVariables(); }, hideVariables: function() { this.setVariablesVisibility(false); }, showVariables: function() { this.setVariablesVisibility(true); }, setVariablesVisibility: function(visible) { SuncodeFormService.suspendLayouts(); try { Ext4.Array.each(this.variables, function(variable){ if(visible) { variableService.show(variable.id); } else { variableService.hide(variable.id); } }, this); } finally { SuncodeFormService.resumeLayouts(); } } }); |
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óra będzie mogła być użyta jako warunek wykonania akcji. Ustawienie warunku odbywa się za pomocą narzędzia PlusWorkflowEditor.
@Functions public class BasicFunctions { @Function public Boolean le( Float a, Float b ) { return a.floatValue() <= b.floatValue(); } } |
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. W tym celu należy dodać wpisy do pliku suncode-plugin.xml:
<!-- 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> |