SmartEdit将空字符串另存为空白字符串,这将使后备语言无法正常工作

2020-08-21 04:26发布

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

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


嗨,

当您在CMS项目上编辑"字符串类型"(本地化/未本地化)的属性时,空字符串值将存储为""(空字符串)而不是空值。 这意味着属性值不为null; 因此它将无法从后备语言中获取价值! 这不仅发生在自定义组件上,还发生在所有OOTB组件上。

如果您对Backoffice中的组件进行了一些更改并保存,则后备语言会按预期工作。 调试了SmartEdit(位于CMSFacade)发送的有效负载; 它确实包含应为 attribute:null

attribute:""

我可以在这里考虑几种解决方案:

  1. cmsContentItemTypePopulatorsMap ?的自定义填充器。 但是考虑到我需要查找所有String,String属性的集合并将它们设置为null的事实,我发现这是一个开销

  2. 扩展GenericEditor? 但是我找不到任何文档可以使它更容易理解:-(.。我认为确保空字符串作为最佳解决方案发送为null,而不必在后端执行太多逻辑, 就像其他后台系统如何工作

感谢任何帮助/输入。

hybris版本:1811.1

谢谢

最好的问候, 珊

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

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


嗨,

当您在CMS项目上编辑"字符串类型"(本地化/未本地化)的属性时,空字符串值将存储为""(空字符串)而不是空值。 这意味着属性值不为null; 因此它将无法从后备语言中获取价值! 这不仅发生在自定义组件上,还发生在所有OOTB组件上。

如果您对Backoffice中的组件进行了一些更改并保存,则后备语言会按预期工作。 调试了SmartEdit(位于CMSFacade)发送的有效负载; 它确实包含应为 attribute:null

attribute:""

我可以在这里考虑几种解决方案:

  1. cmsContentItemTypePopulatorsMap ?的自定义填充器。 但是考虑到我需要查找所有String,String属性的集合并将它们设置为null的事实,我发现这是一个开销

  2. 扩展GenericEditor? 但是我找不到任何文档可以使它更容易理解:-(.。我认为确保空字符串作为最佳解决方案发送为null,而不必在后端执行太多逻辑, 就像其他后台系统如何工作

感谢任何帮助/输入。

hybris版本:1811.1

谢谢

最好的问候, 珊

付费偷看设置
发送
3条回答
我是小鹏鹏啊
1楼 · 2020-08-21 04:48.采纳回答

嗨,

实施一种解决方案,因为杂音识别为错误。 实际上不知道何时以及是否修复它。 杂种的官方提议的解决方法是

"而不是创建自定义填充器并验证所有属性,然后查找所有String(就像提到的解决方案一样,在调试过程中,我在DefaultCMSItemConverter类-> transformLocalizedValue()方法[第484行]上找到了对'value'的验证) 如果为空,则将其设置为null(利用该迭代而不是添加另一个迭代),并且将其保存为null,因此您可以尝试扩展DefaultCMSItemConverter。"

最诚挚的问候,比约恩(Björn)

哎,真难
2楼-- · 2020-08-21 04:59

在后台更新产品说明时发现了类似的问题。 可能是由于编辑器。 有什么建议吗?

三十六小时_GS
3楼-- · 2020-08-21 04:59

嗨,另一种可能性是像

一样覆盖DefaultLocalizedPopulator
 @Override

 公共无效填充(最终BiConsumer 使用者,最终Function 函数)
{
Set 可读Languages = getCmsUserService()。getReadableLanguagesForCurrentUser();
getAllLanguages ()
.filter(language->可读Languages.contains(language.getIsocode()))
.map(language-> getCommonI18NService()。getLocaleForIsoCode(language.getIsocode()))
.forEach( 区域设置-> {
T值= function.apply(locale); //不要保存会破坏语言回退机制的空字符串 if(String && StringUtils.isEmpty((String value)的值instanceof)){
value = null;
}

Consumer.accept(locale,value);
}); < br>}

一周热门 更多>