2017-05-18 3 views
0

Ich versuche, einige Daten mit FlexibleSearchQuery zu bekommen, aber es reagiert leeres Ergebnis. Wenn ich diese Abfrage setze hac>Console>Flexible Search kann ich die Daten erhalten, die ich suche. Hier ist, wie ich Abfrage in Java-Datei schreibe.FlexibleSearchQuery Antwort keine Daten

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); 
} 

Hier ist, wie ich

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

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

suchen nennen Wenn ich es in der Konsole eingeben

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'}}) 

I

bekommen
PK 
8796093579265 
8796101804033 
8796100165633 
8796098428929 
8796093153281 
8796102361089 
8796097052673 
8796093808641 
8796093972481 
8796096823297 

Was mache ich falsch? Gibt es einen Unterschied Konsole Abfrage und String-Abfrage?

Antwort

1

Ich denke, dass das Problem in Ihrem Fall ist Restrections bezogen, per Definition: Einschränkungen Regeln von FlexibleSearch gehorchte sind die Suchergebnisse begrenzen lassen, je nachdem, welche Art gesucht wird und welche Benutzer zur Zeit in

angemeldet ist so versuchen, um die Sucheinschränkungen zu deaktivieren, bevor Sie Ihre flexible Suchanfrage

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 

in anderen Seite aufrufen, wenn Sie hac>Console>Flexible Search verwenden nehme ich an, dass Sie sich als Administrator einzuloggen, so dass alle Einschränkungen standardmäßig deaktiviert sind in Hybris flexible Suche

Sie können alle Wirkstoffe restrctions in HMC überprüfen, durch searchig den Typ: SearchRestriction, schauen die followinf Screenshot

enter image description here

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

0

Eine weitere Möglichkeit Einschränkung zu umgehen, ist sessionService zu verwenden, auszuführen

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

ich finde diese Lösung eleganter. :-)