Context variables allow the creation of components built in a functional way. The creator of a component can define many arbitrary context variables, which can then be used by the user in functions defined as parameters of that component. | Info |
|---|
Context variables can only be used as arguments of a function that is a component parameter. |
An example of such a component could be a validator, which allows you to validate data in a dynamic table. A context variable $currentRow is then provided, storing the index of the current row in the table. The only parameter would be a function that would return a logical value saying whether the row is valid or not Image Added
The action configured this way will mean that the not(empty(item($currentRow, $Nazwa Dostawcy))) function will be called for each row with a changing $currentRow parameter: not(empty(item(0, $Nazwa Dostawcy)))not(empty(item(1, $Nazwa Dostawcy)))not(empty(item(2, $Nazwa Dostawcy)))
This allows us to create more versatile components. Also, we don't need to create multiple function overloads, for example, for array parameters - it's enough to use a component that allows iteration over rows of such arrays. Defining context variablesDefining context variables ( | Javadoc |
|---|
| property | javadoc.plusworkflow |
|---|
| className | com.suncode.pwfl.workflow.component.ContextVariable |
|---|
| ) is done at the stage of creating the component definition. Below is an example of adding one context variable for a validator:| 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 |
|---|
Context variables will be available from the process editor for selection only as function parameters. Therefore, always when using this functionality, you should also define a parameter of type FUNCTION. |
Determine the value of context variablesThe value of context variables is set using an object | Javadoc |
|---|
| property | javadoc.plusworkflow |
|---|
| className | com.suncode.pwfl.workflow.component.ContextVariables |
|---|
| that can be injected as a parameter of a component method. Just add a type | Javadoc |
|---|
| property | javadoc.plusworkflow |
|---|
| className | com.suncode.pwfl.workflow.component.ContextVariables |
|---|
|
parameter to the component method (e.g. validate for validator) and use the set(id, value) method: | Code Block |
|---|
| public void validate( @Param FunctionCall fn, ContextVariables contextVariables, ValidationErrors errors )
{
int length = ...; // liczba wierszy
for ( int i = 0; i < length; i++ )
{
contextVariables.set( "currentRow", i );
if ( !fn.<Boolean> call() )
{
errors.add( "Validation errror" );
}
}
} |
Context variables in form actionsDue to the different environment of running form actions, the way of setting these variables is a little different. We set the value of context variables using the setContextVariable | Jsdoc |
|---|
| property | jsdoc.plusworkflow |
|---|
| className | PW.form.action.Action |
|---|
| class:| Code Block |
|---|
| PW.FormActions.create('context-var-example', {
defaultActions: {
variableSet: function(vs, added, updated, removed) {
this.invoke(vs);
}
},
invoke: function(vs) {
var fn = this.get('fn');
var target = this.get('target');
PW.each(vs.getRecords(), function(record, index) {
this.setContextVariable("currentRow", index);
var newValue = fn.call();
target.setItemValue(newValue, index);
}, this);
}
}); |
|