Versions Compared

Key

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

...

Code Block
languagejava
linenumberstrue
@Actions
@ActionsScript( "actions/example.js" )
public class ExampleActions
{
	@Define
    public void loggeraction( ActionDefinitionBuilder action )
    {
		// budowanie definicji akcji
	}
}

Teraz wykorzystując obiekt 

Javadoc
propertyjavadoc.plusworkflow
classNamecom.suncode.pwfl.workflow.form.action.ActionDefinitionBuilder
 definiujemy akcję:

  • identyfikator: unikalny identyfikator akcji
  • nazwa: wyświetlana nazwa akcji (bądź klucz tłumaczenia)
  • opis: wyświetlany opis akcji (bądź klucz tłumaczenia)
  • kategoria: kategorie akcji
  • element docelowy: elementy docelowe akcji
  • ikona: ikona wyświetlana w edytorze procesów (Ikony)
  • parametry: lista prametrów akcji
Code Block
languagejava
linenumberstrue
@Define
public void loggeraction( ActionDefinitionBuilder action )
{
    action// TODO: inny       .id( "logger" )
        .name( "actions.logger.name" )
        .description( "actions.logger.desc" )
        .category( Categories.DEBUG )
        .destination( ActionDestination.form() )
        .icon( SilkIconPack.APPLICATION_OSX_TERMINAL )
        .parameter()
            .id( "msg" )
            .name( "actions.logger.param.msg.name" )
            .description( "actions.logger.param.msg.desc" )
            .type( Types.STRING )
            .create()
        .parameter()
            .id( "error" )
            .name( "actions.logger.param.level.name" )
            .description( "actions.logger.param.level.name" )
            .type( Types.BOOLEAN )
            .create();
przykład
}

Elementy docelowe (destination)

...

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

PW.FormActions.create('hiding-variables-action', {
    initTODO: function(){inny     	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')
};
przykład
});

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

Własności

  • id - unikalny w obrębie całego systemu identyfikator akcji,
  • name - nazwa akcji (obsługuje tłumaczenia),
  • description - opis akcji (obsługuje tłumaczenia),
  • icon - ikona akcji,
  • category - kategoria, do której należy akcja (może być wiele),
  • destination - element formularza, dla którego dostępna jest akcja (może być wiele)
  • parameters - parametry akcji.

Kategorie

Kategorie ułatwiają podział oraz wyszukiwanie akcji. Opisywane są one za pomocą interfejsu

Javadoc
propertyjavadoc.plusworkflow
classNamecom.suncode.pwfl.workflow.form.action.ActionCategory
. Dostępna jest podstawowa implementacja tego interfejsu 
Javadoc
propertyjavadoc.plusworkflow
classNamecom.suncode.pwfl.workflow.form.action.ActionCategories
, która udostępnia podstawowe kategorie. Tworząc akcję można skorzystać z tych kategorii. W przypadku braku jakiejś kategorii można ją dodać do tej implementacji bądź stworzyć własną.

Elementy formularza (destination)

Akcja może być zdefiniowana dla konkretnych elementów formularza. Definicji dokonujemy za pomocą klasy . Dostępne są następujące elementy:

  • FORM (ActionDestination.form()) - cały formularz zadania,
  • VARIABLE (ActionDestination.variable(parameter)) - zmienna formularza,
  • VARIABLESET (ActionDestination.variableset(parameter)) - tabelka dynamiczna,
  • BUTTON (ActionDestination.button(parameter)) - przycisk formularza.

Dla wszystkich elementów formularza poza FORM podczas definicji należy podać id parametru akcji (jeżeli akcja posiada parametry). Umożliwia to automatyczne podpięcie danego elementu do tego parametru podczas wyboru akcji w PlusWorkflowEditor.

Parametry akcji

Akcje mogą posiadać parametry.

Definicja parametru:

  • id - id parametru,
  • type - typ parametru,
  • name - nazwa parametru (obsługuje tłumaczenia),
  • description - opis parametru (obsługuje tłumaczenia),
  • array - określa, czy parametr jest tablicą.

Jeżeli przekazana zostanie do parametru wartość innego typu niż w definicji, to zostanie ona skonwertowana do tego typu.

Definiowanie akcji12

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.

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.

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

...

Rejestracja akcji we wtyczce

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

Code Block
languagexml
<!-- Udostępnianie akcji --> 
<form<workflow-actionscomponents key="actionscomponents" />

Jest to wymagane, aby nie trzeba było przeszukiwać wszystkich uruchomionych wtyczek, tylko te, które faktycznie posiadają akcje.