2020-08-19 02:59发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
只希望搜索和plp上特定的b2bunit可见产品。
只想通过后台配置来完成。
您好,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? 非常简单:将来,此功能可用于任何其他主体(客户,用户,用户组,单位等)。
最诚挚的问候,
伊戈尔
最多设置5个标签!
您好,Rohan Luthra,
很遗憾,OOTB没有提供此功能。
如果您需要控制搜索页面的可见性,则需要进行一些自定义。
有几种方法可以实现这种功能。 例如:
1。 您需要在"产品"和"部门"之间创建一个关系(因为您想在后台管理它)。
示例代码(您可以更改部署代码或修饰符):
2。您需要在Solr中导出可以访问该产品的单位代码。
请注意,您还需要实现一个简单的ValueResolver才能从Unit检索代码。
下面是一个示例:
这是Solr的简单配置:
您需要将IndexedType更改为您的值。
3。 然后,您应该按单位名称/代码收集产品。 (这意味着您需要为FacetSearchListener创建自定义实现,因为您需要在Solr查询中添加单位代码)。 示例:
此侦听器应分配给您的索引。 示例:
因此,您可以检索一组特定于特定单位的产品。
在此实现中,您将能够看到将哪些产品分配给BO中的单元。 示例:
在每种产品上,您都可以选择可以看到该产品的负责人。
有关示例实现的一些信息。 为什么我们使用PrincipalsModel而不是B2BUnitModel? 非常简单:将来,此功能可用于任何其他主体(客户,用户,用户组,单位等)。
最诚挚的问候,
伊戈尔
一周热门 更多>