如何在搜索和plp级别上查看B2BUnit的产品可见性?

2020-08-19 02:59发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


只希望搜索和plp上特定的b2bunit可见产品。

只想通过后台配置来完成。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


只希望搜索和plp上特定的b2bunit可见产品。

只想通过后台配置来完成。

付费偷看设置
发送
1条回答
clever101
1楼-- · 2020-08-19 03:38

您好,Rohan Luthra,

很遗憾,OOTB没有提供此功能。

如果您需要控制搜索页面的可见性,则需要进行一些自定义。

有几种方法可以实现这种功能。 例如:

1。 您需要在"产品"和"部门"之间创建一个关系(因为您想在后台管理它)。

示例代码(您可以更改部署代码或修饰符):

 <关系代码=" Product2PrincipalRelation" autocreate =" true" localized =" false">

    
    
       此主体可访问的产品
       <修饰符read =" true" write =" false" search =" true"可选=" true"/>
    
    
       允许访问此目录类别的主体
       <修饰符read =" true" write =" true" search =" true"可选=" true"/>
    
  

2。您需要在Solr中导出可以访问该产品的单位代码。

请注意,您还需要实现一个简单的ValueResolver才能从Unit检索代码。

下面是一个示例:

公共类PrincipalProductValueResolver扩展了AbstractValueResolver  {

 @Override
 受保护的void addFieldValues(最终InputDocument文档,最终IndexerBatchContext batchCtx,最终IndexedProperty indexedProperty,最终ProductModel产品,最终ValueResolverContext  valueResolverCtx)引发FieldValueProviderException {

 Set  allowedPrincipals = product.getAllowedPrincipals();
 对于(最终PrincipalModel主体:allowedPrincipals){
     document.addField(indexedProperty,principal.getUid(),valueResolverCtx.getFieldQualifier());
 }
 }} 

这是Solr的简单配置:

您需要将IndexedType更改为您的值。

 $ solrIndexedType = powertools产品类型
 INSERT_UPDATE SolrIndexedProperty;  solrIndexedType(identifier)[unique = true]; 名称[unique = true]; 类型(代码);  sortableType(code);  currency [default = false];  localized [default = false];  multiValue [default = false];  useForSpellchecking [default = false];  useForAutocomplete [default = false];  fieldValueProvider;  valueProviderParameter

 ;  $ solrIndexedType;  allowedPrincipals; 弦;  ;  ;  ; 真实;  ;  ;  PrincipalProductValueResolver; 

3。 然后,您应该按单位名称/代码收集产品。 (这意味着您需要为FacetSearchListener创建自定义实现,因为您需要在Solr查询中添加单位代码)。 示例:

公共类GroupRestrictionFacetSearchListener实现FacetSearchListener {
 私有静态最终字符串ALLOWED_PRINCIPALS_KEY =" allowedPrincipals";
 私有静态最终字符串FILTER_QUERY ="(%s:%s)";
 私有FieldNameTranslator fieldNameTranslator;
 私有B2BUnitService  b2bUnitService;
 私人UserService userService;

 @Override
 公共无效beforeSearch(FacetSearchContext上下文){
 UserModel currentUser = userService.getCurrentUser();
 如果(!(B2BCustomerModel的currentUser实例)){
 返回;
 }
 最后的B2BUnitModel currentB2BUnit = b2bUnitService.getParent(((B2BCustomerModel)currentUser));

 如果(currentB2BUnit == null){
 返回;
 }

 最终SearchQuery solrSearchQuery = context.getSearchQuery();

 最后的字符串allowedPrincipalsFieldName = getFieldNameTranslator()。translate(context,ALLOWED_PRINCIPALS_KEY);

 solrSearchQuery.addFilterRawQuery(String.format(FILTER_QUERY,allowedPrincipalsFieldName,currentB2BUnit.getUid()));
 }
 } 

此侦听器应分配给您的索引。 示例:

更新SolrFacetSearchConfig; 名称[unique = true]; 听众;
 ;  powertoolsIndex;  b2bGroupFilterListener; 

因此,您可以检索一组特定于特定单位的产品。

在此实现中,您将能够看到将哪些产品分配给BO中的单元。 示例:

在每种产品上,您都可以选择可以看到该产品的负责人。

有关示例实现的一些信息。 为什么我们使用PrincipalsModel而不是B2BUnitModel? 非常简单:将来,此功能可用于任何其他主体(客户,用户,用户组,单位等)。

最诚挚的问候,

伊戈尔

一周热门 更多>