Import Rules
Import rules of the rules engine.
Json
Example
json
{
"name": "rules-engine-import-rules",
"taskReferenceName": "c",
"description": "The business description of the task",
"type": "SUB_WORKFLOW",
"optional": false,
"inputParameters": {
"request": "${previousTask.output.file}"
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Definition
Property | Description |
---|---|
name | The name of the task, must be: rules-engine-import-rules |
taskReferenceName | The unique name of the task in your job. |
description | The functional description of this task in your job. |
type | Set SUB_WORKFLOW for this task. |
optional | true: the job continues if there is an danger on this task. false: the job fails. |
inputParameters | Input parameters of the task. See below |
Inputs
Property | Description |
---|---|
request | The XML file that defines rules. |
Input request
Main structure
xml
<Rules-Engine table="PRODUCTS_RETAILERX" account="89h6797-2990a-345s78-90gh6-8klm89jlm78">
<Source-Tables />
<Rules />
</Rules-Engine>
1
2
3
4
2
3
4
XPath | Description | Occurs |
---|---|---|
Rules-Engine | The root element. | 1 |
@table | Target table key | 1 |
@account | Target account key | 1 |
Source-Tables | List of source tables | 1 |
Rules | All rules for each attributes | 1 |
Source tables
Source-Tables
make it possible to reconcile items from several tables, by linking the identifiers of these tables to each other. Example: the EAN identifier of my product table is equivalent to the EAN 13 identifier of the table that was shared with me by my partner.
xml
<Rules-Engine table="PRODUCTS_RETAILERX" account="89h6797-2990a-345s78-90gh6-8klm89jlm78">
<Source-Tables>
<Table key="PRODUCTS_BRANDX" source-identifier="EAN_13" target-identifier="EAN" />
</Source-Tables>
<Rules />
</Rules-Engine>
1
2
3
4
5
6
2
3
4
5
6
XPath | Description | Occurs |
---|---|---|
Table | For each source table | 1..5 |
@key | Source table key | 1 |
@source-identifier | Source identifier key | 1 |
@target-identifier | Target identifier key | 1 |
Rules
Info
The examples below correspond to the examples presented in the Rules Engine documentation. Make sure you read this documentation carefully to understand these examples.
Rules can be created for each target attribute Identifier
| Classification
| Field
of the target table. For example for a target Field
the main structure will be:
xml
<Rules-Engine table="PRODUCTS_RETAILERX" account="89h6797-2990a-345s78-90gh6-8klm89jlm78">
<Source-Tables>
<Table key="PRODUCTS_BRANDX" source-identifier="EAN_13" target-identifier="EAN" />
</Source-Tables>
<Rules>
<Field key="LABEL" source-table="PRODUCTS_BRANDX">
<Rule priority="1" name="">
<Conditions />
<Action />
</Rule>
</Field>
</Rules>
</Rules-Engine>
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
XPath | Description | Occurs |
---|---|---|
Rules/Identifier | For each target Identifier | 0..5 |
Rules/Classification | For each target Classification | 0..5 |
Rules/Field | For each target Field | 0..* |
Regardless the attribute type you have then these properties:
XPath | Description | Occurs |
---|---|---|
@key | Key of the target Identifier | Classification | Field | 1 |
@source-table | Which source table must be used for this target field. Remember that you can use multiple source tables, but only one source table by target field. The key must refer a table defined in Source-Tables | 1 |
Rule | For rule | 1..1000 |
Rule/@priority | You can have multiple rules on a field, they will be executed by priority. | 1 |
Rule/@name | You can give a name to your rule. | 0..1 |
Rule/Conditions | Defines in which conditions the rule must be executed. | 0..1 |
Rule/Action | Defines the action that must be done. Actions available depends on the data type of the target. | 1 |
Finally a complete example would be:
xml
<Rules-Engine table="PRODUCTS_RETAILERX" account="89h6797-2990a-345s78-90gh6-8klm89jlm78">
<Source-Tables>
<Table key="PRODUCTS_BRANDX" source-identifier="EAN_13" target-identifier="EAN" />
</Source-Tables>
<Rules>
<Field key="LABEL" source-table="PRODUCTS_BRANDX">
<Rule priority="1" name="Automate Label from Title">
<Conditions>
<Condition-Group>
<Condition source="TITLE" operator="NOT_EMPTY" />
<Condition target="LABEL" operator="EMPTY" />
</Condition-Group>
</Conditions>
<Action type="SET_TEXT">
<Copy source="TITLE" trim-spaces="true" />
</Action>
</Rule>
</Field>
</Rules>
</Rules-Engine>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Next you can read more about all conditions and actions available.
Conditions
xml
<Conditions>
<Condition-Group>
<Condition source="TITLE" operator="NOT_EMPTY" />
<Condition target="LABEL" operator="EMPTY" />
</Condition-Group>
</Conditions>
1
2
3
4
5
6
2
3
4
5
6
XPath | Description | Occurs |
---|---|---|
Condition-Group | Within a Condition-Group each Condition is interpreted with a AND logic. If you have several Condition-Group they are interpreted with a OR logic. | 1..* |
Condition | For each Condition | 1..* |
Condition/@source | The key of the source Identifier | Classification | Field | 1 |
Condition/@target | The key of the target Identifier | Classification | Field | 1 |
Condition/@operator | ENUM that depends on the type of the attribute. See below. | 1 |
As you can see you can put conditions on the source and target attributes. It is not required to set conditions on each attributes, it depends on the logic of the conditions that you want to model, read How to use conditions documentation to learn more.
Operator for Field with type SINGLE-LINE-TEXT, LONG-TEXT, HTML-TEXT
Operator | Description | Additional parameters |
---|---|---|
EMPTY | Is empty | None |
NOT_EMPTY | Is not empty | None |
CONTAINS | Contains a value (insensitive to case and accents) | Need a Value see below |
EQUALS | Strictly equals to a value (case sensitive and accents) | Need a Value see below |
STARTS_WITH | Starts with a value (case sensitive and accents) | Need a Value see below |
ENDS_WITH | Ends with a value (case sensitive and accents) | Need a Value see below |
xml
<Condition target="LABEL" operator="STARTS_WITH">
<Value>Ipod - <Value>
</Condition>
1
2
3
2
3
Operator for Field with type NUMBER, DATE, DATE-TIME
Operator | Description | Additional parameters |
---|---|---|
EMPTY | Is empty | None |
NOT_EMPTY | Is not empty | None |
LESS_THAN | Is less than a value | Need a Value see below |
LESS_THAN_OR_EQUAL | Is less than or equal to a value | Need a Value see below |
GREATER_THAN | Is greater than a value | Need a Value see below |
GREATER _THAN_OR_EQUAL | Is greater than or equal to a value | Need a Value see below |
EQUALS | Strictly equals | Need a Value see below |
xml
<Condition target="PRICE" operator="LESS_THAN">
<Value>100.4<Value>
</Condition>
1
2
3
2
3
- For NUMBER, the value must be a number. So 0.3 is valid, 0,3 is not valid.
- For DATE and DATE-TIME the value must follow YYYY-MM-DDTHH:mm:ss.sssZ, you can read more here: view link
Operator for Units on Fields with type NUMBER
To apply a condition on a NUMBER field unit, you need to specify that you want to use that unit and not the value.
Operator | Description | Additional parameters |
---|---|---|
EMPTY | Is empty | None |
NOT_EMPTY | Is not empty | None |
EQUALS | Is equal to a suffix key | Need a Value see below |
NOT_EQUALS | Is different from a suffix key or empty | Need a Value see below |
CONTAINS | Contains a part of the suffix key | Need a Value see below |
STARTS_WITH | Starts with a part of the suffix key | Need a Value see below |
ENDS_WITH | Ends with a part of the suffix key | Need a Value see below |
xml
<Condition source="PRICE" use="SUFFIX_KEY" operator="EQUALS" >
<Value>EURO</Value>
</Condition>
1
2
3
2
3
Operator for Classification or Field with type SINGLE-SELECT, MULTIPLE-SELECT, MULTIPLE_SELECT_QUANTIFIED, MULTIPLE-SELECT-QUANTIFIED-WITH-COMMENTS
Operator | Description | Additional parameters |
---|---|---|
EMPTY | Is empty | None |
NOT_EMPTY | Is not empty | None |
EQUALS | Strictly equals to a value | Need a Value see below. The value is the key of the Option/Category. |
NOT_EQUALS | Not equals to a value | Need a Value see below. The value is the key of the Option/Category. |
IN | Equals to one of the values | Need a Value see below. The value is the key of the Option/Category. |
NOT_IN | Is equals to none of the values | Need a Value see below. The value is the key of the Option/Category. |
xml
<Condition target="COLOR" operator="NOT_IN">
<Value>RED</Value>
<Value>BLUE</Value>
</Condition>
1
2
3
4
2
3
4
Operator for Field with type IDENTIFIER
Operator | Description | Additional parameters |
---|---|---|
EMPTY | Is empty | None |
NOT_EMPTY | Is not empty | None |
CONTAINS | Contains a value (insensitive to case and accents) | Need a Value see below |
EQUALS | Strictly equals to a value (case sensitive and accents) | Need a Value see below |
STARTS_WITH | Starts with a value (case sensitive and accents) | Need a Value see below |
ENDS_WITH | Ends with a value (case sensitive and accents) | Need a Value see below |
IN | Equals to one of the values (case sensitive and accents) | Need a Value see below |
NOT_IN | Is equals to none of the values (case sensitive and accents) | Need a Value see below |
xml
<Condition target="EAN_13" operator="IN">
<Value>1234567890123<Value>
<Value>1234567890124<Value>
</Condition>
1
2
3
4
2
3
4
Operator for Field with type IMAGE, ATTACHMENT
Operator | Description | Additional parameters |
---|---|---|
EMPTY | Is empty | None |
NOT_EMPTY | Is not empty | None |
Actions
There can only be one action done on the target field only. There are different types of actions depending on the type of target field.
Actions for target Field with type SINGLE-LINE-TEXT, LONG-TEXT, HTML-TEXT
Then the Action/@type
must be SET_TEXT
. Then you can use these actions:
Copy
xml
<Action type="SET_TEXT">
<Copy source="color" use="title-local" lang="fra" remove-carriage-returns="true" trim-spaces="true" />
</Action>
1
2
3
2
3
XPath | Description | Occurs |
---|---|---|
@source | The key of the Identifier | Classification | Field | 1 |
@use | If the source is a Classification or a List, you must define if you want to use title | title-local | key | 0..1 |
@lang | If you have set @use=title-local then you must define which language must be used. If the language does not exist, a fallback is done on the default language. | 0..1 |
@remove-carriage-returns | Set true to remove carriage returns | 0..1 |
@trim-spaces | Set true to trim spaces | 0..1 |
- If the source is of the Multiple select type, the options are joined by
;
- If the source is of the Multiple select quantified type, the options are joined by
;
and we apply the following template:[quantity]: [value]
- If the source is of the Multiple select quantified with comments type, the options are joined by
;
and we apply the following template:[quantity]: [value], [comment]
Value
xml
<Action type="SET_TEXT">
<Value>Hello world</Value>
</Action>
1
2
3
2
3
You can use this to set a default value.
Template
This actions allows to concatenate texts.
xml
<Action type="SET_TEXT">
<Template trim-spaces="true">
<![CDATA[
<b>Composition</b>
<br></br>
{{source("COMPOSITION")}}
<br></br>
<br></br>
<b>Materials</b>
<br></br>
{{source("MATERIALS","title")}}
]]>
</Template>
</Action>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
The notation {{source}}
allows to reference a source Identifier
| Classification
| Field
. The first value is the key of the attribute.
- If the key contains a double quote, then it must doubled:
source("MORE_THAN_100""_SCREEN")
- The second parameter is used for Classifications or List, you can choose between
title
|title-local
|key
- The third parameter is to set the language if you have set
title-local
for the second parameter
Best practice
Do the concatenation only if all attributes used are not empty. For this use the conditions.
Actions for target Field with type NUMBER
Then the Action/@type
must be SET_NUMBER
. Then you can use these actions:
Copy
xml
<Action type="SET_NUMBER">
<Copy source="PRICE" precision="2" round="UP" />
</Action>
1
2
3
2
3
XPath | Description | Occurs |
---|---|---|
@source | The key of a Field with type NUMBER | 1 |
@precision | Decimal places | 1 |
@round | Round method, you can choose between: UP , DOWN , CEILING and FLOOR , HALF_UP , HALF_DOWN . You can read more about each option here | 1 |
Value
xml
<Action type="SET_NUMBER">
<Value>12.3</Value>
</Action>
1
2
3
2
3
You can use this to set a default value.
Template
For numbers it allows to do calculations.
xml
<Action type="SET_NUMBER">
<Template precision="0" round="CEILING">
<![CDATA[
{{source("WIDTH_MM")}} / 10
]]>
</Template>
</Action>
1
2
3
4
5
6
7
2
3
4
5
6
7
You can use:
*
for the multiplication/
for the division+
for the addition-
for the substraction- You can also use parentheses
Apply a unit
To apply a suffix you have to specify within the Action the field NUMBER, that unit.
xml
<Action type="SET_NUMBER">
<Copy source="PRICE" precision="2" round="UP" suffix="EURO"/>
</Action>
1
2
3
2
3
Actions for target Field with type SINGLE-SELECT
Then the Action/@type
must be SET_OPTION
. Then you can use these actions:
Map
xml
<Action type="SET_OPTION">
<Map source="MAIN_COLOR">
<Entry source="RED" target="RED" />
<Entry source="BURGUNDY" target="RED" />
<Entry source="MAGENTA" target="RED" />
<Entry source="BLUE" target="BLUE" />
<Entry source="AZURE" target="BLUE" />
<Entry source="PETROL" target="BLUE" />
</Map>
</Action>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
XPath | Description | Occurs |
---|---|---|
@source | The key of a Field with type SINGLE-SELECT or the key of a Classification | 1 |
Entry | For each Option | 1..* |
Entry/@source | The key of the source Option | 1 |
Entry/@target | The key of the target Option | 1 |
Value
xml
<Action type="SET_OPTION">
<Value>RED</Value>
</Action>
1
2
3
2
3
You can use this to set a default value. The value must be a valid Option key of the target Field.
Actions for target Field with type MULTIPLE-SELECT, MULTIPLE-SELECT-QUANTIFIED et MULTIPLE-SELECT-QUANTIFIED-WITH-COMMENTS
Then the Action/@type
must be SET_OPTIONS
. Then you can use these actions:
Map
xml
<Action type="SET_OPTION">
<Map source="COLORS">
<Entry source="RED" target="RED" />
<Entry source="BURGUNDY" target="RED" />
<Entry source="MAGENTA" target="RED" />
<Entry source="BLUE" target="BLUE" />
<Entry source="AZURE" target="BLUE" />
<Entry source="PETROL" target="BLUE" />
</Map>
</Action>
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
XPath | Description | Occurs |
---|---|---|
@source | The key of a Field with type SINGLE-SELECT or the key of a Classification | 1 |
Entry | For each Option | 1..* |
Entry/@source | The key of the source Option | 1 |
Entry/@target | The key of the target Option | 1 |
Value
xml
<Action type="SET_OPTIONS">
<Value>RED</Value>
<Value>BLUE</Value>
</Action>
1
2
3
4
2
3
4
You can use this to set a default value. The value must be a valid Option key of the target Field.
For Fields
with type MULTIPLE-SELECT-QUANTIFIED
you can set:
xml
<Value quantity="2">HDMI</Value>
1
For Fields
with type MULTIPLE-SELECT-QUANTIFIED-WITH-COMMENTS
you can set:
xml
<Value quantity="2" comment="1 hdmi 3.1 and 1 hdmi 2.0">HDMI</Value>
1
Actions for target Classification
Then the Action/@type
must be SET_OPTION
. Then you can use these actions:
Map
xml
<Action type="SET_CATEGORY">
<Map source="TYPOLOGY">
<Entry source="laveVaisselle" target="DISHWASHER" />
<Entry source="frigo" target="FRIDGE" />
<Entry source="réfrigérateur" target="FRIDGE" />
</Map>
</Action>
1
2
3
4
5
6
7
2
3
4
5
6
7
XPath | Description | Occurs |
---|---|---|
@source | The key of a Field with type SINGLE-SELECT or the key of a Classification | 1 |
Entry | For each Option | 1..* |
Entry/@source | The key of the source Option/Category | 1 |
Entry/@target | The key of the target Category | 1 |
Value
xml
<Action type="SET_CATEGORY">
<Value>FRIDGE</Value>
</Action>
1
2
3
2
3
You can use this to set a default value. The value must be a valid Category key of the target Classification.
Actions for target Field with type IMAGE
Then the Action/@type
must be SET_IMAGE
. Then you can use these actions:
Copy
xml
<Action type="SET_IMAGE">
<Copy source="FRONT_VIEW" width-px="1000" height-px="1000" quality="90" format="jpg" />
</Action>
1
2
3
2
3
XPath | Description | Occurs |
---|---|---|
@source | The key of a Field with type IMAGE | 1 |
width-px | Optional to resize the width of the image | 0..1 |
height-px | Optional to resize the height of the image | 0..1 |
quality | Optional to change the quality and size of the file. A number from 1 to 100. | 0..1 |
format | Optional to force the format of the image to jpg or png | 0..1 |
Actions for target Field with type ATTACHMENT
Then the Action/@type
must be SET_ATTACHMENT
. Then you can use these actions:
Copy
xml
<Action type="SET_ATTACHMENT">
<Copy source="INSTRUCTIONS" />
</Action>
1
2
3
2
3
XPath | Description | Occurs |
---|---|---|
@source | The key of a Field with type ATTACHMENT | 1 |
Outputs
Property | Type | Description |
---|---|---|
allRulesImported | YES all rules have been imported without warning, NO at least one rule has generated a warning. | |
report | A report file of warnings and errors. |
Rules life cycle
The file is interpreted as an exhaustive file.
Warning!
Therefore rules that are in the file are updated or created, and rules that are not in the file are removed.
Limits and additional notes
Element | Limit |
---|---|
Fields with rules | 5 000 |
Rules by field | 1 000 |
Source tables | 5 |
Rules by table | 20 000 |