2017-05-18 5 views
0

J'essaie d'obtenir des données en utilisant FlexibleSearchQuery mais il répond résultat vide. Si je mets cette requête hac>Console>Flexible Search je peux obtenir les données que je cherche. Voici comment j'écris une requête dans un fichier java.FlexibleSearchQuery réponse aucune donnée

sb.append(" SELECT {p:pk} "); 
     sb.append(" FROM {" + ProductModel._TYPECODE + " AS p} "); 
     sb.append(" WHERE {p:" + ProductModel.PK + " } IN ({{"); 
     sb.append(" SELECT DISTINCT {pro:" + ProductModel.PK + "} "); 
     sb.append(" FROM {CategoryProductRelation AS cp},{" + ProductModel._TYPECODE + "! AS pro},{" + CategoryModel._TYPECODE 
       + " AS c}"); 
     sb.append(" WHERE {pro:" + ProductModel.PK + " } = {cp:target}"); 
     sb.append(" AND {c:" + CategoryModel.PK + " } = {cp:source}"); 
     sb.append(" AND {c:" + CategoryModel.CODE + " } !=?categoryCode }})"); 



args.put("categoryCode", categoryCode); 

if (args != null && !args.isEmpty()) 
{ 
      searchQuery.addQueryParameters(args); 
} 

Voici comment j'appelle la recherche

final FlexibleSearchQuery searchQuery = new FlexibleSearchQuery(sb.toString()); 

searchResult.getResult().size() >> retuns 0 

Si je tape dans la console

SELECT {p:pk} FROM { Product AS p} WHERE { p: pk } IN ({{ 

      SELECT DISTINCT {pro: PK } 

        FROM 

      {CategoryProductRelation AS cp}, 
      {Product AS pro}, 
      {Category as c} 

      WHERE {pro: PK} = {cp:target} 

      AND {c:PK} = {cp:source} 
      AND {c:code} != '0101'}}) 

Je reçois

PK 
8796093579265 
8796101804033 
8796100165633 
8796098428929 
8796093153281 
8796102361089 
8796097052673 
8796093808641 
8796093972481 
8796096823297 

Qu'est-ce que je fais mal? Existe-t-il une requête de console et une requête de chaîne différente?

Répondre

1

Je pense que le problème dans votre cas est lié à Restrections, par définition: Les restrictions sont les règles auxquelles obéit FlexibleSearch qui permettent de limiter les résultats de recherche en fonction du type est recherché et quel utilisateur actuellement connecté

si essayez de désactiver les restrictions de recherche avant d'appeler votre seach souple

import de.hybris.platform.search.restriction.SearchRestrictionService; 
... 
// Disable search restrictions 
searchRestrictionService.disableSearchRestrictions(); 
// some query goes here 

// Enable search restrictions 
searchRestrictionService.enableSearchRestrictions(); 
// some query goes here 

en revanche, lorsque vous utilisez hac>Console>Flexible Search je suppose que vous n'êtes pas connecté en tant qu'administrateur, de sorte que toutes les restrictions sont désactivées par défaut dans Hybris Recherche flexible

Vous pouvez vérifier tous les actif restrctions dans HMC, par searchig type: SearchRestriction, regardez la capture d'écran de followinf

enter image description here

voir: https://help.hybris.com/6.3.0/hcd/8c428f8286691014970ceee87aa01605.html

0

Une autre façon de contourner la restriction est d'utiliser sessionService pour exécuter

sessionService.executeInLocalView(new SessionExecutionBody() { @Override public void executeWithoutResult() { // do stuff } }, userService.getAdminUser());

Je trouve cette solution plus élégante. :-)