The class for the ContextValueRetriever
component is atg.commerce.util.ContextValueRetriever
, which holds most of the logic for determining which catalog to assign to each user. It performs a parallel function for price lists – see PriceListManager for more information. It has one property, useProfile
, which is a boolean that defaults to false. The main method, retrieveValue
, goes through the following steps. The method does not continue to the next step if it finds a non-null value.
It calls the
shouldUseProfile
method (see below). If this method returns true, it retrieves the requested property from the profile.If a site was provided, it retrieves the requested property from the site. See Assigning Price Lists and Catalogs in a Multisite Configuration for more information.
If ContextValueRetriever
returns null, CustomCatalogTools.determineCatalog
picks up the default catalog and returns that to the CatalogProfilePropertySetter
.
The out-of-the-box implementation of the shouldUseProfile
method simply returns the value of the useProfile
property. By default this property is set to false, which is appropriate for most multisite environments. The false value means that anything that might already be set in the profile is ignored, and values are retrieved instead from the current site or the global (CatalogTools
) default. If you assign catalogs or price lists via your own pipeline servlet or a scenario, set useProfile
to true to prevent your profile settings from being overridden with the global defaults.
If your business requires different choices for different customers, you can override shouldUseProfile
. For example, assume some special customers (for example employees and sales reps) have values pre-set in their profiles, while most customers should get site defaults. The shouldUseProfile
method can look at any profile property to decide if a customer is special or not and return true for the special customers and false for everyone else. In addition, if you want to add another source for catalogs or price lists, beyond profiles and sites, you can override the retrieveValue
method.
Note that Oracle ATG Web Commerce provides a single component that handles both catalogs and price lists. This configuration assumes you want to apply the same logic for both types of values, which is common. If you want to apply different logic for catalogs and price lists, you can configure a second Nucleus instance of the ContextValueRetriever
component, change its configuration or implementation class, and reconfigure either CatalogTools
or PriceListManager
to refer to the new instance.