Rule Engine Variable (Dictionary)

This node takes a list of user-defined rules and tries to match them to the defined flow variables. If a rule matches, its outcome value will become the value of the flow variable. The first matching rule will determine the outcome.

Each rule is represented by a row. To add comments, start a line in a (condition) cell with // (comments can not be placed in the same line as a rule). Anything after // will not be interpreted as a rule. Rules consist of a condition part (antecedent), which must evaluate to true or false , and an outcome (consequent, after the => symbol) which is put into the new flow variable if the rule matches.

The outcome of a rule can either be a constant string, a constant number or boolean constant, or a reference to a flow variable value. The type of the outcome column is the common super type of all possible outcomes (including the rules that can never match). If no rule matches, the outcome is "", 0, or 0.0 depending on the output type.

Numbers are given in the usual decimal representation. Note that strings must not contain (double-)quotes (for those cases use the following syntax: /Oscar Wilde's wisdom: "Experience is simply the name we give our mistakes."/). The flow variables are represented by $${ TypeCharacterAndFlowVarName }$$ . The TypeCharacter should be 'D' for double (real) values, 'I' for integer values and 'S' for strings.

The logical expressions can be grouped with parentheses. The precedence rules for them are the following: NOT binds most, AND, XOR and finally OR the least. Comparison operators always take precedence over logical connectives. All operators (and their names) are case-sensitive.

Some example rules (each should be in one row):

// This is a comment
$${DFlowVar0}$$ > 0 => "Positive"
FlowVar0 has value above zero, which case the result flow variable has the value Positive.
$${SFlowVar0}$$ = "Active" AND 
    $${IFlowVar1}$$ <= 5 => "Outlier"
When FlowVar0 is "Active" and FlowVar1 is greater or equal to 5, then the result is Outlier.
$${SFlowVar0}$$ LIKE "Market Street*" AND 
    ($${SFlowVar1}$$ IN ("married", "divorced") 
        OR $${IFlowVar2}$$ > 40) => "Strange"
The logical connectives help express complex conditions.
$${SFlowVar10}$$ MATCHES $${SFlowVar0}$$ OR $${DFlowVar2}$$ < $${IFlowVar1}$$ =>
    $${SFlowVar0}$$
You can compare different flow variables.

The NaNs equal to other NaN values (other values are neither less, nor greater or equal to NaN values).

Options

Rules column
Name of the column in the second input table containing the rules or just the conditions if an outcome column is also selected. In case the rules are available during configuration, the type of the outcome column is shown at the right end of this configuration row.
=>
In case your rules are in two separate columns (condition and outcome), this should be the column containing the outcome values. (Ignored for the comment -starting with //- conditions. In case it contains missing value for non-comment conditions, the output type will be String!) For String columns the outcome should not be quoted (by " or by /)
Treat values starting with $ as references
When checked, the values in string -outcome- column starting with $ are not treated as string constants with that value, but are tried to be parsed as references to flow variables, columns or table properties.
Result variable
Name of the new flow variable, which contains the outcome of the rules.
Errors
The errors found in the input table parsing the rules column
Warnings
The warnings found in the input table parsing the rules column

Input Ports

Icon
Input variables (optional)
Icon
Table containing the rules

Output Ports

Icon
Output variable

Views

This node has no views

Workflows

Links

Developers

You want to see the source code for this node? Click the following button and we’ll use our super-powers to find it for you.