如何覆盖OOB canonicalItem CanonicalPricingSalesAreaMapping?

2020-09-13 18:34发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我只想覆盖OOB can...

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

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


嗨,

我只想覆盖OOB canonicalitem(CanonicalPricingSalesAreaMapping)属性(distributionchannel-true)。

我收到以下错误。

2018-06-26 01:22:24,547 [WARN] [c.h.d.s.s.i.DefaultItemResolver]对CanonicalPricingSalesAreaMapping的引用不完整。 com.hybris.datahub.composition.key.IncompleteKeyException:规范项CanonicalPricingSalesAreaMapping的属性distributionChannel的值为空白或null。 在com.hybris.datahub.composition.key.DefaultIntegrationKeyGenerator.calculateIntegrationKey(DefaultIntegrationKeyGenerator.java:75)处com.hybris.datahub.composition.key.AlphabeticalIntegrationKeyGenerationStrategy.generateKeyValue(AlphabeticalIntegrationKeyGenerationStrategy.java:37)处。 com.hybris.datahub.service.spel.impl.DefaultItemResolver.calculateIntegrationKey(DefaultItemResolver.java:96)上的.key.DefaultIntegrationKeyGenerator.calculateIntegrationKey(DefaultIntegrationKeyGenerator.java:56)在com.hybris.datahub.service.spel.impl.DefaultItemResolver com.hybris.datahub.service.spel.impl.DefaultItemResolver.resolveReference(DefaultItemResolver.java:76)上的.lookupReferencedItemByMatchingKey(DefaultItemResolver.java:88)在com.hybris.datahub.service.spel.impl.DefaultItemResolver.resolve(Default .java:57)com.hybris.datahub.service.spel.impl.ResolveMethodExecutor.execute(ResolveMethodExecutor.java:48)org.springframework.expression.spel.a org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.org)上的org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:86)处的st.MethodReference.getValueInternal(MethodReference.java:130) org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:87)处org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:121)处的java:51) com.hybris.datahub.service.spel.impl.CompilableSpelExpressionProcessor.transform(CompilableSpelExpressionProcessor.java:84)的.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:262),com.hybris.datahub.service.publication .impl.DefaultCanonicalToTargetItemConverterService.populateAttributeFromCanonicalItem(DefaultCanonicalToTargetItemConverterService.java:101)at com.hybris.datahub.service.publication.impl.DefaultCanonicalToTargetItemConverterService.lambda $ populateTargetItem $ 0(DefaultCanonic alToTargetItemConverterService.java:89)at java.util.stream.ForEachOps $ ForEachOp $ OfRef.accept(ForEachOps.java:184)at java.util.stream.ReferencePipeline $ 2 $ 1.accept(ReferencePipeline.java:175)at java.util.stream。 Java处的.HashMap $ KeySpliterator.forEachRemaining(HashMap.java:1548)在java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)在java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)在Java。 java.util.stream.ForEachOps $ ForEachOp $ OfRef.evaluateSequential(ForEachOps.java:174)处util.stream.ForEachOps $ ForEachOp.evaluateSequential(ForEachOps.java:151)在java.util.stream.AbstractPipeline.evaluate(AbstractPipeline。 com.hybris.datahub.service.publication.impl.DefaultCanonicalToTargetItemConverterService.populateTargetItem(DefaultCanonicalToTargetItemConverterService.java:89)处java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)处的Java:234) .service.publication.impl.DefaultCanonicalToTargetItemConverterService.convert(Def aultCanonicalToTargetItemConverterService.java:60)位于sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)位于sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIjava) .lang.reflect.Method.invoke(Method.java:498)

8条回答
Bunny_CDM
2020-09-13 19:04 .采纳回答

首先, CanonicalPricingSalesAreaMapping distributionChannel 属性是 primaryKey ,因此它不能为 null ,并且在搜索时 具有此规范项的关键属性,您不能给 null 值作为参数。 这是当您不使用IDoc发送分发渠道时收到错误的原因(Data Hub在找不到对应的段时将此值解释为 null )。

其次,您无法覆盖规范项属性的定义,当您尝试执行此操作时,Data Hub在启动过程中会出错。 但是您可以在自定义扩展中使用以下代码片段来覆盖此属性的转换,该代码片段依赖于所需的扩展(在本例中为" sappricing-raw"):

  
  规范价格
  <属性>
      <属性>
           distributionChannel 
          <转换>
              
                   RawCOND_A 
                  #root.getField('E1KOMG-VTWEG')是否为null?  #root.getField('E1KOMG-VTWEG'):'NDC'
              
          
      
  
  

  

此代码段覆盖 distributionChannel 属性,并且在SpEL表达式中,它检查要在其中发送分发渠道值的IDoc字段( E1KOMG-VTWEG ) 如果它不为null,则使用该值,否则使用值NDC(无分配信道的短路)。 现在,您需要在Hybris中为我们为空值(NDC)定义的分发渠道定义映射到适当的值。 之后,您将不会收到上述错误,因为您将空值替换为非空值(在这种情况下为NDC)。

希望这会有所帮助,
Mansur

一周热门 更多>

相关问答