I have requirement like this in configurator. I have 2 BOM Models say, A and B. There are five same products in each BOM. My requirement is, i selected product A and added two of the five products through configurator. I selected product B and while i do configuration only the other 3 products should be present not all the five. How can we achive this.
If you are configuring BOM Models A and B on different order/quote lines, there is no way to enforce rules across lines. The only supported way to achieve what you desire with Configurator is for Model A and Model B to be Components of a parent BOM Model, let's call it Model C, so that you can put Model C on a sales/quote line, configure it, and add A and B to it during the Configurator session. In this scenario, you can have rules in Model C that will restrict the Option Class selections across the two child Models.
Hope this helps!
(I assume you're asking in the context of the scenario where Models A and B are configured on different order/quote lines. If this is not the case, let me know.)
It is *theoretically* possible to do what you want using a Configurator Extension. A CX can leverage the database connection Configurator has open at runtime to query any information in the database, which would include the details of other saved configurations on the order. However, from a practical standpoint it may not be advisable. In such a scenario, you naturally have to design your solution to accommodate every possible use case. So let's say you configure Model A on order line 1, and then configure Model B on order line 2, which, through its CX, is constrained based on selections made in Model A. Now what if you go back and reconfigure Model A, making a change that would invalidate something that had been selected in Model B? Model B is not going to get automatically changed to account for this modification. So your CX needs to not only be on Model A as well, but as part of its execution will need to programmatically revalidate every other configured line on the order.
What you eventually end up with is a really complex Configurator Extension that essentially acts as a secondary, "cross-line" configuration engine. Since it hard codes constraints, it's not really optimal from a maintenance standpoint, and as you implement additional Models that need to use it, it will likely prove not to be a very scalable solution.
A lot of trouble to go to when the alternative (having Models A and B be Components of a parent Model and writing a single rule between them) is so simple....
Thanks Eogan for the detailed explaination. My requirement is same as you mentioned, having two models on two quote lines. Option 1 is best compare to other as you told. We will try to convince this with our client.
One doubt, if five products are there in the model, then i have to write 5 rules for each product to achive the above functionality?
It is difficult to answer this question, as there are several different ways to accomplish the desired result. At the very least, it would seem you'll need a minimum of five relationships of some sort. Whether that is five Logic Rules, one for each product pair; or five Numeric Rules consuming from Resources corresponding to each product; or five Numeric Rules contributing to five Totals in combination with five Comparison Rules preventing those totals from exceeding a value of one; or a single Statement Rule with multiple statements; or some other manifestation, the exact number of rules will depend on how you design your solution.