Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Adnotację 
    Javadoc
    displayValue@Validator
    propertyjavadoc.plusworkflow
    classNamecom.suncode.pwfl.workflow.form.validator.annotation.Validator
     (jeżeli akcja nie jest definiowana we wtyczce, musi ona pochodzić z pakietu com.suncode)
  2. Publiczną metodę oznaczoną adnotacją 
    Javadoc
    displayValue@Define
    propertyjavadoc.plusworkflow
    classNamecom.suncode.pwfl.component.annotation.Define
     z jednym parametrem
    Javadoc
    propertyjavadoc.plusworkflow
    classNamecom.suncode.pwfl.workflow.form.validator.ValidatorDefinitionBuilder
  3. Publiczną metodę o nazwie validate, która odpowiada za przeprowadzenie walidacji formularza.

Przykładowa definicja przedstawiona jest poniżej:

Code Block
languagejava
linenumberstrue
@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 

Jsdoc
propertyjsdoc.plusworkflow
classNamePW.form.action.Actions
 za pomocą metody 
Jsdoc
displayValuecreate
propertyjsdoc.plusworkflow
classNamePW.form.action.Actions.html#method_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:

Code Block
languagejs
linenumberstrue
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);
    }
});

Akcje domyślne

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.

Info

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 docelowyNazwa funkcjiDomyślne zdarzenieOpis
ActionDestination.button()
button
click (
Jsdoc
displayValuedoc
propertyjsdoc.plusworkflow
classNamePW.form.button.Button
)

Funkcja wywoływana jest po kliknięciu na przycisk, do którego dodana jest akcja.

Tip

Można przerwać akceptację formularza poprzez zwrócenie false:

Code Block
languagejs
defaultActions: {
	button: function(button){
		// do some job
		return false;
	}
}
ActionDestination.variable()
variable
change (
Jsdoc
displayValuedoc
propertyjsdoc.plusworkflow
classNamePW.form.variable.Variable
)
Funkcja wywoływana jest po zmianie wartości zmiennej, do której dodana jest akcja.
ActionDestination.variableSet()
variableSet
change (
Jsdoc
displayValuedoc
propertyjsdoc.plusworkflow
classNamePW.form.field.VariableSet
)
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 od elementu docelowego wiadomość pokaże się przy naciśnięciu przycisku, zmianie wartości zmiennej lub zmianie danych w tabelce.

Code Block
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'));
	}
});

Rejestracja akcji we wtyczce

...

Rejestracja walidatora we wtyczce

Jeżeli walidator jest definiowany we wtyczce to należy dodatkowo zaznaczyć, że wtyczka ta udostępnia akcjekomponenty. W tym celu należy w pliku suncode-plugin.xml dodać wpis:

Code Block
languagexml
<!-- Udostępnianie akcjiwalidatorów --> 
<workflow-components key="components" />