Versions Compared

Key

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

...

Akcje formularza to komponenty użytkownika, umożliwiające wykonywanie dowolnych akcji na formularzu zadania w reakcji na działania użytkownika, zmiany danych czy też inne zdarzenia formularza. Przykładowe akcje mogą np.

...

Stworzone akcje 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 akcji

Akcje tworzone są w oparciu o ich definicję stworzoną przez użytkownika. Definicja taka musi zawierać następujące elementy:

  1. Adnotację 
    Javadoc
    displayValue@Actions
    propertyjavadoc.plusworkflow
    classNamecom.suncode.pwfl.workflow.form.action.annotation.Actions
     (jeżeli akcja nie jest definiowana we wtyczce, musi ona pochodzić z pakietu com.suncode)
  2. Adnotację 
    Javadoc
    displayValue@ActionsScript
    propertyjavadoc.plusworkflow
    classNamecom.suncode.pwfl.workflow.form.action.annotation.ActionsScript
     ze ścieżką do skryptu (z classpath) zawierającego implementację w języku JavaScript
  3. 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.action.ActionDefinitionBuilder
    (w jednej klasie @Actions może być zdefiniowanych wiele różnych akcji)

...

Akcja musi być zdefiniowana po stronie serwera. W tym celu należy utworzyć klasę i oznaczyć ją adnotacją 

Javadoc
displayValue@Action
propertyjavadoc.plusworkflow
classNamecom.suncode.pwfl.workflow.form.action.annotation.Action
. Adnotacja ta sprawia, że system będzie szukał definicji akcji w tej klasie. Dodatkowo należy dodać adnotację 
Javadoc
displayValue@ActionScript
propertyjavadoc.plusworkflow
classNamecom.suncode.pwfl.workflow.form.action.annotation.ActionScript
 i jako jej wartość podać relatywną ścieżkę do skryptu z implementacją akcji. W tak przygotowanej klasie należy teraz dodać definicję akcji. W tym celu trzeba dodać metodę i oznaczyć ją adnotacją 
Javadoc
displayValue@DefineAction
propertyjavadoc.plusworkflow
classNamecom.suncode.pwfl.workflow.form.action.annotation.DefineAction
. Metoda musi przyjmować jeden parametr typu 
Javadoc
propertyjavadoc.plusworkflow
classNamecom.suncode.pwfl.workflow.form.action.ActionDefinitionBuilder
. W implementacji metody należy za pomocą przekazanego builder'a zdefiniować wszystkie własności akcji.


Elementy docelowe (destination)

Elementy docelowe wskazywane są na etapie tworzenia definicji akcji w metodzie destination(). Określają one, do jakich elementów formularza może być dodana akcja:

ElementOpisPrzykłady akcjiWybór w PWE
ActionDestination.form()

Formularz

Akcja dodana do formularza inicjowana jest metodą formInit.

Akcje w których nie można wskazać głównego elementu np.

  • ukrywanie wielu zmiennych jednocześnie
ActionDestination.variable()

Zmienna

Akcja dodana do zmiennej formularza inicjowana jest metodą variableInit w parametrze otrzymując obiekt tej zmiennej (

Jsdoc
propertyjsdoc.plusworkflow
classNamePW.form.variable.Variable
).

Akcje w których można jednoznacznie wskazać zmienną, której akcje dotyczy (w największym stopniu) np.

  • ukrywanie zmiennej
  • walidacja zmiennej na żywo (np. pokazanie komunikatu bez akceptacji)
variableset
ActionDestination.variableSet()

Tabelka dynamiczna

Akcja dodana do zmiennej formularza inicjowana jest metodą variableSetInit w parametrze otrzymując obiekt tabelki dynamicznej (

Jsdoc
propertyjsdoc.plusworkflow
classNamePW.form.field.VariableSet
).

Akcje które dotyczą tabelki dynamicznej i potrzebują jej identyfikator np.

  • nadanie tytułu tabelce na podstawie obliczeń
  • import danych do tabelki (akcja dodaje przycisk do tabelki)
ActionDestination.button()

Przycisk

Akcja dodana do przycisku formularza inicjowana jest metodą buttonInit w parametrze otrzymując obiekt przycisku (

Jsdoc
propertyjsdoc.plusworkflow
classNamePW.form.button.Button
).

Akcje których źródłem jest przycisk np.

  • dodawanie komentarza przed akceptacją
  • wyświetlanie komunikatów po kliknięciu przycisku

 

Image Removed

Przypisanie elementu docelowego do parametru (bindTo)

Wybrany element docelowy akcji może zostać przekazany do parametru akcji poprzez podanie w parametrze bindTo identyfikatora parametru docelowego. Np. 

Code Block
languagejava
ActionDestination.variable( "text" );  // 'text' to identyfikator parametru akcji

Z tak skonfigurowaną akcją, jeżeli dodamy ją do dowolnej zmiennej, zmienna to zostanie automatycznie ustawiona jako wartość parametru. W zależności od elementu docelowego w parametr wpisane zostaną:

Element docelowyPrzypisana wartość
Zmienna
Zmienna
Tabelka dynamiczna
Identyfikator tabelki dynamicznej
Przycisk
Identyfikator przycisku (nazwa akcji)

Implementacja akcji

 

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 konfiguracyjny akcji.

 

Code Block
languagejs
var variableService = ServiceFactory.getVariableService(),
	messageService = ServiceFactory.getMessageService(),
	Action = {
		t: PW.I18N.createT('com.suncode-actions-plugin')
	};

PW.FormActions.create('hiding-variables-action', {
    init: function(){
    	var me = this,
    		variables = me.get("variables");
		
    	me.variables = [];
		jQuery.each(variables, function(index, variable){
			me.variables.push(variable.getId());
		});
    },
    
    enable: function(){
    	this.hideVariables();
    	this.showMessage();
    },
    
    disable: function(){
    	this.showVariables();
    },
    
    hideVariables: function() {
    	this.setVariablesVisibility(false);
    },
    
    showMessage: function() {
    	var message = Action.t('action.hiding.variables.success', this.variables);
    	messageService.showSuccess(message);
    },
    
    showVariables: function() {
    	this.setVariablesVisibility(true);
    },
    
    setVariablesVisibility: function(visible) {
		if(visible) {
			variableService.show(this.variables);
		}
		else {
			variableService.hide(this.variables);
		}
    }
    
});

 

W przykładzie akcji wykorzystany jest mechanizm tłumaczeń:

 

Code Block
Action = {
	t: PW.I18N.createT('com.suncode-actions-plugin')
};


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.

...

Code Block
languagejava
titlePrzykład definicji akcji
@Action
@ActionScript( "resources/actions/test/hiding-variables-action.js" )
public class HidingVariablesAction
{
    @DefineAction
    public void action( ActionDefinitionBuilder action )
    {
        action
            .id( "hiding-variables-action" )
            .name( "action.hiding.variables.name" )
            .description( "action.hiding.variables.desc" )
            .icon( SilkIconPack.APPLICATION_FORM )
            .category( Categories.TEST )
            .destination( ActionDestination.form() )
            .parameter().id( "variables" ).name( "action.hiding.variables.parameter.name" )
            		.description( "action.hiding.variables.parameter.desc" ).type( Type.VARIABLE )
            		.array().create();
    }
}

Implementacja akcji

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 konfiguracyjny akcji.

...