Création d'une nouvelle expression de recherche
Les expressions de recherche effectuées par les services HCL Commerce utilisent un langage d'expression appelé langage de chemin d'accès XML ou, plus généralement, XPath. Si vous êtes nouveau sur XPath, vous devez vous familiariser avec la notation avant de procéder à cette tâche de personnalisation. HCL Commerce a également étendu la notation pour XPath afin de permettre le contrôle de l'affichage et de l'ordre des résultats, ainsi que la sélection des implémentations de commande de logique métier.
Pourquoi et quand exécuter cette tâche
Pour créer une nouvelle expression de recherche :
Procédure
- Créez une nouvelle expression de recherche XPath qui décrit la recherche à effectuer. Par exemple, si vous souhaitez créer un service où le client peut effectuer une recherche dans le catalogue en fonction d'une plage de prix, utilisez le XPath suivant pour effectuer la requête :
{_wcf.ap=$accessProfile$}/CatalogEntry[Price[StandardPrice[Price[(Price[@currency='$currency$'] and Price >= '$minPrice$') and (Price[@currency='$currency$'] and Price <= '$maxPrice$') ]]]]Remarque : L'expression XPath reprend la structure du schéma logique. Lors de la recherche sur des composants personnalisés, un modèle logique bien défini simplifie l'écriture de vos expressions XPath. - Dans votre projet de personnalisation, créez une nouvelle commande de service qui implémente l'interface de
FetchNounCmd. Cette commande exécute l'expression de recherche. Un exemple de nouvelle commande de service peut être téléchargé ; voir FetchCatalogEntryByPriceRangeTaskCmdImpl.java. Pour plus d'informations, consultez le pattern de conception pour l'implémentation de services Get.Remarque : Pour la personnalisation du sous-système membre, une commande d'extraction par défaut effectue toute l'interprétation du XPath pour chaque nom. Vous devez étendre cette commande pour créer de nouvelles expressions de recherche. Vous devez appeler super.performExecute() dans votre performExecute(), puis sélectionnez vos données en fonction de votre nouvelle requête XPath. Par exemple :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 } - Enregistrez votre nouvelle commande. Lorsque vous le faites, vous devez associer la clé d'expression de recherche XPath à votre nouvelle implémentation de commande d'extraction personnalisée avec une instruction SQL. Par exemple :
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 :- Le nom de l'interface contient le nom de la commande concaténé avec le XPath.
- Pour la personnalisation du sous-système membre, vous devez mettre à jour l'entrée CMDREG pour la commande d'extraction par défaut existante. En outre, aucun détail XPath n'est inclus dans la mise à jour SQL.
- Redémarrez les serveurs de test.