Zmienne kontekstowe umożliwiają tworzenie komponentów zbudowanych w sposób funkcyjny. Twórca komponentu może zdefiniować wiele dowolnych zmiennych kontekstowych, które będą mogły być następnie wykorzystane przez użytkownika w funkcjach zdefiniowanych jako parametry tego komponentu.
Przykładem takiego komponentu może być walidator, który pozwala na walidację danych w tabelce dynamicznej. Udostępniana jest wtedy zmienna kontekstowa $currentRow
przechowująca indeks aktualnego wiersza w tabelce. Jedynym parametrem będzie funkcja, która zwróci wartość logiczną mówiącą czy dany wiersz jest poprawny czy nie.
Image Added
Tak skonfigurowana akcja będzie oznaczała, że funkcja not(empty(item($currentRow, $Nazwa Dostawcy)))
zostanie wywołana dla każdego wiersza ze zmieniającym się parametrem $currentRow
:
not(empty(item(0, $Nazwa Dostawcy)))
not(empty(item(1, $Nazwa Dostawcy)))
not(empty(item(2, $Nazwa Dostawcy)))
Pozwala to na tworzenie bardziej uniwersalnych komponentów. Nie musimy też tworzyć wielu przeciążeń funkcji np. dla parametrów tablicowych - wystarczy wykorzystać komponent który umożliwi iterację po wierszach takich tablic.
Definiowanie zmiennych kontekstowych
Definiowanie zmiennych kontekstowych (
Javadoc |
---|
property | javadoc.plusworkflow |
---|
className | com.suncode.pwfl.workflow.component.ContextVariable<T> |
---|
|
) odbywa się na etapie tworzenia definicji komponentu. Poniżej przykład dodania jednej zmiennej kontekstowej dla walidatora: Code Block |
---|
|
@Define
public void definition( ValidatorDefinitionBuilder builder )
{
builder
.id( "contextVariableExample" )
.name( "Context Variable Example" )
.category( Categories.TEST )
.contextVariable()
.id( "currentRow" )
.name( "currentRow" )
.description( "Current table row index" )
.type( Types.INTEGER )
.create()
.parameter()
.id( "fn" )
.name( "Function" )
.type( Types.FUNCTION )
.create();
} |
Info |
---|
Zmienne kontekstowe będą dostępne z poziomu edytora procesów do wybory tylko jako parametry funkcji. Dlatego zawsze przy wykorzystaniu tej funkcjonalności należy też zdefiniować parametr typu FUNCTION . |
Ustalenie wartości zmiennych kontekstowych
Wartość zmiennych kontekstowych ustawia się przy użyciu obiektu
Javadoc |
---|
property | javadoc.plusworkflow |
---|
className | com.suncode.pwfl.workflow.component.ContextVariables |
---|
|
który może być wstrzyknięty jako parametr metody komponentu. Wystarczy dodać parametr typu Javadoc |
---|
property | javadoc.plusworkflow |
---|
className | com.suncode.pwfl.workflow.component.ContextVariables |
---|
|
do metody komponentu (np. validate
dla walidatora) i wykorzystać metodę set(id, value)
: Code Block |
---|
|
public void validate( @Param FunctionCall fn, ContextVariables contextVariables, ValidationErrors errors )
{
int length = ...; // liczba wierszy pobrana z innego
for ( int i = 0; i < length; i++ )
{
contextVariables.set( "currentRow", i );
if ( !fn.<Boolean> call() )
{
errors.add( "Validation errror" );
}
}
} |