Polish |
---|
Excerpt |
---|
Tworzenie wtyczki udostępniającej warunkowy walidator formularza. |
Projekt |
stworzonej wtyczki jest stworzonej wtyczki jest dostępny w publicznym |
repozytorium hideactionvalidator-1.0.0.jar | height | 150 |
---|
|
|
...
...
Info |
---|
Zakładamy, że projekt wtyczki mamy już utworzony. Opis tworzenia wtyczki systemowej podany jest wyżej. |
Kurs ten opisuje proces tworzenia wtyczki dla systemu PlusWorkflow w wersji co najmniej 3.1. Wtyczka ta będzie udostępniała walidator formularza, który: - sprawdzi czy podana w parametrze zmienna spełnia warunki PESELu, gdy warunek wykonania walidatora jest spełniony
- wyświetli wiadomość w przypadku, gdy zmienna nie jest PESELem.
|
Dodatkowo, stworzona zostanie funkcja empty() którą można wykorzystać jako warunek wywołania walidatora.
Definicja walidatora na serwerze
Pierwszym krokiem jest stworzenie definicji walidatora oraz jego metody walidującej. W ten sposób informujemy edytor procesów, że taki walidator jest dostępny i może zostać wykorzystany przy budowie formularza zadania. W tym celu należy stworzyć klasę z odpowiednim zestawem adnotacji oraz metodę walidującą: Code Block |
---|
| @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() );
}
}
} |
Powyżej zdefiniowaliśmy walidator pesel-validator z jednym parametrem tekstowym, czyli w tym miejscu będziemy chcieli otrzymać wartość zmiennej do walidacji. Jako nazwy i opisy walidatora i jego parametru podaliśmy klucze, gdyż będziemy chcieli, aby te właściwości były tłumaczone w zależności od języka użytkownika. Tłumaczenia dodajmy w plikach /resources/locale/messages.properties (domyślne - wersja polska) |
oraz oraz /resources/locale/messages_en.properties (wersja angielska). Code Block |
---|
language | text |
---|
title | messages.properties |
---|
|
|
...
validator.pesel=Walidacja peselu
validator.pesel.desc=Walidator weryfikuje czy podany parametr jest peselem
validator.pesel.parameter.name=Pesel
validator.pesel.parameter.desc=Wartość do walidacji
validator.pesel.invalid=Należy podać prawidłowy PESEL |
Code Block |
---|
language | text |
---|
title | messages_en.properties |
---|
|
|
...
validator.pesel=Validate pesel
validator.pesel.desc=Validator to validate if parameter is pesel
validator.pesel.parameter.name=Pesel
validator.pesel.parameter.desc=Value to validate
validator.pesel.invalid=Fill with valid PESEL |
W definicji akcji podaliśmy również kategorię Categories.TEST. Niezbędne jest stworzenie takiej kategorii lub wykorzystanie kategorii, która już istnieje. Implementacja kategorii wygląda następująco: Code Block |
---|
| public enum Categories
implements |
|
...
Category
{
TEST( "Test" );
private String name;
private Categories( String name )
{
this.name = name;
}
@Override
public String getName()
{
return name;
}
} |
|
Implementacja akcji po stronie przeglądarki
Akcje formularza działają na poziomie formularza zadania. Wykorzystując dostępne funkcje musimy dostarczyć implementację takiej akcji. Nasza implementacja jest następująca:
Tip |
---|
Przydatna będzie dokumentacja API: Jsdoc |
---|
displayValue | PW.FormActions |
---|
property | jsdoc.plusworkflow |
---|
className | PW.form.action.Actions |
---|
|
|
...
...
Oprócz definicji walidatora zaimplementowaliśmy również metodę walidującą. Note |
---|
Metoda walidującą musi posiadać nazwę validate |
W metodzie walidującej zdefiniowaliśmy parametry wejściowe. @Param( value = "pesel_param" ) String pesel - wartość dla zdefiniowanego parametru walidatora o id pesel_param ValidationErrors errors - obiekt, do którego można zapisać błędy walidatoraTranslator translator - obiekt translatora wtyczki
Podczas wywoływania metody do wszystkich parametrów zostaną wstrzyknięte zdefiniowane parametry i obiekty pomocnicze. Tip |
---|
Wszystkie możliwe parametry które możemy wykorzystać w metodzie walidatora opisane są na stronie: Tworzenie walidatorów |
Metoda walidująca weryfikuje czy parametr pesel_param jest numerem PESEL. Jeżeli nie jest, to dodaje tłumaczoną informacje o tym do obiektu ValidationErrors oraz oznacza, że chodzi o zmienną podaną w parametrze. Walidator został już zdefiniowany. Należy jeszcze "powiedzieć" systemowi, że wtyczka udostępnia walidator i funkcję oraz korzysta z tłumaczeń. Plik suncode-plugin.xml powinien wyglądać następująco: Code Block |
---|
| <?xml version="1.0" encoding="UTF-8"?>
<plugin key="${project.groupId}-${project.artifactId}" name="Pesel Validator Tutorial">
<!-- Translations -->
<i18n key="i18n" />
<workflow-components key="components" />
</plugin> |
Stworzony walidator będzie mógł być wykorzystany w edytorze procesów po uruchomieniu wtyczki. Aby sprawdzić jego działanie należy stworzyć prosty proces, a następnie dodać nasz walidator do przycisku akceptacji. Aby to zrobić należy wejść w formularz zadania, następnie wejść w edycję przycisku akceptacji i rozwinąć zakładkę Walidatory. Następnie przy pomocy przycisku należy dodać walidator. Image Added
Po dodaniu walidatora pojawi się okno z jego definicją. Należy uzupełnić parametr walidatora oraz warunek wywołania. Image Added
W tym momencie dodaliśmy walidator do przycisku akceptującego zadanie, który będzie weryfikował czy zmienna Pesel jest numerem PESEL. Walidacja będzie wywoływana tylko jeżeli zmienna Imię i Nazwisko nie będzie pusta. Poniżej został przedstawiony wynik walidacji błędnego numeru PESEL. Image Added
|
English |
---|
Excerpt |
---|
Creating a plugin that provides a conditional form validator. |
The project of the created plugin is available in the public repository http://192.168.1.61/developers/tutorials. A compiled version can be downloaded here: View file |
---|
name | pesel-validator-1.0.0.jar |
---|
height | 150 |
---|
|
Info |
---|
We assume that the plugin project has already been created. The description of creating the system’s plugin is given above. |
This course describes the process of creating a plug-in for the PlusWorkflow system at least 3.1 version. This plugin will provide a form validator which: - check whether the variable given in the parameter meets the PESEL conditions when the execution validator condition is met
- display a message if the variable is not PESEL
The first step is to create a validator definition and its validating method. In this way, you inform the process editor that such validator is available and can be used to build a task form. To do this, create a class with the appropriate set of annotations and a validating method: Code Block |
---|
| @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" )
|
|
...
...
...
...
...
...
...
public void validate( @Param( value = "pesel_param" ) Variable pesel, ValidationErrors errors,
|
|
...
...
...
...
...
...
...
...
isPesel = Pattern.matches( PESEL_REGEX, (String) pesel.getValue() );
if ( isPesel == false )
|
|
...
...
W tym momencie mamy już gotową akcję. Akcja wykorzystując metody enable i disable oznacza, że jest przystosowana do wykonywania warunkowego. W momencie ukrycia zmiennych pojawia się stosowna wiadomość o tym. Wiadomość jest tłumaczona na podstawie podanego klucza.
Tłumaczenia pobierane są z wykorzystaniem TranslationAPI. Służy do tego obiekt
Jsdoc |
---|
property | jsdoc.plusworkflow |
---|
className | PW.I18N |
---|
|
. Nazwa translatora w przypadku wtyczek to ich klucz (plugin key). Code Block |
---|
|
Action = {
t: PW.I18N.createT('com.suncode.tutorial-hide-action')
}; |
Pliki z tłumaczeniami znajdują się w: /resources/messages_browser.properties i /resources/messages_browser_en.properties
errors.add( translator.getMessage( "validator.pesel.invalid" ), pesel.getId() );
}
}
} |
Above we have defined the pesel-validator with one text parameter, that here we will want to obtain the variable value for validation. As the names and descriptions of the validator and its parameter, we have provided the keys, as we will want these properties to be translated depending on the language of the user. We add translations in files /resources/locale/messages.properties (default - Polish version) and /resources/locale/messages_en.properties (English version). Code Block |
---|
language | text |
---|
title | messages |
---|
|
|
...
...
validator.pesel=Walidacja peselu
validator.pesel.desc=Walidator weryfikuje czy podany parametr jest peselem
validator.pesel.parameter.name=Pesel
validator.pesel.parameter.desc=Wartość do walidacji
validator.pesel.invalid=Należy podać prawidłowy PESEL |
Code Block |
---|
language | text |
---|
title | messages_ |
---|
|
|
...
Przygotowanie funkcji warunkowej
Zdefiniujemy zatem jeszcze funkcję, którą wykorzystamy jako warunek wykonania akcji. Ustawienie warunku odbywa się za pomocą narzędzia PlusWorkflowEditor.
Funkcje definiowane są w klasach oznaczonych adnotacją @Functions
. Nasza definicja wygląda następująco
...
action.hiding.variables.success=Variables [{0}] were hidden.
validator.pesel=Validate pesel
validator.pesel.desc=Validator to validate if parameter is pesel
validator.pesel.parameter.name=Pesel
validator.pesel.parameter.desc=Value to validate
validator.pesel.invalid=Fill with valid PESEL |
In action definition we have also provided the Categories.TEST. It is necessary to create such category or use category that already exists. The category implementation looks as follows: |
...
...
...
Categories
implements Category
{
|
|
...
...
...
...
...
...
...
...
private Categories( String name )
{
|
|
...
...
...
Każda zarejestrowana funkcja powinna dostarczać implementację tej funkcji w języku JavaScript na potrzeby przeglądarki. Dla funkcji wykorzystywanych w akcjach formularza jest to wymagane. Implementacja jest następująca:
...
...
...
...
...
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.
Konfiguracja wtyczki
Akcja została już zdefiniowana. Należy jeszcze "powiedzieć" systemowi, że wtyczka udostępnia akcje i funkcje oraz korzysta z tłumaczeń. Plik suncode-plugin.xml powinien wyglądać następująco
@Override
public String getName()
{
return name;
}
} |
Despite of validator definition we have also implemented validation method. Note |
---|
Validation method must have name validate |
In validation method, we defined the input parameters. @Param( value = "pesel_param" ) String pesel - value for the validator defined parameter with id pesel_param ValidationErrors errors - object to which validator errors can be saved Translator translator - plug-in translator object
When calling the method, to all parameters will be injected defined parameters and auxiliary objects. Tip |
---|
All possible parameters that we can use in the validator method are described on the page: Validators creating |
The validation method verifies whether the pesel_param parameter is a PESEL number. If it is not, then it adds the translated information about it to the ValidationErrors object and means that it is about the variable given in the parameter. The validator has already been defined. It is necessary to "tell" the system that the plug-in provides the validator and function and uses the translations. The suncode-plugin.xml file should look like this: Code Block |
---|
| <?xml version="1.0" encoding="UTF-8"?>
<plugin key="${project.groupId}-${project.artifactId}" name=" |
|
...
...
Validator Tutorial">
<!-- |
|
...
...
...
...
...
...
...
...
Info |
---|
Do wstrzyknięcia skryptu zawierającego implementacje funkcji wykorzystano moduł <webscripts> opisany w rozdziale Wstrzykiwanie skryptów |
Wykorzystanie akcji w zadaniu
Stworzona akcja będzie mogła być wykorzystana w edytorze procesów po uruchomieniu wtyczki. Aby sprawdzić jej zadanie należy stworzyć prosty proces, a następnie dodać naszą akcję. Aby to zrobić należy wejść w formularz zadania następnie po lewej stronie rozwinąć Akcje i przeciągnąć naszą akcję na formularz.
Image Removed
Po upuszczeniu akcji na formularzu pojawi się okno z definicją akcji. Należy uzupełnić parametr akcji oraz warunek wywołania.
Image Removed
W tym momencie dodaliśmy akcję do zadania, która będzie ukrywać zmienne Zmiennoprzecinkowa i Data i Czas, jeżeli wartość zmiennej Całkowita będzie mniejsza bądź równa 0. W przeciwnym wypadku zmienne zostaną pokazane.
Poniżej wartość zmiennej Calkowita wynosi -2, więc zmienne zostały ukryte.
Image Removed
Natomiast gdy zmienna Całkowita ma wartość dodatnią to zmienne zostaną z powrotem wyświetlone.
Image Removed
StThe created validator can be used in the process editor after running the plugin. To check its operation, create a simple process and then add our validator to the acceptance button. To do this, enter the task form, then enter the acceptance edition button and expand the Validators tab. Next, use the button to add the validator. Image Added
After adding the validator, a window with its definition will appear. The validator parameter and the calling condition must be filled. Image Added
At this point, we added the validator to the button accepting the task, which will verify if the variable Pesel is the PESEL number. Validation will be called only if the variable Name and Last name will not be empty. The validation result of the incorrect number PESEL is presented below: Image Added
|