Dynamically Show-Hide UI controls in Product Configurator

Sharad Surav has come back as he promised with the next post of showing and hiding thing dynamically using User Properties in product configurator. I hope everybody finds this post really useful


Dynamic User properties allows us to

  1. Show or Hide UI controls for product such as relationships, groups, products, tabs, attributes, linked items or resources.
  2. Make User Interface controls read-only
  3. Show or hide images, based on the choices that the user makes in Siebel Configurator.

Requirement: Based on the Product selected by the user, set of attributes should be hidden.

Scenario:

  • We have a root product “Test Product Import” with Attribute “Test Attribute”  Root Product has 3 Sub Products
    • Test Product Import 1
    • Test Product Import 2
    • Test Product Import 3
  • Test Attribute has values “None” and “1” to “6”

clip_image002[1]

  • When the user selects “Test Product Import 1”, some of the values from the “Test Attribute” should be hidden (ex. Values 1 , 2 and 3) as shown in the below screenshot.

clip_image004[1]

  • When the user selects “Test Product Import 2”, some other values from the “Test Attribute” should be hidden ( ex. Values 4 , 5 and 6) as shown in the below screenshot.

clip_image006[1]

Technical Details:

The above solution is achieved by using the Dynamic UI Properties on Root product using function cfgEval(), which returns value “Y” or “N” and using the function returned value in Attributes  to hide the values based on the selection made by the user.

Function cfgEval():  Use CfgEval() to access instance information inside Siebel Configurator, for example, to whether a user has set an attribute or selected a component product. Using the CfgEval() function to create simple expressions that reference session values such as the product quantity and attributes that the user selects.

Here are some examples of how to use this function:

  • Check whether the user has selected an attribute on the Root Product:
    • CfgEval($.[RootProduct]#1.xa[AttributeName].xf[Value])=’ABC’)
  • Check whether the user has selected an attribute on the Child Product:
    • CfgEval($.[RootProduct]#1.[RelationshipName]#[ChildProductName].xa[AttributeName].xf[Value])=’AB’)
  • Check the quantity of a child product:
    • CfgEval($.[RootProduct]#1.[RelationshipName]#[ChildProductName].xf[Quantity]) =‘2′)
  • To return an attribute value of a child product:
    • CfgEval($.[RootProduct]#1.[RelationshipName]#[ChildProductName].xa[AttributeName].xf[Value])
  • To return the quantity of a child product
    • CfgEval($.[RootProduct]#1.[RelationshipName]#[ChildProductName].xf[Quantity])

Now back to the solution. Create below mentioned UI Properties on Root Product or Attributes as mentioned in the table and the screenshot shown below

S.No Property Name Value Level
1 CfgUIStateModel Y Root Product
2 Expr1 CfgEval($.[Test Product Import]#1.[Relationship 1]#[Test Product Import 1].xf[Quantity]) =’1′ Root Product
3 Expr2 CfgEval($.[Test Product Import]#1.[Relationship 2]#[Test Product Import 2].xf[Quantity]) =’1′ Root Product
4 DynamicHide Expr1 Y Attribute
5 DynamicHide Expr2 Y Attribute

clip_image008[1]

 

 

 

clip_image010[1]

 

 

 

 

 

 

You will be able to see the behavior described above once you have completed the changes mentioned above

Note: cfgEval() is a very useful function and can be used to control dynamic behavior of Product/Attribute selection. Dynamic UI property can also be used to display set of products based on the attribute selected. The only difference will be in the Expression written on the Root product. To fetch the value of the attribute selected by the user, the expression will be

Expr1: CfgEval($.[Root Product Name]#1.xa[Attribute Name].xf[Value])=Attribute Value’ .

5 Responses to Dynamically Show-Hide UI controls in Product Configurator

  1. Neel, Sharad, that is definitely a good thing in Siebel 8 product configurator, and that is an excellent article to show the implementation.

    But the example you have taken doesn’t show its effectiveness, scenario you have chosen can be solved by Exclude rule and Excluded = y user property, CfgEval is specifically designed to completely hide the controls like attribute drop down or complete attribute section… or a relationship… 

    cheers!

    • Hi Tejeshwer,
      Thanks for the comments. I totally agree that the above example can be achieved by the  Constraints also. The benefit of using function CfgEval is that it will not hamper the performance of the Application to an extent as in case of Constraints. Also,Its very true that this implementation will be useful in scenarios where you have to hide the controls or the attributes completely. But this is also very useful in scenarios if the requirement is as below where you have to hide components based on Attribute Selection of Hiding attributes based on component selection.A telecom company offers Mobile Handsets of different Models. (Model A, Model B, Model C, Model D, Model E)The company offers Mobile Handsets on Purchase, Rental, Lease. which means the user can Opt for either Purchase or Rental or Lease Basis. The Handsets are grouped as follows:Model A & Model E: Only for Rental Model B: Only For leaseModel C & Model D: Only for Purchase.The company wants to display only specific models based on selection made by the user (Purchase or Rental or Lease) which means if the user wants to Opt for Purchase , only those Handsets should be visible which comes under Purchase group. If the user Opts for Rental, only those handsets models should be visible which comes under Rental group and so on. This can be achieved by creating attributes with Values Purchase, Rental and Lease. When the user enters the Product Configuration Screen, the first choice that he makes is selection of Mode (Purchase/Rental/Lease). Using CfgEval, we can restrict the display of Handsets based on User selection of the attributes and hence we can display only the required model of Handsets.

  2. Thanks…very good information. But i think this ui properties only supports in Siebel 8.1 .
    How to achieve the above functionolity in siebel 8.0 and below versions.

    • This is applicable to only 8.0.0.9 onward versions for 8.0.x
      and for 8.1.x, its available from 8.1.1.6 onwards. You can ask Oracle to provide ACRs.

  3. Hello friends,

    i need one help regarding the Siebel Product Configuration. I’ve just explained my problem below. kindly look into this and provide your valuable suggestion/comments.

    As-Is
    Tab- Services.
    There is a component (MNGD-1) with in “Managed Device” relationship.
    When user selects MNGD-1, he has to select the any value from attribute term which resides under MNGD-1.
    This Term attribute 5 values namely—Select Option,12,24,36,48.
    This is the current behavior.
    There is another tab called Grandfathered, to which we generally move the components that will not be offered in future but can support existing customer who already using these components.
    We usually create a product class for with attribute for MNGD-1 component and associate both.
    Requirement-
    Here the ask is to grandfather the term-12 alone, which means our Business will not be offering MNGD-1 with Term-12.
    They are asking us to move the MNGD-1, term-12 to grandfathered to support existing customers who already have this MNGD-1, term-12.
    So, we will have to add MNGD-1 in grandfathered tab and term-12
    There is no option to add one more product class to MNGD-1 in Siebel product catalog
    After this implementation, the product should be
    1.
    Tab-Services
    Relationship-Managed Device
    Component-MNGD-1
    Term-Select Option,24,36,48
    2.
    Tab-Grandfathered
    Relationship-Grandfathered Managed Device.
    Component-MNGD-1
    Term-Select Option,12

    Can someone help me how to achieve the above scenario using Siebel product configuration?

Leave a Reply

Contribute