如何通过使用Java代码从组件获取本地化的值

2020-09-10 13:51发布

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

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


专家,

我需要从模型中获取内容。 我已将查询编写如下:从{PostalContentComponent}中选择{content},其中{uid} ='AboutEgyptPostContentComponent'

我可以在hac和代码级别获得结果。

但是我需要获取在hac中而不是在代码级中进行查询的本地化值。 HAC查询是:从{PostalContentComponent}中选择{content [ar]},其中{uid} ='AboutEgyptPostContentComponent'

我遇到以下异常:原因:java.sql.SQLSyntaxErrorException:转换中的数据类型不兼容:从SQL类型VARCHAR到java.lang.Long,值:

请帮助您使用Java代码获取本地化值。

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

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


专家,

我需要从模型中获取内容。 我已将查询编写如下:从{PostalContentComponent}中选择{content},其中{uid} ='AboutEgyptPostContentComponent'

我可以在hac和代码级别获得结果。

但是我需要获取在hac中而不是在代码级中进行查询的本地化值。 HAC查询是:从{PostalContentComponent}中选择{content [ar]},其中{uid} ='AboutEgyptPostContentComponent'

我遇到以下异常:原因:java.sql.SQLSyntaxErrorException:转换中的数据类型不兼容:从SQL类型VARCHAR到java.lang.Long,值:

请帮助您使用Java代码获取本地化值。

付费偷看设置
发送
4条回答
小熊yu生菜
1楼 · 2020-09-10 14:15.采纳回答

只需在HAC中编写查询,然后单击SQL查询,您就会了解本地化属性在Hybris中的工作方式。

例如,以下是我正在获取产品代码

的查询
 从{SizeVariantProduct!}中选择{code},其中{code} ='617850'
  

其SQL查询转换为

 从sizevariantproduct item_t0中选择item_t0.p_code在哪里(item_t0.p_code ='617850')AND(item_t0.TypePkString =?)

  

现在,如果我搜索作为本地化属性的名称,我的flexi查询和sql查询将转换为 下列。 Flexi:

 从{SizeVariantProduct!}中选择{name},其中{code} ='617850'

  

SQL:

 从sizevariantproduct item_t0中选择lp_t0.p_name JOIN sizevariantproductlp lp_t0 ON item_t0.PK = lp_t0.ITEMPK AND lp_t0.LANGPK =? 在(item_t0.p_code ='617850')和(item_t0.TypePkString =?)

  

查看包含本地化属性的查询如何与表'sizevariantproductlp'联接在一起

因此,我认为您可以按照以下方式编写查询:

 从{PostalContentComponent}中选择{pk},其中{uid} ='AboutEgyptPostContentComponent'


  

此查询将返回PostalContentComponentModel,一旦获得模型,就可以通过将语言环境作为" AR"传递来获取内容

 //将CommonI18NService作为Spring bean注入
  语言环境语言环境= i18NService.getLocaleForIsocode('AR');
 
  PostalContentComponentModel model =//从上述查询中获取模型
 
  字符串内容= model.getContent(locale);
 
 

  
哎,真难
2楼-- · 2020-09-10 14:20

您好,Saurabh,

我可以通过传递" Locale"来获取本地化的内容。 感谢您的答复。

梦想连接
3楼-- · 2020-09-10 14:24

以防万一,如果我正确理解了该问题,则希望检索该组件的String内容,因此,在Java代码中,您需要明确指出:

 最终字符串q ="从{PostalContentComponent}中选择{content [ar]},{uid} ='AboutEgyptPostContentComponent'";
  final FlexibleSearchQuery fq =新的FlexibleSearchQuery(q);
  fq.setResultClassList(Collections.singletonList(String.class));
  最终List 结果= flexibleSearchService。 search(fq).getResult()

  

还有一种选择:从模型本身检索本地化内容:

 最终字符串q ="从{PostalContentComponent}中选择{pk},{uid} ='AboutEgyptPostContentComponent'";
  最终List 组件= flexibleSearchService。 search(q).getResult();
  final Locale arLocale =新的Locale(" ar");
  最终List 结果= components.stream()。map(compoment-> compoment.getContent(arLocale))
          .collect(Collectors.toList());
  
当学会了学习
4楼-- · 2020-09-10 14:08

您好,Sergii,

感谢您的回复。 工作正常

一周热门 更多>