If you are using Content Administration to develop catalogs, be aware that searches against catalogs that have not been deployed to production (preview mode) are performed slightly differently than searches against deployed catalogs. The two main differences are that in preview mode the following hold true:
The five preconfigured search components become instances of
atg.commerce.catalog.FilteringSearchFormHandler
The
/atg/commerce/catalog/RepositoryValues
component becomes an instance ofatg.commerce.catalog.FilteringCatalogPossibleValues
.
The following example demonstrates the different ways the two modes retrieve the same results.
In production mode: By default, the
SearchFormHandler
andCatalogPossibleValues
classes restrict the search results to the user’s current catalog (see Processing Searches). If a user does a keyword search for “red” in production mode, the query includes a “wherekeywordString
CONTAINS ‘red’” clause and theSearchFormHandler
adds another clause to make the query “wherekeywordString
CONTAINS ‘red’ andcatalogs
CONTAINS (the user’s current catalog)”. Therefore, the repository would only return items that exist in the user’s current catalog.In preview mode: The
catalogs
property of categories, products, and SKUs is derived and non-queryable. So theSearchFormHandler
cannot add the extra clause to narrow the search to only the user’s current catalog. Instead, the query is run without the extra clause and items not in the user’s current catalog may be returned. Before returning the result set,FilteringCatalogSearchFormHandler
then iterates through the results, and checks thecatalogs
property of each. Those items that do not contain the user’s current catalog among theircatalogs
are then removed from the list, and the “filtered” result set containing only items in the user’s current catalog is returned.