Hybris Backoffice中能否覆写ItemType的map type attribute键值?
如何在Hybris Backoffice中覆写Map类型属性的键值选项
当然可以实现,核心是通过自定义编辑器配置或扩展默认Map编辑器的数据源过滤逻辑,以下是具体步骤:
1. 定位Map属性的编辑器配置
在Backoffice的*-backoffice-config.xml文件中找到对应ItemType的Map属性配置,示例如下:
<context type="YourItemType" component="editor-area"> <editorArea:editorArea xmlns:editorArea="http://www.hybris.com/cockpitng/component/editorArea"> <editorArea:tab name="tab.general"> <editorArea:section name="section.attributes"> <editorArea:attribute qualifier="yourMapAttribute" editor="com.hybris.cockpitng.editor.defaultmap"/> </editorArea:section> </editorArea:tab> </editorArea:editorArea> </context>
2. 自定义键值的数据源过滤
针对Map的键(枚举类型场景),可通过配置editorParameter指定过滤逻辑,两种常用方式如下:
方式一:Groovy脚本快速过滤枚举值
修改属性配置,添加keyEditorParameters,用Groovy脚本筛选需要保留的枚举值:
<editorArea:attribute qualifier="yourMapAttribute" editor="com.hybris.cockpitng.editor.defaultmap"> <editorArea:editorParameters> <editorArea:parameter> <editorArea:name>keyEditorParameters</editorArea:name> <editorArea:value> <map> <entry key="enumValuesFilterScript" value="return enumValues.findAll { it.code in ['ENUM_VAL1', 'ENUM_VAL2', 'ENUM_VAL3'] }"/> </map> </editorArea:value> </editorArea:parameter> </editorArea:editorParameters> </editorArea:attribute>
将ENUM_VAL1等替换为你需要保留的枚举code,脚本会自动过滤掉其他枚举选项。
方式二:自定义Java处理器处理复杂逻辑
若过滤逻辑涉及复杂业务判断,可实现EnumValuesProvider接口自定义数据提供逻辑:
public class CustomEnumValuesProvider implements EnumValuesProvider { @Override public Collection<EnumValueModel> getEnumValues(EnumTypeModel enumType, Map<String, Object> context) { // 这里写入你的特定过滤逻辑,示例为保留指定code的枚举 return enumType.getValues().stream() .filter(enumValue -> Arrays.asList("ENUM_VAL1", "ENUM_VAL2", "ENUM_VAL3").contains(enumValue.getCode())) .collect(Collectors.toList()); } }
在Spring配置文件中注册该bean:
<bean id="customEnumValuesProvider" class="com.yourpackage.CustomEnumValuesProvider"/>
最后在Backoffice配置中指定这个自定义provider:
<editorArea:attribute qualifier="yourMapAttribute" editor="com.hybris.cockpitng.editor.defaultmap"> <editorArea:editorParameters> <editorArea:parameter> <editorArea:name>keyEditorParameters</editorArea:name> <editorArea:value> <map> <entry key="enumValuesProvider" value="customEnumValuesProvider"/> </map> </editorArea:value> </editorArea:parameter> </editorArea:editorParameters> </editorArea:attribute>
3. 验证配置效果
重启Hybris服务器后,进入Backoffice编辑对应ItemType条目,点击Map属性的「添加条目」按钮,键的下拉选项就只会显示你筛选后的3个枚举值。
注:如果Map键是普通ItemType而非枚举,逻辑类似,只需替换为对应类型的数据源过滤方式(比如配置advancedSearch参数或自定义DataProvider)。
内容的提问来源于stack exchange,提问作者user1234SI.
相关产品推荐
相关产品推荐

