Как ограничить с помощью гибкого поискового запроса в Hybris для одной таблицы, используя атрибут сессии? - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь использовать гибкий поиск с ограничением. У меня есть атрибут сеанса (? Session.userGroups) и я хочу фильтровать, используя этот список групп.

Я видел в документации SAP, как это сделать, если в данной таблице, которую вы пытаетесь фильтровать, содержится объект, по которому вы хотите фильтровать. Например {страна} IN (? Session.countries} . Где {страна} существует в таблице.

Но как бы я сделал что-то вроде фильтра по таблице стран напрямую?

Или в моем случае я хочу напрямую отфильтровать таблицу UserGroup.

Какое свойство я могу использовать. Может быть, {pk}, но атрибут session содержит сами объекты, а не только PK.

{pk} IN (? Session.usergroups} - не уверен, что это правильно

{ что здесь происходит } IN (? Session.usergroups}

1 Ответ

0 голосов
/ 11 мая 2018

Если вы сохраняете список объектов UserGroup в сеансе

Например:

Set<UserGroupModel> usergroups = userService.getAllUserGroupsForUser(user);
sessionService.setAttribute("userGroups", usergroups);

Теперь есть два пути:

Использование SearchRestriction / Personalization - (Ограничение поиска будет влиять на всюду по сайту для группы клиентов)

INSERT_UPDATE SearchRestriction;code[unique=true];name[lang=en];query;principal(UID);restrictedType(code);active;generate
;usergroup_restriction;Restrict UserGroups visibility;{item:PK} IN (?session.userGroups);customergroup;UserGroup;true;true;

Применить условие поиска непосредственно в FlexibleSearchQuery -

FlexibleSearchQuery ->

String queryString = "Select {PK} from {UserGroup} where {PK} in (?usergroups)"
final FlexibleSearchQuery query = new FlexibleSearchQuery(queryString);
query.addQueryParameter("usergroups", sessionService.getAttribute("userGroups"));
return flexibleSearchService.search(query);
...