Walidator
Walidatory to komponenty użytkownika, umożliwiające sprawdzenie formularza podczas akceptacji zadania oraz zablokowanie akceptacji, gdy jakieś dane nie są prawidłowe. Przykładowe walidatory mogą np.
- weryfikować, czy kwota została odpowiednio ustawiona
- weryfikować, czy w zadaniu został dodany komentarz lub dokument.
Stworzone walidatory 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.
Definiowanie walidatora
Walidatory tworzone są w oparciu o ich definicję stworzoną przez użytkownika. Definicja taka musi zawierać następujące elementy:
- Adnotację @Validator (jeżeli akcja nie jest definiowana we wtyczce, musi ona pochodzić z pakietu
com.suncode
) - Publiczną metodę oznaczoną adnotacją @Define z jednym parametrem ValidatorDefinitionBuilder
- Publiczną metodę o nazwie validate, która odpowiada za przeprowadzenie walidacji formularza.
Przykładowa definicja przedstawiona jest poniżej:
@Validator public class PeselValidator { private final String PESEL_REGEX = "^\\d{11}$"; @Define public void definition( ValidatorDefinitionBuilder builder ) { builder .id( "pesel-validator" ) .name( "validator.pesel" ) .description( "validator.pesel.desc" ) .category( Categories.TEST ) .parameter() .id( "pesel_param" ) .name( "validator.pesel.parameter.name" ) .description( "validator.pesel.parameter.desc" ) .type( Types.VARIABLE) .create(); } //Metoda walidująca public void validate( @Param( value = "pesel_param" ) Variable pesel, ValidationErrors errors, Translator translator ) { boolean isPesel = Pattern.matches( PESEL_REGEX, (String) pesel.getValue() ); if ( isPesel == false ) { errors.add( translator.getMessage( "validator.pesel.invalid" ), pesel.getId() ); } } }
Implementacja funckcji walidującej
Zdefiniowana na serwerze akcja formularza musi zostać zarejestrowana i zaimplementowana po stronie przeglądarki. Rejestrację umożliwia klasa PW.form.action.Actions za pomocą metody create. Pierwszym parametrem metody jest id akcji (id musi odpowiadać tej akcji, która została zdefiniowana na serwerze), drugim parametrem jest obiekt implementacji akcji:
PW.FormActions.create('hide-variables', { init: function(){ this.variables = this.get("variables"); this.variablesNames = []; }, enable: function(){ this.hideVariables(); }, disable: function(){ this.showVariables(); }, hideVariables: function() { this.setVariablesVisibility(false); }, showVariables: function() { this.setVariablesVisibility(true); }, setVariablesVisibility: function(visible) { PW.each(this.variables, function(variable){ if(visible){ variable.show(); } else{ variable.hide(); } }, this); } });
Rejestracja walidatora we wtyczce
Jeżeli walidator jest definiowany we wtyczce to należy dodatkowo zaznaczyć, że wtyczka ta udostępnia komponenty. W tym celu należy w pliku suncode-plugin.xml dodać wpis:
<!-- Udostępnianie walidatorów --> <workflow-components key="components" />