Skip to content

Automation Actions Reference

Actions are the “THEN” part of automation rules. They define the operations to be executed on a product when its condition is met.

Here is an overview of all available actions:


Explore the full specification of each available action:

Adds Value to Product Attribute Value for specified non-multi-language Attribute if value is empty.

If Attribute Value exists and Value is empty then just sets Value.
If Attribute Value doesn’t exist then creates Attribute Value with specified Attribute and Value.

Supports multiple values in Value parameter if specified Attribute is multivalued.

Supports FreeMarker expression in the Value parameter if value is marked as formula/expression by toggling on f(x) button, so it is possible to calculate Value based on the product data.

For example:

<#-- calculate the area -->
${(values['MC_Depth']!0) * (values['MC_Width']!0) * (values['MC_Height']!0)}
<#-- calculate new value based on other attributeValue -->
${(values['MC_Width']!0) + (involvedObject?size)}
${rules[1].conditionResult.involvedObject[0]}

In the action editor, values have input control and are validated according to the attribute’s type and type extension except markdown and text-table types for which simple textarea is used as input control.

NOTE: only type extension of attribute affects validation and input controls, the type extension of attribute assigned to a specific classification group doesn’t affect validation and input control because a classification group is unknown in the editor.

Composite attributes are not supported.

Implementation Class: AddAttributeValue

  • Attribute - the non-multi-language attribute to find or create Attribute Value, required
  • Value - the value(s) to add or FreeMarker expression(s) to calculate and add calculated value, required, several values/expressions are possible

Add Attribute Value for missing Attributes

Section titled “Add Attribute Value for missing Attributes”

Adds Value to Product Attribute Value for the missed attributes and specified Language.

This action only works if Attributes values are missing or Translations are missing condition is used in the Rule, the action uses the missed attributes collected by those conditions to add specified Value.

Supports FreeMarker expression in the Value parameter, so it is possible to calculate Value based on the product data.
For example:

<#-- calculate the area -->
${(attributeValues['MC_Depth']!0) * (attributeValues['MC_Width']!0) * (attributeValues['MC_Height']!0)}
<#-- calculate new value based on other attributeValue -->
${(attributeValues['MC_Width']!0) + (involvedObject?size)}
${rules[1].conditionResult.involvedObject[0]}

Implementation Class: AddAttributeValueForMissingAttributes

  • Language - the language to create Attribute Value, if specified and missed attribute is non-multi-language then it is not used
  • Value - the value to add or FreeMarker expression to calculate and add calculated value, required

Adds Value to Product Attribute Value for specified multi-language Attribute and Language if value is empty.

If Attribute Value exists and Value is empty then just sets Value.
If Attribute Value doesn’t exist then creates Attribute Value with specified Attribute, Language and Value.

Supports multiple values in Value parameter if specified Attribute is multivalued.

Supports FreeMarker expression in the Value parameter if value is marked as formula/expression by toggling on f(x) button, so it is possible to calculate Value based on the product data.
For example:

<#-- calculate the area -->
${(values['MC_Depth']!0) * (values['MC_Width']!0) * (values['MC_Height']!0)}
<#-- calculate new value based on other attributeValue -->
${(values['MC_Width']!0) + (involvedObject?size)}
${rules[1].conditionResult.involvedObject[0]}

In the action editor, values have input control and are validated according to the attribute’s type and type extension except markdown and text-table types for which simple textarea is used as input control.

NOTE: only type extension of attribute affects validation and input controls, the type extension of attribute assigned to specific classification group doesn’t affect validation and input control because classification group is unknown in editor. Composite attributes are not supported.

Implementation Class: AddTranslation

  • Attribute - the multi-language attribute to find or create Attribute Value, required.
  • Language - the language to find or create Attribute Value, required.
  • Value - the value(s) to add or FreeMarker expression(s) to calculate and add calculated value, required, several values/expressions are possible

Add Product Relations of a given Type, Status, Related Product or Related Classification Group.

Implementation Class: AddProductRelations

  • Relation Type - the type of Product Relation, required
  • Status - the status of Product Relation expected to be added, required
  • Quantity - TODO
  • Min - TODO
  • Max - TODO
  • Increment - TODO
  • Sort No - TODO
  • two Radio Buttons with values Select Product or Select Classification Group

Adds new price with specified Contract and Status if there is no existing price for the Contract in the product’s price list. Additionally, if a price with the same Contract already exists but another unique key field is not empty (e.g ContractID, PriceType, Currency, ValidfromQuantity, ValidRange, Variant), it will also add a new price with the specified Contract and Status.

Implementation Class: AddContract

  • Contract - the contract of Product Price, required
  • Status - the status of Product Price expected to be added, required

Assigns the specified Classification Group to product if assignment doesn’t exist.

Implementation Class: AssignClassificationGroup

  • Classification Group - the Classification Group to assign, required

Assign Classification Group using a Mapping

Section titled “Assign Classification Group using a Mapping”

Assigns Classification Group to the product by using specified Classification Group Mapping.

Practically if the product has a group that is a source group in a mapping, then a target group is assigned if it is not assigned to a product.

See also [value-mapping].

Implementation Class: AssignClassificationGroupByMapping

  • Classification Group Mapping - the mapping to use, required

Clean invalid Characters from Attribute Values

Section titled “Clean invalid Characters from Attribute Values”

Checks if any of the values of the selected product’s attributes has any of the invalid chars and if so, removes that chars from the value or deletes the value completely, depending on the chosen cleansing option. Composite attributes are not checked.

Implementation Class: CleanInvalidCharactersFromAttributeValues

  • Attributes - the attributes to check, required, multiple attributes are possible.
  • Chars to be detected - the invalid chars to look for, required, multiple chars are possible, the possible values are:
    • [^\x00-\x7F] - looks for non Ascii chars.
    • [\p{C}] - looks for non-printable chars.
    • [\p{Cc}\p{Cf}\p{Co}\p{Cn}] - looks for control chars.
    • [\r\n\t] - looks for delimiter chars.
  • Adjustable chars to be detected - the invalid chars to look for defined by a customer, optional.
  • Cleansing Options - the cleansing options to perform, required, one of [Remove chars from Value, Delete the value completely].

Converts Value of a source Product Attribute and sets it to a target Product Attribute (can be the same) using a conversion formula.

Currently supported conversions:

  • Temperature: Celsius to Fahrenheit, Fahrenheit to Celsius, Celsius to Kelvin, Kelvin to Celsius.
  • Length: Conversions between Meter, Centimeter, Millimeter, Inch, Foot, Kilometer, Mile.
  • Mass: Gram, Kilogram, Pound, Ounce.
  • Area: Square Millimeter, Square Centimeter, Square Meter, Square Kilometer, Square Inch, Square Foot.
  • Volume: Milliliter, Liter, Gallon.
  • Time: Second, Minute, Hour, Day.
  • Speed: Meters per second, Kilometers per hour, Miles per hour, Knot.
  • Pressure: Pascal, Kilopascal, Bar, PSI.
  • Energy: Joule, Kilojoule, Calorie, Kilocalorie.
  • Power: Watt, Kilowatt, Horsepower.
  • Angle: Degree, Radian.

Supports rounding configuration (default is 2 decimal places).

The action takes the current value of the source attribute (or a specific value provided in the configuration) and applies the conversion to the target attribute.

In the action editor, selecting both Source Attribute and Target Attribute is mandatory.

NOTE: Action cannot be executed for multi-language or composite attributes.

Implementation Class: ConvertAttributeValue

  • Source Attribute - the non-multi-language attribute to take the value from, required.
  • Target Attribute - the non-multi-language attribute to set the converted value to, required.
  • Value - configuration for the conversion (Formula Type, Source Unit, Target Unit, Rounding). Explicit value can also be provided to override the product’s source attribute value.

Converts a numerical value from one unit to another.

Signatures:

  1. convertUnit(value, fromUnit, toUnit, [scale]) - Auto-detects conversion type based on units.
  2. convertUnit(value, unitType, fromUnit, toUnit, [format], [scale]) - Explicitly specifies conversion type.

Arguments:

  • value: The numerical value to convert.
  • unitType: (Optional) The type of conversion (e.g., “Length”, “Temperature”, “Mass”, “Area”, “Volume”, “Time”, “Speed”, “Pressure”, “Energy”, “Power”, “Angle”).
  • fromUnit: The source unit (e.g., “Celsius”, “m”, “kg”).
  • toUnit: The target unit (e.g., “Fahrenheit”, “in”, “lb”).
  • format: (Optional) Formatting style (currently supports “decimal” or “none”).
  • scale: (Optional) Number of decimal places for rounding (default is 2, or 0 if the input value is an integer and no scale is provided).

Examples:

Temperature Conversions

  • Operating Temp (Standard): ${convertUnit(values['MC_Electric_OperatingTemp']!0, "Temperature", "celsius", "fahrenheit", "none", 2)}
  • Operating Temp (Minimum): ${convertUnit(values['MC_Electric_OperatingTempMin']!0, "Temperature", "c", "f", "none", 2)}
  • Safety Threshold (Minimum): ${convertUnit(values['MC_Electric_TempShortMin']!0, "Temperature", "celsius", "fahrenheit", "none", 1)}

Length Conversions

  • Cable Length (Meters to Feet): ${convertUnit(values['MC_CableLength']!0, "Length", "m", "ft", "none", 2)}
  • Product Width (mm to Inches): ${convertUnit(values['MC_Width']!0, "Length", "mm", "inches", "none", 2)}
  • Product Height (mm to Inches): ${convertUnit(values['MC_Height']!0, "Length", "mm", "in", "none", 2)}

Volume Conversions

  • Tank Volume (Gallons to Liters): ${convertUnit(values['MC_Tank_Volume']!0, "Volume", "gal", "l", "none", 1)}
  • Fluid Capacity (Liters to Gallons): ${convertUnit(values['MC_Fluid_Capacity']!0, "Volume", "liter", "gallon", "none", 2)}
<#-- Basic usage with auto-detection -->
${convertUnit(100, "Celsius", "Fahrenheit")} <#-- Result: 212 -->
${convertUnit(1, "m", "in", 4)} <#-- Result: 39.3701 -->
<#-- Explicit type usage -->
${convertUnit(1, "Length", "m", "cm", "decimal", 0)} <#-- Result: 100 -->

Deletes the Product Attribute Values for specified Attributes Composite attributes are skipped. If Attribute is multivalued the old list of values will be fully deleted.

Implementation Class: DeleteAttributeValues

  • Attributes - the non-multi-language attributes to delete Attribute Values, required.

Delete Attribute Values Violating Type Definitions

Section titled “Delete Attribute Values Violating Type Definitions”

Delete Attribute Values if those violate the type definition.

The User can set in which cases the data shall be deleted via parameters.

Composite attributes are not checked.

Implementation Class: DeleteAttributeValuesViolatingTypeDefinitions

all boolean = check box in UI, default = false

Violations list for check in attribute values
Section titled “Violations list for check in attribute values”
  • Data Type violated - if true then delete values which do not fit Attribute Type (boolean, data, decimal, integer)

  • Type Extension violated - if true then delete values which do not match the min/max (numeric), from/to (date) or minLength/minLength (string) rules of the type extension

  • String Pattern violated - if true then delete values which do not match the regex of the type extension

  • Unexpected multi-value - if true then delete value if it is a multi-value (list of values: e.g. ["Value 1", "Value 2"]) for a non-multi-valued Attribute

  • Unexpected language - if true then delete value if languageID is not null and Attribute is not multi-language

  • Value not in value list - if true then delete values which are not in the value list specified for type extension


Delete Data which references Missing Objects

Section titled “Delete Data which references Missing Objects”

Removes product data which references non-existing objects.

Implementation Class: DeleteReferencesToMissingObjects

  • Delete Attribute Value in case Attribute does not exist - checks if Attribute for Attribute Value exists. If it’s not so, deletes it.
  • Delete Attribute Value in case language does not exist - checks if Language for Attribute Value exists. If it’s not so, deletes it. Pay attention that those check and action can be performed only in the case if a given attribute exists.
  • Delete Classification Group Associations in case Group or Classification does not exist - checks if Classification Association refers to existing Group. If it’s not so, deletes it.
  • Delete Document Association in case the View Type does not exist - checks if Document Associations has existing View Type. If it’s not so, deletes it.
  • Delete the Product Relation in case the Relation Type does not exist - checks if RelationType of Relations exists. If it’s not so, deletes it.
  • Delete the price in case the Contract does not exist - checks if Contract of the price exists. If it’s not so, deletes it.
  • Delete the price from product in case the Currency does not exist - checks if Currency of the price exists. If it’s not so, deletes it.
  • Delete Manufacturer ID in case Manufacturer does not exist - checks if ManufacturerID on product exists in DB. If it’s not so, deletes it.

Note that Attribute Value and Price mean entire associations from the product to the corresponding collection. So, for Attribute Value AttributeID + Value + Language + Tag, etc. and for Price ContractId + CurrencyId+ PriceTypeId + Price, etc. will be deleted.


Deletes the Document Associations for a list of products in the scope of the given View Types, Status and Languages

Implementation Class: DeleteDocumentAssociations

  • View Types - the view types to delete Document Associations, required.
  • Status - the status to delete Document Associations.
  • Languages - the languages to delete Document Associations.

Delete Prices matching the parameters for Products and/or Variants.

Implementation Class: DeletePrices

  • Contracts - the Contracts to delete Prices, required.
  • Delete Data for (Scope) - Prices can exist in Scope of Products and Variants. Therefore, the user needs an option to select if deletion shall be done only for products, only for variants or in both scopes, required, Products & Variants by default.
  • Delete prices, only if (boolean) - if true then action deletes prices matching parameters below:
    • Price Types - deletes Prices with Type of given Price’s Types.
    • Currencies - deletes Prices with Currency of given Currencies.
    • Status Range - deletes Prices with Status is in a given range.
    • Valid Range - deletes Prices for which the entire valid time interval (validFrom-validTo) completely contains in a specified range.

Deletes Product Relations of a given Type and optional Status.

Implementation Class: DeleteProductRelations

  • Type - the type of Product Relation expected to be removed, required.
  • Status - the status of Product Relation expected to be removed, optional.

Deletes the Product Attribute Values for the defined Attributes in the scope of the given Languages

If Attribute is multi-valued the old list of values will be fully deleted. Non-multi-language and composite attributes are skipped.

Implementation Class: DeleteTranslations

  • Attributes - the multi-language attributes to delete Attribute Values, required.
  • Languages - the languages to delete Attribute Value, required.

Replaces product Attribute IDs by using specified Attribute Mapping.

Practically if the product has an attribute that is a source attribute ID in a mapping, then the current attribute ID is replaced by target attribute ID.

Pay attention that If the attribute with the target attribute ID is already present in product’s values, it will be replaced. E.g.:

Before:

{
"attr1": {
"en": "",
"de": ""
},
"mapped-attr1": {
"en": "value"
}
}

After “attr1” -> “mapped-attr1” mapping:

{
"mapped-attr1": {
"en": "",
"de": ""
}
}

See also [value-mapping].

Implementation Class: ReplaceAttributeIdByMapping

  • Attribute Mapping - the mapping to use, required

Replace Classification Group using a Mapping

Section titled “Replace Classification Group using a Mapping”

Replaces Classification Group product assignments by using specified Classification Group Mapping.

Practically if the product has a group that is a source group in a mapping, then the current group is removed and a target group is assigned if it is not assigned to a product.

See also [value-mapping].

Implementation Class: ReplaceClassificationGroupByMapping

  • Classification Group Mapping - the mapping to use, required

Replaces product Units of Measure by using specified Value Mapping.

Practically if the product has a value that is a source unit type value ID in a mapping, then the current value is replaced by target unit type value ID.

See also [value-mapping].

Implementation Class: ReplaceUnitOfMeasureByMapping

  • Value Mapping - the mapping to use, required
  • Unit types - unit types for replacing, optional (all unit types by default)
  • Contract - products with such contracts for replacing, optional (all contracts by default)
  • Unit of Measure (Product)
  • Sales Unit of Measure (Product)
  • Unit of Measure (Price)
  • Sales Unit of Measure (Price)

Sends email to specified recipients (To) with the specified subject (With Subject) and message (With Message).

The subject and message support FreeMarker expressions to access the product data. For example, if it is necessary to mention the Product’s ID then use ${product.productId} in a subject (With Subject) or message (With Message).

Also, possible to use:

<#if rules[0].conditionResult.success>
<li> attributes are missing:
<#list rules[0].conditionResult.involvedObject as attribute>
- ${attribute}
</#list>
</#if>

Implementation Class: SendEmail

  • To - recipients to send email, required
  • With Subject - the email’s subject, required
  • With Message - the email’s message, required

Sets the specified status (Status) to Product Relations for the specified relation Type.

Implementation Class: SetProductRelationStatus

  • Type - the types of Product Relations
  • Status - the status of Product Relation

Translate Value of selected Products for all multi-language Attribute.
Supports multiple values in Value parameter if specified Attribute is multivalued.
Composites and their nested attributes are not checked.

If a value for a given language exists, the value will be translated again.

Implementation Class: TranslateAttributeValuesViaDeepL

  • Attributes - the multi-language attributes to translate Attribute Value, required.
  • fromLanguage - the language translate from
  • toLanguage - the language translate to

Updates Value of Product Attribute Value for specified non-multi-language Attribute.

Supports multiple values in Value parameter if specified Attribute is multivalued.

Supports FreeMarker expression in the Value parameter if value is marked as formula/expression by toggling on f(x) button, so it is possible to calculate Value based on the product data.
For example:

<#-- calculate the area -->
${(values['MC_Depth']!0) * (values['MC_Width']!0) * (values['MC_Height']!0)}
<#-- calculate new value based on other attributeValue -->
${(values['MC_Width']!0) + (involvedObject?size)}
${rules[1].conditionResult.involvedObject[0]}

In the action editor, values have input control and are validated according to the attribute’s type and type extension except markdown and text-table types for which simple textarea is used as input control.

NOTE: only type extension of attribute affects validation and input controls, the type extension of attribute assigned to specific classification group doesn’t affect validation and input control because classification group is unknown in editor. Composite attributes are not supported. Implementation Class: UpdateAttributeValue

  • Attribute - the non-multi-language attribute to update Attribute Value, required.
  • Value - the new attribute value(s) (or expressions(s) to calculate new value(s)), required, several values/expressions are possible

Updates product Attribute value by using specified Value Mapping for specified Attributes. Composite attributes are skipped.

Practically if the product has a value that is a source value in a mapping, then the current attribute value is updated by target attribute value.

See also [value-mapping].

Implementation Class: UpdateAttributeValueByMapping

  • Attributes - the attributes to update Attribute Value, optional.
  • Value Mapping - the mapping to use, required.

Updates product header information fields such as external product ID, manufacturer details, units of measure, and supplier information. This action supports both static values and dynamic FreeMarker expressions for flexible data transformation.

Implementation Class: UpdateProductHeaderInformation

  • External Product ID - External product identifier, optional, supports FreeMarker expressions.
  • Content Unit - Unit of measure for product content, optional.
  • Sales Unit - Unit of measure for sales operations, optional.
  • Manufacturer Name - Name of the product manufacturer, optional.
  • Manufacturer Product ID - Manufacturer’s product identifier, optional, supports FreeMarker expressions.
  • Manufacturer - Manufacturer company, optional.
  • Supplier - Supplier company, optional.

Expression: ${product.productId?replace("^(\\d{4})(\\d{2})(\\d{1})$", "$1 $2-$3", "r")} Input: Product ID = “12345678” Result: External Product ID = “1234 56–78”


Updates the product’s status to the specified one (To parameter).

Implementation Class: UpdateStatus

  • To - the status to set, required

Updates Value of Product Attribute Value for specified multi-language Attribute and Language.

Supports multiple values in Value parameter if specified Attribute is multivalued.

Supports FreeMarker expression in the Value parameter if value is marked as formula/expression by toggling on f(x) button, so it is possible to calculate Value based on the product data.
For example:

<#-- calculate the area -->
${(values['MC_Depth']!0) * (values['MC_Width']!0) * (values['MC_Height']!0)}
<#-- calculate new value based on other attributeValue -->
${(values['MC_Width']!0) + (involvedObject?size)}
${rules[1].conditionResult.involvedObject[0]}

In the action editor, values have input control and are validated according to the attribute’s type and type extension except markdown and text-table types for which simple textarea is used as input control.

NOTE: only type extension of attribute affects validation and input controls, the type extension of attribute assigned to specific classification group doesn’t affect validation and input control because classification group is unknown in editor. Composite attributes are not supported.

Implementation Class: UpdateTranslation

  • Attribute - the multi-language attribute to update Attribute Value, required.
  • Language - the language to update Attribute Value, required.
  • Value - the new attribute value(s) (or expressions(s) to calculate new value(s)), required, several values/expressions are possible

Writes the specified Message into the system log file with the specified log level (With log level). Message can include FreeMarker expressions.

For example

<#if involvedObject??>
attributes are missing:
<#list involvedObject as attrId>
- ${attrId}
</#list>
</#if>

Implementation Class: WriteToLogFile

  • Message - the log message, required
  • With log level - the log level message is written to log file, one of [error, warn, info, debug], required

Writes the specified Message into the protocol with the specified log level (With log level).

Implementation Class: WriteToProtocol

  • Message - the protocol message, required
  • With log level - the log level message is written to protocol, one of [error, warn, info, fatal], required

Creates Notification for the specified User with specified Type, Subject, Message and Expired date.

The subject and message support FreeMarker expressions to access the product data. For example, if it is necessary to mention the Product’s ID then use ${product.productId} in subject or message.

See also [Notifications] and [Notifications & Tasks features toggling].

Implementation Class: CreateNotification

  • User - the user in system who receives notification, optional.
  • Type - the one of info, warning, error or task types, required.
  • Subject - the notification’s subject, required.
  • Message - the notification’s message, required.
  • Expired In - the time interval when notification expires since action execution, optional.

Creates Task to specified User with specified Subject, Description and Deadline date.

The subject and description support FreeMarker expressions to access the product data. For example, if it is necessary to mention the Product’s ID then use ${product.productId} in subject or description.

See also [Tasks] and [Notifications & Tasks features toggling].

Implementation Class: CreateTask

  • User - the user in system who will be assigned to task, optional.
  • Subject - the task’s subject, optional.
  • Description - the task’s description, required.
  • Deadline In - the time interval which defines the task’s deadline since action execution, optional.