Migrating storefront services

Any custom storefront pages that use any of the search-related CatalogNavigationView BOD services must be updated to use the corresponding new search server REST services.

For example, the following snippet is a getData BOD search service that is used to populate a catalog entry recommendations widget:

<wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogNavigationViewType" var="catalogNavigationView" 
expressionBuilder="getCatalogEntryViewDetailsByID" scope="request" varShowVerb="showCatalogNavigationView" 
maxItems="100" recordSetStartNumber="0" scope="request">
	<c:forEach var="marketingSpotData" items="${marketingSpotDatas.baseMarketingSpotActivityData}">
		<c:if test='${marketingSpotData.dataType eq "CatalogEntryId"}'>
			<wcf:param name="UniqueID" value="${marketingSpotData.uniqueID}"/>
		</c:if>
	</c:forEach>
	<wcf:contextData name="storeId" data="${storeId}" />
	<wcf:contextData name="catalogId" data="${catalogId}" />
	<wcf:param name="searchProfile" value="IBM_findCatalogEntryDetails_PriceMode"/>
</wcf:getData>
<c:set var="eSpotCatalogIdResults" value="${catalogNavigationView.catalogEntryView}"/>
The following snippet is the equivalent REST-based service:

<wcf:rest var="catalogNavigationView" url="${searchHostNamePath}${searchContextPath}/store/${WCParam.storeId}/productview/byIds" >
<c:forEach var="id" items="${catentryIdQueryList}">
	<wcf:param name="id" value="${id}"/>
</c:forEach>
<wcf:param name="langId" value="${langId}" />
<wcf:param name="currency" value="${env_currencyCode}" />
<wcf:param name="responseFormat" value="json" />
<wcf:param name="catalogId" value="${WCParam.catalogId}" />
<wcf:param name="profileName" value="IBM_findProductByIds_Summary" />
</wcf:rest>
<c:set var="eSpotCatalogIdResults" value="${catalogNavigationView.catalogEntryView}"/>

The response data is being formatted in a BOD-like dot notation response to minimize the changes that are required in the storefront. In some cases, the response is simplified and flattened to simpler name-value pairs, rather than using internal maps to group certain fields.

You can examine the JSON response by printing the response object by using the following code:

<wcf:json object="${catalogNavigationView}"/>
You can also invoke the REST service directly from the web browser or by using HTTPRequester or an equivalent client to validate you custom code:

http://searchServer:port/search/resources/store/1/productview/byId/10001?langId=-1&catalogId=10001¤cy=USD&responseFormat=json&pageSize=12&pageNumber=1 

For more information about the BOD to REST services mappings, see Mapping between HCL Commerce Search BOD services and REST services.

For more information about the HCL Commerce REST API for HCL Commerce Search, see the complete list of supported query parameters for the following search services:
  • search_product
  • search_category
  • search_site_content