Managing large collections of data that are hard-coded directly into rules quickly becomes cumbersome to set up and difficult to maintain.
The correct strategy in Combinum is to store this data in dictionaries and use assignment expression rules or data selectors to retrieve it. A data selector is a user interface control that allows users to make selections directly from a filtered and sorted table, automatically setting parameters based on that selection. Read more in the Data selector section.
Below is a description of how an assignment expression rule can be used to retrieve default data from a dictionary while still allowing the user to manually change the values afterward.
Example
Imagine that you are a manufacturer of prefabricated villas. You offer more than 50 villa models and allow customers to select surface materials for each room. Each villa model has different default values. You have decided to manage all villa models as a single product in Combinum named Villa. You also need the floor and wall areas in square meters for each room to calculate price changes when different materials are selected.
The default data can be gathered in a dictionary named RoomData, as shown below, where each room is identified by a unique key that combines the villa model and the room instance:
Key |
FloorM2 |
Floor |
WallsM2 |
Walls |
WallsOtherM2 |
WallsOther |
|---|---|---|---|---|---|---|
VillaA.Kitchen1 |
18 |
OakPremium |
28 |
Painted |
6.2 |
TileTuscannyWhite |
VillaA.Living1 |
39.6 |
OakPremium |
46 |
Painted |
||
VillaA.Bed1 |
14 |
OakPremium |
35.5 |
WallPaperClass2 |
||
VillaA.Bed2 |
10.8 |
OakPremium |
31 |
WallPaperClass2 |
||
VillaA.Bath1 |
7.2 |
TileTuscannyBlack |
25 |
TileTuscannyWhite |
||
VillaA.Laundry1 |
8.6 |
TileRusticGray |
28 |
Painted |
||
VillaB.Kitchen1 |
21.6 |
OakLight |
33 |
Painted |
||
... |
The CPQ architect has decided to let each room be an individual configuration model. Therefore, a child product named Room has been added beneath the Villa product. Furthermore, when configuring a villa, the correct set of room configurations (such as "Kitchen1" or "Living1") is automatically generated via dynamic instances as soon as the user selects a villa model.
To manage the surface selections for each room, the CPQ architect has created the following parameters:
Parameters |
Description |
|---|---|
Model (Lookup) |
Selected at the Villa level but also available for rules at the Room level via parameter propagation. Values: "VillaA", "VillaB", ... |
StoredModel (String) |
Placed on a hidden tab and used to detect when the user has selected a different villa model, which requires the room data to be retrieved again. |
Room (Lookup) |
Identifies the type of room and is set automatically when room configurations are generated using dynamic instances. Values: "Kitchen1", "Living1", ... |
StoredRoom (String) |
Placed on a hidden tab and used to detect changes in the room type that the active room configuration represents. |
FloorM2 (Double) |
Floor area |
Floor (Lookup) |
Floor covering |
WallsM2 (Double) |
Total wall area |
Walls (Lookup) |
Wall covering |
WallsOtherM2 (Double) |
Wall area covered in a different material |
WallsOther (Lookup) |
Wall covering in different material for part of the walls |
To pull the correct default data from the dictionary when a villa model is selected, the CPQ architect has created the assignment expression rule below:
Setting name |
Value |
|---|---|
Trigger continuously |
Checked |
Inclusion expression |
Model != StoredModel || Room != StoredRoom |
Parameter expression 1, sets the parameter StoredModel |
Model |
Parameter expression 2, sets the parameter StoredRoom |
Room |
Parameter expression 3, sets the parameter FloorM2 |
RoomData[Model+"."+Room].FloorM2 |
Parameter expression 4, sets the parameter Floor |
RoomData[Model+"."+Room].Floor |
Parameter expression 5, sets the parameter WallsM2 |
RoomData[Model+"."+Room].WallsM2 |
Parameter expression 6, sets the parameter Walls |
RoomData[Model+"."+Room].Walls |
Parameter expression 7, sets the parameter WallsOtherM2 |
RoomData[Model+"."+Room].WallsOtherM2 |
Parameter expression 8, sets the parameter WallsOther |
RoomData[Model+"."+Room].WallsOther |