Crear una nueva expresión de búsqueda

Las expresiones de búsqueda realizadas por los servicios de HCL Commerce utilizan un lenguaje de expresiones denominado lenguaje XML Path o, más comunmente, XPath. Si es la primera vez que utiliza XPath, debe familiarizarse con su notación antes de continuar con esta tarea de personalización. HCL Commerce también ha ampliado la notación en XPath para permitir controlar la visualización y el orden de los resultados, así como la selección de implementaciones de mandatos de lógica de negocio.

Por qué y cuándo se efectúa esta tarea

Para crear una expresión de búsqueda nueva:

Procedimiento

  1. Cree una expresión de búsqueda XPath nueva que describa la búsqueda que desea realizar. Por ejemplo, si desea crear un servicio en el que el cliente pueda buscar en el catálogo según un rango de precio, utilice el XPath siguiente para realizar la consulta:
    
    {_wcf.ap=$accessProfile$}/CatalogEntry[Price[StandardPrice[Price[(Price[@currency='$currency$']
    and Price >= '$minPrice$')
    and (Price[@currency='$currency$'] and Price <= '$maxPrice$')
    ]]]]
    
    Nota: La expresión XPath coincide con la estructura del esquema lógico. Cuando se realiza la búsqueda en componentes personalizados, un modelo lógico bien definido facilita la escritura de sus expresiones XPath.
  2. En su proyecto de personalización, cree un nuevo mandato de servicio que implemente la interfaz FetchNounCmd. Este mandato realiza la expresión de búsqueda. Puede descargarse un ejemplo de un nuevo mandato de servicio; consulte FetchCatalogEntryByPriceRangeTaskCmdImpl.java. Consulte Patrón de diseño para la implementación del servicio Get para obtener más información.
    Nota: Para la personalización del subsistema de miembros, un mandato Fetch predeterminado realiza toda la interpretación del XPath para cada nombre. Debe ampliar este mandato para crear nuevas expresiones de búsqueda. Debe llamar a super.performExecute() en su performExecute() y, a continuación, seleccionar los datos de acuerdo con su nueva consulta XPath. Por ejemplo:
    
       public void performExecute() throws Exception {
                    // Member subsystem code example follows
    (additional code may precede this ...) 
    
                    SelectionCriteriaMapper selectionCriteria = new
    SelectionCriteriaMapper(getGet().getExpression());              
                    Map mapQueryParameters =
    selectionCriteria.getQueryParameters();
    
                    boolean bPersonFound = false;
    
                    // Check if search expression is our customized
    expression based on LogonID: 
    /Person[Credential[(LogonID='$logonID$')]]
                    
                    if (mapQueryParameters.get("LogonID") != null) {
    
                            // Add customized code to find Person by
    logon ID ...
    
                            bPersonFound = true;
    
                    }
    
                    // if Person was not found, call parent class for
    default expressions
                    if ( !bPersonFound) {
                            super.performExecute():
                    }
    
                    //Code example ends -- additional code may follow
    this 
            }
    
  3. Registre el nuevo mandato. Cuando lo haga, tendrá que asociar la clave de la expresión de búsqueda XPath a su nueva implementación del mandato Fetch personalizada con una sentencia SQL. Por ejemplo:
    
    insert into cmdreg (STOREENT_ID, INTERFACENAME, CLASSNAME,TARGET)
    VALUES 
    (0,'com.ibm.commerce.catalog.facade.server.commands.FetchCatalogEntryCmd+/CatalogEntry[Price[StandardPrice[Price[(Price<=
    and Price[@currency=]) 
    and (Price>= and Price[@currency=])]]]]',
    'com.mycompany.commerce.customization.catalog.FetchCatalogEntryByPriceRangeTaskCmdImpl',
    'Local');
    
    Notes:
    1. El nombre de la interfaz contiene el nombre del mandato concatenado con el XPath.
    2. Para la personalización del subsistema de miembros, debe actualizar la entrada CMDREG del mandato Fetch predeterminado existente. Además, no se incluyen detalles de XPath en la sentencia SQL update.
  4. Reinicie los servidores de prueba.