技术文章
SAP Commerce |启用SmartEdit中布尔字段的默认值
简介
通用编辑器控件中编辑组件SmartEdit接口。OOTB SmartEdit不支持在创建新组件时显示defaultValue。
但OOTBBooleanComponent(AngularJS)有处理默认值的能力,并期望从CMS结构API得到以下JSON响应
{cmsStructureType:“Boolean”,限定符:“someQualifier”,i18nKey:“i18nkeyForSomeQualifier”,本地化:false, defaultValue: true}
在这里,我们可以看到这个BooleanComponent也接受defaultValue,并可以相应地显示切换按钮ON/OFF。
本博客将基于SAP Commerce 1811。
问题
一些CMS组件的布尔类型字段有默认值true/false(在items.xml中定义),但无论何时我们在SmartEdit中创建这些CMS组件,我们都不能看到切换按钮ON/OFF根据它们的defaultValue。
例如,所有CMS组件都有可见的布尔字段,默认为True,但在SmartEdit中,每当我们创建任何组件时,我们都不能看到默认的可见开关ON。
虽然BooleanComponent支持defaultValue,但OOTBCMS结构API没有定义defaultValue字段。
我们可以通过扩展来修改它的元数据ComponentTypeAttributeData带有defaultValue的DTO。
定制
自定义可以在任何扩展中完成,但我建议创建一个自定义的SmartEdit扩展,并将所有类型的SmartEdit自定义放在该扩展中。
- 让我们首先创建一个自定义的SmartEdit扩展。请按照这些链接设置和创建一个自定义扩展。trainingsmartedit。
- 扩展CMS结构API。打开trainingsmartedit-beans.xml,用defaultValue扩展ComponentTypeAttributeData
< bean类= " de.hybris.platform.cmsfacades.data。ComponentTypeAttributeData">
- 由于我们仅为布尔类型添加了defaultValue,因此需要定义一个谓词,该谓词将允许仅为布尔类型字段填充其值。
- 创建BooleanDefaultValueStructureTypeAttributePredicate在trainingsmartedit -> SRC文件夹下的相关包。这将确保当属性有默认值并且它是布尔类型时,只在结构API中填充defaultValue。
公共类BooleanDefaultValueStructureTypeAttributePredicate实现Predicate{@覆盖公共布尔测试(最终的AttributeDescriptorModel attributeDescriptor) {return attributeDescriptor. getdefaultvalue () != null && attributeDescriptor. getdefaultvalue()实例布尔;}}
- 创建填充器BooleanDefaultValueComponentTypeAttributePopulator在ComponentTypeAttributeData中填充defaultValue
公共类BooleanDefaultValueComponentTypeAttributePopulator实现Populator{@覆盖公共void populate(最终的AttributeDescriptorModel源,最终的ComponentTypeAttributeData目标)抛出ConversionException {if (source. getdefaultvalue()实例布尔){target. setdefaultvalue((布尔)source. getdefaultvalue ());}}}
- 将这个填充器添加到cmsAttributePredicatePopulatorListMap中。打开trainingsmartedit-sprint.xml并添加下面的bean定义
- 最后,我们需要扩展来自OCC端的ComponentTypeAttributeData。如果我们没有自定义的occ扩展,我们可以将它添加到trainingsmartedit-beans.xml。
< bean类= " de.hybris.platform.cmswebservices.data。ComponentTypeAttributeData">
- OCC字段级映射已经在cmswebservices/web/webroot/ web - inf /config/ to- Mapping -spring.xml中定义了OOTB
<属性名="levelMapping">
构建步骤
做所有和服务器启动。一旦服务器启动,我们可以通过添加任何CMS组件来检入SmartEdit, defaultValue应该在CMS结构API中填充布尔类型字段,其余的布尔组件将完成他们的工作。
{"cmsStructureType": "Boolean", "collection": false, "defaultValue": true, "可编辑":true, "i18nKey": "type.abstractcmscomponent.visible.name", " localization ": false, " pagaged ": false, "qualifier": "visible", "required": false}
结论
这也是我们处理其他类型字段的方法,但是对于其他类型,我们需要扩展angular组件的默认值功能。
第一个留下评论
你一定是登录评论:评论或回复一篇文章