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
- 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. - 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 }
- 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:- El nombre de la interfaz contiene el nombre del mandato concatenado con el XPath.
- 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.
- Reinicie los servidores de prueba.