Skip to main content

How can I determine which product characteristics are compatible with each other?

In K3, the valid combinations of characteristics are defined in tables.

HandleFinishSeries
LongBirchSmart
CurvedBirchSmart
PushBirchSmart
LongAll ValuesSmart
CurvedAll ValuesSmart
All ValuesAll ValuesModern

This rule for a cabinet system specifies that

  • for the "Smart" series, any handle works with "Birch," while for all other finishes, only "Long" and "Curved" work
  • whereas for the "Modern" series, any combination is valid.

There can be any number of such tables, allowing for validation rules of any complexity.

Prerequisites​

  • You have created a configurator.
  • All necessary attributes and their values have been created.

Create a Rule​

The rule editor offers an intuitive user interface:

Three main buttons:

  • Edit Rule: For name, description, key, status (Active/Inactive), and advanced settings
  • Add Characteristic: Split button for characteristics or steps
  • Add Action: Access to all available actions, grouped by:
    • Product Structure: Hide characteristics/steps/values, complete configurator
    • Product Presentation: Component attributes, images, colors, materials, 3D models, information
    • Prices & Items: Add items to the bill of materials

Step-by-Step Instructions:​

1. Create a rule:

  • In the editor, click
    Loading...
    in the sidebar
  • Click
    Loading...
  • Enter a name and, optionally, a description
  • Enable "Validate" if desired
  • Click on
    Loading...

2. Edit Basic Rule Settings:

  • Click on
    Loading...
    to open a dialog and change the following settings:
    • Name and description
    • Key (unique identifier)
    • Status (Active/Inactive)
    • Enable/disable validity check

3. Add attribute and step columns:

  • Use
    Loading...
    to:
    • Add attributes: Select all attributes that should appear as columns in the table
    • Add steps: For step-by-step validity rules

4. Add action columns: Click on

Loading...
and select from the following categories:

Product Structure:

  • Hide features
  • Hide step
  • Hide values
  • Set configurator completion

Product Presentation:

  • Populate component features (requires selection of components)
  • Print images on surfaces (3D—requires material slots)
  • Display images (2D)
  • Change color (3D—requires material slots)
  • Replace surfaces (3D—requires material configuration)
  • Display information
  • Display error messages
  • Display 3D models

Prices & Items:

  • Add items to the bill of materials (requires assignment to characteristics)

5. Enter validity rules:

  • Fill in the table with valid combinations
  • Use “All Values” for non-specific columns
  • Issues with your rule system are displayed in the upper right corner

Note: Actions with additional settings automatically open a configuration dialog for further specification.

Edit Multiple Rule Rows Simultaneously​

Especially in large rules, many rows often need to be treated the same way. To do this, you can select multiple rows:

  • Select the rows using the checkboxes in the first column. A message appears at the top indicating how many rows are selected.
  • Now perform the action on one of the selected lines—it will then apply to the entire selection: delete, copy, enable/disable, move, or modify a cell.
  • An action performed on a row outside the selection affects only that row, as usual.

The selection feature is available in the full rule editor, but not in the embedded views of individual characteristics.

The same applies to the Wertetabelle of a characteristic.

How do I use numeric attributes?​

If you have a numeric input, such as “Length,” you can also specify the valid range by simply listing intervals.

LengthNumber of Columns
1-102
10-203
20-1004

This rule determines the number of columns based on the length.

This raises the following problem: What if the user enters the value “10”? In this case, both 2 and 3 would be valid for “Number of Columns.” To specify this more precisely, you can define exclusive interval boundaries:

LengthNumber of Columns
[1;10)2
[10;20]3
(20;100]4

Here, for both 10 and 20, only the value 3 would be valid for the number of columns.

If a numeric characteristic is used in a rule, this also limits the valid range of the input, in the example above to 1 through 100. This is an alternative to specifying a minimum and maximum in the

Loading...
tab of the characteristic.

If you do not want to do this, you can leave one side of an interval completely open:

LengthNumber of Columns
;10)2
[10;20]3
(20;4

What Are “Error Messages” (aka Blacklisting)?​

Normally, the rules list all valid combinations of characteristic values. This is also called whitelisting. If invalid values are not hidden and are then clicked, a standard message is displayed, explaining to the user which other attributes must be changed to make this value valid.

However, there are situations where you want to completely prevent the selection of a value and inform the user about this individually.

For example, in a modular furniture system where a maximum of 5 modules can be stacked on top of each other and you have a calculated attribute that counts the modules, you can display an “error message.” To do this, enter the attribute and the invalid value range in a table:

Modules
(5-

Then click on

Loading...
and select Display Error Messages. An "Action" column appears:

ModulesError Message
(5-Add Message

Now you can click on

Loading...
and enter a custom message for this situation. This can also be done in multiple languages; simply switch the Content-Sprache and enter the translation.

In this way, K3 supports not only whitelisting of validity rules but also blacklisting of certain value combinations.

Conflicts and Their Resolution​

The K3 Configurator is always in a valid state. This applies from the moment it is first loaded and remains true throughout the entire configuration process. If a user makes a change that would create a conflict, the automatic conflict resolution system intervenes.

When Do Conflicts Occur?​

A conflict arises when a user selects a value for a characteristic that is incompatible with the currently set values of other characteristics—that is, when no rule covers the new combination.

Example:

Suppose you have the following rule for a window:

SeriesMaterialColor
ModernWoodNatural
ModernWoodWhite
ClassicPlasticWhite

The user has selected "Series: Modern" and "Material: Wood." Now they try to select "Color: Black." This would create a conflict because no rule allows the combination "Modern + Wood + Black."

How does the configurator respond to a conflict?​

The configurator distinguishes between two situations:

1. Automatic adjustment (no dialog)​

If the features causing the conflict have not yet been intentionally selected by the user, the engine automatically adjusts them to a valid combination. The user does not see a dialog—the configuration simply remains valid.

Example: The user starts a new configuration and immediately selects “Color: White.” The engine automatically sets “Series: Modern” and “Material: Wood” without prompting the user.

2. Conflict Dialog (with Suggested Solution)​

If the user wants to change values that they have already intentionally set, the configurator displays a dialog with a suggested solution.

When is a feature considered “intentionally set”?

A feature is considered touched (intentionally set) if:

  • The user has changed it manually, OR
  • A configuration step has been completed (in which case all features in that step are considered touched)

In the dialog, the user sees:

  • Which feature they want to change
  • Which other features would also need to be changed
  • The specific new values suggested

The user can then decide:

  • ✅ Accept solution: The suggested changes are applied
  • ❌ Reject: The original configuration remains unchanged

How is the solution calculated?​

The engine uses an intelligent search algorithm (depth-first search with backtracking) to find the best possible solution:

Basic Principle: Change as Little as Possible​

The goal is always to preserve the user’s configuration as much as possible and to suggest only the minimum necessary changes.

Prioritization in the Solution Search

When searching, the RuleEngine always prioritizes attributes that the user has not yet actively changed. These so-called untouched attributes are adjusted first. Only if this does not result in a valid solution will features that the user has deliberately set be changed—and only then will a conflict dialog be displayed.

Solution-Finding Process​

  1. The modified attribute is set—it serves as the starting point and is treated as a fixed value.

  2. The engine identifies all affected attributes—that is, all attributes that appear in rules shared with the modified attribute.

  3. Attributes are checked in the optimal order:

    • Attributes on which others depend are processed first
    • Parent instances come before their child instances
    • At the same level: according to the display order configured in the backend
  4. Values are tested for each attribute:

    • First, the previous value is always tested
    • Alternatives are tested only if this value does not work
    • If a value results in a valid state, the process moves on to the next attribute
  5. Backtracking in case of dead ends:

    • If no valid value is found for a feature, the engine takes one step back
    • It tries the next alternative value for the previous feature
    • This process continues until a complete solution is found

Step-by-Step Search Range​

The engine begins the search in the narrowest reasonable range (e.g., within a product instance and its direct children). Only if no solution is possible there is the search range gradually expanded. Attributes outside the current range remain unchanged.

Example of Solution Finding:

Ausgangssituation:
- Serie: Modern (vom Benutzer gesetzt)
- Material: Holz (vom Benutzer gesetzt)
- Farbe: Natur (automatisch gesetzt)

Benutzer wählt: Material → Kunststoff

Lösungssuche:
1. Material = Kunststoff (gewählt, wird fixiert)
2. Serie = Modern probieren
→ Regel prüfen: Modern + Kunststoff + Natur? ❌ Nicht gültig
3. Farbe umstellen:
→ Farbe = Weiß probieren
→ Regel prüfen: Modern + Kunststoff + Weiß? ❌ Nicht gültig
4. Backtrack: Serie ändern
→ Serie = Classic probieren
→ Regel prüfen: Classic + Kunststoff + Weiß? ✅ Gültig!

Vorgeschlagene Lösung:
- Material: Kunststoff (wie gewünscht)
- Serie: Classic (geändert von Modern)
- Farbe: Weiß (geändert von Natur)

Safety Net for Complexity​

If the dependencies are so complex that no solution has been found after 200,000 iterations, the engine aborts and displays a corresponding message. This prevents endless calculations in the case of highly complex or contradictory rule systems.