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

2020-09-11 04:23发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) sapcustomer原始xm...

         点击此处--->   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条回答
spaceman01
2020-09-11 04:50

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

一周热门 更多>