规范属性转换说明表达式覆盖

2020-09-11 04:23发布

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

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


sapcustomer原始xml中CanonicalPartySales的OOTB映射如下。

   CanonicalPartySales 
                  <属性>
                      <属性>
                           partyId 
                          <转换>
                              <转换>
                                   RawDEBMAS 
                                  #root.getField('E1KNA1M-KUNNR')+'_KNA1'
                              
                          
                      
                      <属性>

  

现在,我需要在自定义扩展程序中使用特殊表达式,如下所示。

   CanonicalPartySales 
              <属性>
                  <属性>
                       partyId 
                      <转换>
                          
                               RawDEBMAS 
                               {'FF','ZZ','YY','XX'}。contains(#root.getField('E1KNA1M-E1KN ***-E1KNXXX-PAR **'))吗?  #root.getField('E1KNA1M-KUN **')+'_KNA1':null 
                          
                      
                  

  

但是当我使用datahub.autoInitMode = create-drop进行datahub retsart时,在服务器启动期间不会出错,但是使用datahub.autoInitMode = create或datahub.autoInitMode = ignore时则会收到以下错误。

com.hybris.datahub.validation.ValidationException:[ValidationFailure {FATAL,rawAttribute:"无法修改规范属性转换CanonicalPartySales,partyId,RawDEBMAS"}},位于com.hybris.datahub.validation.AbstractValidator.validate( AbstractValidator.java:32)〜[datahub-service-6.3.0.7-RC1.jar:6.3.0.7-RC1] at com.hybris.datahub.facade.metadata.DefaultTransformationItemClassFacade.createNewAttribute(DefaultTransformationItemClassFacade.java:42)〜[datahub -service-6.3.0.7-RC1.jar:6.3.0.7-RC1]

在检查CanonicalTransformationDataValidator中的代码时,将完成以下验证。

 私有void validateThatTransformationCanBeCreated(ValidationContext ctx,CanonicalTransformationData数据,
              已存在CanonicalAttributeDefinition){
          如果(!data.isDisabled()&&!data.isOverride()){
              this.validateTransformationDoesNotAlreadyExistForAttribute(数据,ctx,现有);
          }
 
      }
 
      私有无效validateTransformationDoesNotAlreadyExistForAttribute(CanonicalTransformationData dataObject,
              ValidationContext上下文,CanonicalAttributeDefinition存在){
          if(existing!= null){
              如果(this.isTransformationBeingUpdated(existing,dataObject)){
                  context.addFailure(new ValidationFailure(" rawAttribute",
                          "无法修改规范属性转换" + dataObject.getItemType()+","
                                  + dataObject.getName()+"," + dataObject.getRawItemType(),
                          ValidationFailureType.FATAL));
              }其他{
                  context.addFailure(new ValidationFailure(" rawAttribute",
                          "规范属性转换已存在:" + dataObject.getItemType()+","
                                  + dataObject.getName()+"," + dataObject.getRawItemType(),
                          ValidationFailureType.EXISTING_ITEM));
              }
          }
  私有布尔值isTransformationBeingUpdated(CanonicalAttributeDefinition currDef,
              CanonicalTransformationData newDef){
          字符串newTransformationExpression = SpelUtils.resolveTransformationExpression(newDef.getExpression(),
                  newDef.isSpel());
          字符串oldTransformationExpression = currDef.getReferenceAttribute();
          return!Objects.equal(oldTransformationExpression,newTransformationExpression);
      }



  

因此,每次如果属性in未被禁用(即isDisabled为false)且override为false,则它将进入循环检查是否存在具有新转换的SPEL转换。 如果两者都匹配,则规范属性转换已经存在:抛出了消息,否则引发了"规范属性转换无法修改"。

有人可以确认spEL转换不能被忽略吗? 如果可以改写,那怎么办?

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

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


sapcustomer原始xml中CanonicalPartySales的OOTB映射如下。

   CanonicalPartySales 
                  <属性>
                      <属性>
                           partyId 
                          <转换>
                              <转换>
                                   RawDEBMAS 
                                  #root.getField('E1KNA1M-KUNNR')+'_KNA1'
                              
                          
                      
                      <属性>

  

现在,我需要在自定义扩展程序中使用特殊表达式,如下所示。

   CanonicalPartySales 
              <属性>
                  <属性>
                       partyId 
                      <转换>
                          
                               RawDEBMAS 
                               {'FF','ZZ','YY','XX'}。contains(#root.getField('E1KNA1M-E1KN ***-E1KNXXX-PAR **'))吗?  #root.getField('E1KNA1M-KUN **')+'_KNA1':null 
                          
                      
                  

  

但是当我使用datahub.autoInitMode = create-drop进行datahub retsart时,在服务器启动期间不会出错,但是使用datahub.autoInitMode = create或datahub.autoInitMode = ignore时则会收到以下错误。

com.hybris.datahub.validation.ValidationException:[ValidationFailure {FATAL,rawAttribute:"无法修改规范属性转换CanonicalPartySales,partyId,RawDEBMAS"}},位于com.hybris.datahub.validation.AbstractValidator.validate( AbstractValidator.java:32)〜[datahub-service-6.3.0.7-RC1.jar:6.3.0.7-RC1] at com.hybris.datahub.facade.metadata.DefaultTransformationItemClassFacade.createNewAttribute(DefaultTransformationItemClassFacade.java:42)〜[datahub -service-6.3.0.7-RC1.jar:6.3.0.7-RC1]

在检查CanonicalTransformationDataValidator中的代码时,将完成以下验证。

 私有void validateThatTransformationCanBeCreated(ValidationContext ctx,CanonicalTransformationData数据,
              已存在CanonicalAttributeDefinition){
          如果(!data.isDisabled()&&!data.isOverride()){
              this.validateTransformationDoesNotAlreadyExistForAttribute(数据,ctx,现有);
          }
 
      }
 
      私有无效validateTransformationDoesNotAlreadyExistForAttribute(CanonicalTransformationData dataObject,
              ValidationContext上下文,CanonicalAttributeDefinition存在){
          if(existing!= null){
              如果(this.isTransformationBeingUpdated(existing,dataObject)){
                  context.addFailure(new ValidationFailure(" rawAttribute",
                          "无法修改规范属性转换" + dataObject.getItemType()+","
                                  + dataObject.getName()+"," + dataObject.getRawItemType(),
                          ValidationFailureType.FATAL));
              }其他{
                  context.addFailure(new ValidationFailure(" rawAttribute",
                          "规范属性转换已存在:" + dataObject.getItemType()+","
                                  + dataObject.getName()+"," + dataObject.getRawItemType(),
                          ValidationFailureType.EXISTING_ITEM));
              }
          }
  私有布尔值isTransformationBeingUpdated(CanonicalAttributeDefinition currDef,
              CanonicalTransformationData newDef){
          字符串newTransformationExpression = SpelUtils.resolveTransformationExpression(newDef.getExpression(),
                  newDef.isSpel());
          字符串oldTransformationExpression = currDef.getReferenceAttribute();
          return!Objects.equal(oldTransformationExpression,newTransformationExpression);
      }



  

因此,每次如果属性in未被禁用(即isDisabled为false)且override为false,则它将进入循环检查是否存在具有新转换的SPEL转换。 如果两者都匹配,则规范属性转换已经存在:抛出了消息,否则引发了"规范属性转换无法修改"。

有人可以确认spEL转换不能被忽略吗? 如果可以改写,那怎么办?

付费偷看设置
发送
5条回答
Alawn_Xu
1楼-- · 2020-09-11 05:11

嗨,这听起来像是个错误。 我继续前进并与团队记录下来。 您能否提供以下详细信息?

    您使用的
  • Data Hub版本

  • 在看到异常后扩展是否无法加载,还是记录了异常但扩展仍可以正确加载?

spaceman01
2楼-- · 2020-09-11 04:50

是否有更新? 我们在数据库模式中进行了检查,相应的旧spel属性Transformation已停用,而新的spel属性Transformation已启用。 并且也交叉验证了功能,新表达式被选中。 不确定该消息是否是令人困惑的消息,因为仍然会使用有效的拼写表达并将其与新的表达比较。

haha101010
3楼-- · 2020-09-11 05:09

您好,我们检查了数据库模式,相应的旧spel属性Transformation是不活动的,而我们的新spel属性Transformation是活动的。 并且也交叉验证了功能,新表达式被选中。 不确定该消息是否是令人困惑的消息,因为仍然会使用有效的spel表达式并将其与新表达式进行比较。


空代码
4楼-- · 2020-09-11 05:05

嗨,由于这不是功能错误,因此已被标记为无法修复。 您可以简单地忽略日志中的异常,而知道转换表达式的值已被正确覆盖。

Climb_Ma
5楼-- · 2020-09-11 04:45

您好,对此有任何更新吗? 我们在Datahub 6.3.0.0中也遇到了同样的问题。

是否有错误报告或解决方法? 哪个版本可以解决此问题(假设它已全部解决)?

一周热门 更多>