Data Management Capabilities > Managing Part Structures > Developing Advanced Selection Logic for Configurable Modules > Examples and Best Practices for Advanced Selection Logic > Selecting Options for a Configurable Module > Selecting One Option from a Set of Several Options
  
Selecting One Option from a Set of Several Options
You may want to select a single option from a set of several possible options based on the user’s response. However, there may be so many options that a single case table with a column allocated for each option may be difficult to organize or maintain.
For example, a wooden table top might be available in a very large number of materials and finishes, such as Oak Veneer, Solid Oak, Solid Oak with Maple Trim, Maple Veneer, Solid Maple, Solid Maple with Oak Trim, Cherry Veneer, Solid Cherry, and Solid Cherry with Maple Trim.
To make this information more manageable, you can introduce an intermediary parameter to connect the case table with the boolean parameters that determine which optional subassembly should be included. With this approach, the user’s request is captured in an input parameter that is evaluated by a case table of valid options. The results, or output, of the case table is captured in a single parameter. Finally, the value for each boolean is determined by evaluating this intermediary parameter.
To select one option from a set of several options:
1. Create a configurable module.
2. Attach a child part for each of the relevant finishing options.
3. Add a string input parameter to the configurable module; for example, askFinish.
Define an appropriate prompt value for the string parameter.
Define a List Constraints for the string parameter with these values:
Oak Veneer
Solid Oak
Solid Oak with Maple Trim
4. Define a string non-input parameter that is used to match the user’s response to the correct subassembly; for example, pickFinish. This parameter operates as an intermediary between the case table and the boolean parameters.
5. Add a boolean non-input parameter to the configurable module for each of the relevant options. For example:
useOakVeneer — to represent the usage of the oak veneer material
useSolidOak — to represent the usage of the solid oak material
useSolidOakMaple — to represent the usage of the solid oak with maple trim material
6. Add a default expression to each boolean parameter that evaluates the intermediary parameter. For example:
pickFinish.equals(“OakVeneer”) — for the oak veneer boolean
pickFinish.equals(“SolidOak”) — for the solid oak boolean
pickFinish.equals(“SolidOakMaple”) — for the solid oak with maple trim boolean
7. Add the boolean parameter to the Inclusion Option of this configurable module for the relevant child part for each option, as follows:
useOakVeneer — for the oak veneer finish subassembly
useSolidOak — for the solid oak finish subassembly
useSolidOakMaple — for the solid oak with maple trim finish subassembly
8. Establish a case table constraint to map the user’s responses to the correct value of the intermediary parameter. For example, consider the case table constraint pickFinish.
askFinish
pickFinish
Oak Veneer
Oak Veneer
Solid Oak
Solid Oak
Solid Oak with Maple Trim
SolidOakMaple
Maple Veneer
Maple Veneer
Solid Maple
Solid Maple
Solid Maple with Oak Trim
SolidMapleOak
* 
For this approach to work properly, all values in the pickFinish column of the case table must be unique.
In this approach, after the user selects a particular value, such as Oak Veneer, the case table assigns the value OakVeneer to the parameter pickFinish. The boolean parameter useOakVeneer evaluates its default expression {pickFinish.equals(“OakVeneer”)} as true and the subassembly for the oak veneer is included in the variant product structure.