Skip to main content

Enabling Inventory index for storefront in Websphere Commerce


By default, Inventory Index is only meant for business users to use in CMC for Product Ranking and merchandising purpose. This document describes how to enable this OOTB SOLR Index for Store Front usage so that it can be used to get SKUs Inventory from SOLR Index instead of DB hits.

The implementation involves two steps:
  1. Enable OOTB Inventory Index
  2. Make it usable by Store Front Pages

Enable Inventory Index


This step is well described at Infocenter at Setting up and building the inventory index



Enable Inventory Index for Store Front pages


This involves following steps

  1. Define a Search resource Handler to accept Inventory fetch requests.
  2. SOLR Index Customization, if required
  3. Define a search Profile to expose Inventory Schema fields to Response
  4. Map SOLR schema fields to External Response fields
  5. Custom Expression Provider to get default fulfillment center Id.
  6. Create a new SOLR Search Post Processor to format the solr fields in Response ready format.

Inventory Search Resource Handler

A new search resource handler needs to be mapped with a unique path using which a REST service can be invoked from Store Front Pages..

Handler: XInventorySearchResourceHandler
Extends: AbstractSearchResourceHandler

Class level path annotation: @Path ("store/{storeId}/inventoryview")
Method level path annotation: @Path ("byCatentryId/{catentryId}")

@GET
@Path("byCatentryId/{catentryId}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response fetchInventoryStatusByCatalogEntryId(
        @QueryParam("responseFormat") String responseFormat,
        @PathParam("storeId") String storeId,
        @PathParam("catentryId") String catentryId,
        @QueryParam("searchProfile") String searchProfile) {
     
    Response result = null;
    SearchCriteria searchCriteria = null;

    try {
        searchCriteria = prepareSearchCriteria(storeId, null, "inventoryview",
            "store/10501/inventoryview/byCatentryId/{catentryId}", searchProfile);
         
        throwRestExceptionIfErrorsAreDetected();
        searchCriteria.setControlParameterValue(
                "_wcf.search.internal.optional.query",
                "catentry_id:" + catentryId);

        result = performSearch(searchCriteria);
    } catch (Exception e) {
        result = generateResponseFromRespData(searchCriteria, null, e);
    } // EndTryCatch

    LOGGER.debug("Exit");
    return result;

} //EndMethod

Search Profile for Inventory Index


<!-- Search Profile to get Inventory SOLR response for a given catentryId -->
<_config:profile indexName="Inventory" name="X_findInventoryByCatentryId">
    <_config:query>
        <_config:param name="maxRows" value="50" />
        <_config:param name="maxTimeAllowed" value="15000" />
         
        <!--Add Providers -->
         
        <!--Add Post Processors -->
    </_config:query>
    <_config:result>
        <_config:field name="catentry_id"/>
        <_config:field name="inv_strlocqty_*"/>
        <_config:field name="inv_inventoryflag_*"/>
    </_config:result>
</_config:profile>

Comments