首页 > 解决方案 > 如何在 Hybris 中使用会话属性限制单个表的灵活搜索查询?

问题描述

我正在尝试使用有限制的灵活搜索。我有一个会话属性 (?session.userGroups) 并希望使用此组列表进行过滤。

如果您尝试过滤的给定表包含您要过滤的对象,我已经在 SAP 文档中看到了如何执行此操作。例如 {country} IN (?session.countries}。其中 {country} 存在于表中。

但是我将如何直接在国家/地区表上进行过滤。

或者在我的情况下,我想直接过滤 UserGroup 表。

我可以使用什么属性。认为可能是 {pk} 但会话属性包含对象本身而不仅仅是 PK。

{pk} IN (?session.usergroups} --不确定这是否正确

{这里发生了什么} IN (?session.usergroups}

标签: jakarta-eehybris

解决方案


假设您正在会话中保存用户组对象列表

例如 :

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 中应用搜索条件 -

灵活搜索查询 ->

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

推荐阅读