Fluent Commerce Logo
Docs
Sign In

Rule Parameters

Topic

Author:

Fluent Commerce

Changed on:

28 Sept 2023

Overview

Parameters, also known as properties or props, and the configuration time inputs to the .

Parameters should be considered always required. Optional inputs to a should usually be managed via Event Attributes.


Rule Parameters

Author:

Fluent Commerce

Changed on:

28 Sept 2023

Overview

Parameters, also known as properties or props, and the configuration time inputs to the .

Parameters should be considered always required. Optional inputs to a should usually be managed via Event Attributes.

Key points

  • There are 4 Parameter types available to declare on Rules:
    • String Parameters
    • Integer Parameters
    • Enum Parameters
    • Time Period Parameters
  • Also, on this page, see how to implement Multi-value Parameters

String Parameters

The `@ParamString` Annotation defines a Parameter for the of type `String`.

It contains 3 properties:

  • `name` - the Name of the Parameter. This is Required.
  • `description` - the Description of the Parameters. This is Required.
  • `defaultValue` - this is the Default Value of the Parameter. This is Optional.

Property Name

Description

Required

Default Value

`name`

The name of the parameter. This becomes the key name used in the `props` construct of the JSON configuration.

Y


`description`

A helpful text describing the parameter. This is important meta data for use within the Builder UI and the GET API.

Y


`defaultValue`

A default value if the parameter is not set.

N


1@ParamString(name = "productCatalogueRef", description = "The reference to the Product Catalogue", defaultValue = "FCRG:PC:MASTER")

Integer Parameters

The `@ParamInteger` Annotation defines a Parameter for the of type `Integer`.

It contains 5 properties:

Property Name

Description

Required

Default Value

`name`

The name of the parameter. This becomes the key name used in the `props` construct of the JSON configuration.

Y


`description`

A helpful text describing the parameter. This is important meta data for use within the Builder UI and the GET API.

Y


`min`

The minimum value allowed to be entered for the parameter.

N

`Integer.MIN_VALUE`

`max`

The maximum value allowed to be entered for the parameter.

N

`Integer.MAX_VALUE`

`defaultValue`

A default value if the parameter is not set.

N

`Integer.MIN_VALUE`

1@ParamInteger(name = "ParamInt1", description = "Parameter Int 1", min = 0, max = 9, defaultValue = 0)

Enum Parameters

The `@ParamEnum` Annotation defines a Parameter for the of type `Enum`. This is useful for circumstances where only a specific set of values is acceptable as an input. There is however a downside though. If ever the list of parameter values needs to be changed or extended, it would require a code change, so use this only when this is not likely to be the case. If you need a list of parameter values for a , but it needs to remain configurable at runtime, this can be achieved using Settings. See Multi-value Parameters for more information.

It contains 4 properties:

Property Name

Description

Required

Default Value

`name`

The name of the parameter. This becomes the key name used in the `props` construct of the JSON configuration.

Y


`description`

A helpful text describing the parameter. This is important meta data for use within the Builder UI and the GET API.

Y


`options`

This is the Enum class providing the available options to be selected.

Y


`defaultValue`

A default value if the parameter is not set.

N


1// Define an Enum use either in the same Java file as the Rule, or in a separate file within your Plugin Project:
2enum YesNoEnum {
3    YES, NO
4}
5
6@ParamEnum(name = "DoSomething", description = "Select YES or NO to doing something", options = YesNoEnum.class, defaultValue = YesNoEnum.YES)

Time Period Parameters

The `@ParamTimePeriod` Annotation defines a Parameter for the of type `Integer` signifying a duration in seconds.

It contains 5 properties:

Property Name

Description

Required

Default Value

`name`

The name of the parameter. This becomes the key name used in the `props` construct of the JSON configuration.

Y


`description`

A helpful text describing the parameter. This is important meta data for use within the Builder UI and the GET API.

Y


`min`

The minimum value allowed to be entered for the parameter.

N

`Integer.MIN_VALUE`

`max`

The maximum value allowed to be entered for the parameter.

N

`Integer.MAX_VALUE`

`defaultValue`

A default value if the parameter is not set.

N

`Integer.MIN_VALUE`

1@ParamTimePeriod(name = "delaySeconds", description = "Delay value in seconds", min = 0, max = 9, defaultValue = 5)

Multi-value Parameters

Rules can receive complex objects, such as Arrays or a JSON object, as Parameter inputs.

For example, you may need to receive an object containing a number of fields, or an array of Strings, Integers, or any other Objects.

Typically, we recommend using a standard String Parameter which receives a name which references a in the platform.

It is up to the logic to handle the correct parsing of this complex type.

For example, let's say you want to provide a list of Virtual Catalogue References for querying Virtual Positions within the . You could create a Parameter for the Name, such as `acme.sourcing.multi-channel.catalogues`, which expects a JSON value such as the following:

1{
2  "virtualCatalogueRefs": [
3    "VC:ATS:ECOMMERCE",
4    "VC:ATS:MARKETPLACE"
5  ]
6}
1@RuleInfo(name = "FulfilFromMultiSources", description = "Fulfils from any available positions in multiple Virtual Catalogues configured in setting {cataloguesSetting}")
2@ParamString(name = "cataloguesSetting", description = "The Setting name holding the list of Virtual Catalogue References to include in the search")
3public class FulfilFromMultiChannelSources implements Rule {
4    @Override
5    public <C extends Context> void run(C context) {
6        String cataloguesSetting = context.getProp("cataloguesSetting");
7
8        // Note: the `getSetting` method is not provided, but encapsulates querying the GraphQL Settings API.
9        Optional<VirtualCataloguesSetting> setting = getSetting(context, cataloguesSetting).as(VirtualCataloguesSetting.class);
10
11        if(setting.isPresent()) {
12            // Continue Sourcing...
13        } else {
14            // Note: the `logOnce` method is not provided, but encapsulates the `context.action().log()` action.
15            logOnce(context, VirtualCataloguesSetting.class, "No Catalogues config found at '%s'", cataloguesSetting);
16        }
17    }
18
19    @Data
20    @AllArgsConstructor
21    private static final class VirtualCataloguesSetting {
22        String[] virtualCatalogueRefs;
23    }
24}
Fluent Commerce

Fluent Commerce