如何重新声明属性以更改其修饰符?

2020-09-16 13:45发布

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

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


嗨,

我们要使用以下定义和重新声明使某些属性可写(用于hmc中的更改)

  
 
                  <属性>
 
                      
                          <修饰符read =" true" write =" true"
                                     optional =" true"/>
                          
                      
                      
                          <修饰符read =" true" write =" true"
                                     optional =" false"/>
                          
                      
  ...

  

但是在构建时会抛出以下异常:

  [复制]将1个文件复制到C:\ hybris \ bin \ custom \ prj \ prjstorefront \ resources
  [ycodegenerator] 13:04:41,952 [main] INFO CodeGenerator-开始代码生成...
 
  建立失败
  C:\ hybris \ bin \ platform \ build.xml:24:执行此行时发生以下错误:
  C:\ hybris \ bin \ platform \ resources \ ant \ compiling.xml:80:exec时发生以下错误
  说这行:
  C:\ hybris \ bin \ platform \ resources \ ant \ antmacros.xml:700:exe时发生以下错误
  剪掉这条线:
  C:\ hybris \ bin \ platform \ resources \ ant \ antmacros.xml:703:java.lang.IllegalArgumentException:ca
  由于属性'Consignment.namedDeliveryDate(java.u)重复,因此未将名称空间((prjcore))合并到(())中
  til.Date):(((prjcore)):: YAttributeDescriptor [prjcore-items.xml:1424(AttributeTagListener)] [null]'vs'Consignme
  nt.namedDeliveryDate(java.util.Date):((basecommerce)):: YAttributeDescriptor [basecommerce-items.xml:858(AttributeTagListe
  ner)] [PROPERTY]'
          在de.hybris.bootstrap.typesystem.YNamespace.mergeNamespace(YNamespace.java:286)
          在de.hybris.bootstrap.typesystem.YTypeSystem.mergeNamespaces(YTypeSystem.java:86)
          在de.hybris.bootstrap.typesystem.YTypeSystem.finalizeTypeSystem(YTypeSystem.java:77)
          在de.hybris.bootstrap.typesystem.YTypeSystemLoader.finish(YTypeSystemLoader.java:583)
          在de.hybris.bootstrap.typesystem.YTypeSystemSource.readTypeSystem(YTypeSystemSource.java:125)
          在de.hybris.bootstrap.typesystem.YTypeSystemSource.getTypeSystem(YTypeSystemSource.java:55)
          在de.hybris.bootstrap.codegenerator.jalo.JaloClassGenerator.generateClasses(JaloClassGenerator.java:50)
          在de.hybris.bootstrap.codegenerator.CodeGenerator.generateJaloClasses(CodeGenerator.java:210)
          在de.hybris.bootstrap.codegenerator.CodeGenerator.generate(CodeGenerator.java:182)
          在de.hybris.bootstrap.codegenerator.CodeGenerator.generate(CodeGenerator.java:332)
          在de.hybris.ant.taskdefs.compiling.CodeGeneratorTask.execute(CodeGeneratorTask.java:31)
          在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
          在sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          在java.lang.reflect.Method.invoke(Method.java:606)
          在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          在org.apache.tools.ant.Task.perform(Task.java:348)
          在org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
          在net.sf.antcontrib.logic.IfTask.execute(IfTask.java:197)
          在sun.reflect.GeneratedMethodAccessor23.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          在java.lang.reflect.Method.invoke(Method.java:606)
          在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          在org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:154)
          在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
          在sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          在java.lang.reflect.Method.invoke(Method.java:606)
          在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          在org.apache.tools.ant.Task.perform(Task.java:348)
          在org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
          在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
          在sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          在java.lang.reflect.Method.invoke(Method.java:606)
          在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          在org.apache.tools.ant.Task.perform(Task.java:348)
          在org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:396)
          在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
          在sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

  

如果有一个简单的解决方案来完成这项工作,那将是很好的。

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

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


嗨,

我们要使用以下定义和重新声明使某些属性可写(用于hmc中的更改)

  
 
                  <属性>
 
                      
                          <修饰符read =" true" write =" true"
                                     optional =" true"/>
                          
                      
                      
                          <修饰符read =" true" write =" true"
                                     optional =" false"/>
                          
                      
  ...

  

但是在构建时会抛出以下异常:

  [复制]将1个文件复制到C:\ hybris \ bin \ custom \ prj \ prjstorefront \ resources
  [ycodegenerator] 13:04:41,952 [main] INFO CodeGenerator-开始代码生成...
 
  建立失败
  C:\ hybris \ bin \ platform \ build.xml:24:执行此行时发生以下错误:
  C:\ hybris \ bin \ platform \ resources \ ant \ compiling.xml:80:exec时发生以下错误
  说这行:
  C:\ hybris \ bin \ platform \ resources \ ant \ antmacros.xml:700:exe时发生以下错误
  剪掉这条线:
  C:\ hybris \ bin \ platform \ resources \ ant \ antmacros.xml:703:java.lang.IllegalArgumentException:ca
  由于属性'Consignment.namedDeliveryDate(java.u)重复,因此未将名称空间((prjcore))合并到(())中
  til.Date):(((prjcore)):: YAttributeDescriptor [prjcore-items.xml:1424(AttributeTagListener)] [null]'vs'Consignme
  nt.namedDeliveryDate(java.util.Date):((basecommerce)):: YAttributeDescriptor [basecommerce-items.xml:858(AttributeTagListe
  ner)] [PROPERTY]'
          在de.hybris.bootstrap.typesystem.YNamespace.mergeNamespace(YNamespace.java:286)
          在de.hybris.bootstrap.typesystem.YTypeSystem.mergeNamespaces(YTypeSystem.java:86)
          在de.hybris.bootstrap.typesystem.YTypeSystem.finalizeTypeSystem(YTypeSystem.java:77)
          在de.hybris.bootstrap.typesystem.YTypeSystemLoader.finish(YTypeSystemLoader.java:583)
          在de.hybris.bootstrap.typesystem.YTypeSystemSource.readTypeSystem(YTypeSystemSource.java:125)
          在de.hybris.bootstrap.typesystem.YTypeSystemSource.getTypeSystem(YTypeSystemSource.java:55)
          在de.hybris.bootstrap.codegenerator.jalo.JaloClassGenerator.generateClasses(JaloClassGenerator.java:50)
          在de.hybris.bootstrap.codegenerator.CodeGenerator.generateJaloClasses(CodeGenerator.java:210)
          在de.hybris.bootstrap.codegenerator.CodeGenerator.generate(CodeGenerator.java:182)
          在de.hybris.bootstrap.codegenerator.CodeGenerator.generate(CodeGenerator.java:332)
          在de.hybris.ant.taskdefs.compiling.CodeGeneratorTask.execute(CodeGeneratorTask.java:31)
          在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
          在sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          在java.lang.reflect.Method.invoke(Method.java:606)
          在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          在org.apache.tools.ant.Task.perform(Task.java:348)
          在org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
          在net.sf.antcontrib.logic.IfTask.execute(IfTask.java:197)
          在sun.reflect.GeneratedMethodAccessor23.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          在java.lang.reflect.Method.invoke(Method.java:606)
          在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          在org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:154)
          在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
          在sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          在java.lang.reflect.Method.invoke(Method.java:606)
          在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          在org.apache.tools.ant.Task.perform(Task.java:348)
          在org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
          在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
          在sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          在java.lang.reflect.Method.invoke(Method.java:606)
          在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
          在org.apache.tools.ant.Task.perform(Task.java:348)
          在org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:396)
          在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
          在sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)
          在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

  

如果有一个简单的解决方案来完成这项工作,那将是很好的。

付费偷看设置
发送
11条回答
大圣 - sap领域执行人,9年sap运营经验
1楼 · 2020-09-16 14:40.采纳回答

大家好!

我尝试在5.2混合环境中重现此内容。 是的,如Wiki链接所述 https://wiki.hybris。 com/display/release5/items.xml#items.xml-创建子类型并为子类型添加属性

redeclaring属性不能在基础项目类型上使用,只能在扩展项目类型上应用。

通过声明,我设法使" namedDeliveryDate"属性可编辑(我在HMC中创建了一个实例)

  
          
                <属性>
                   
                   <修饰符read =" true" write =" true"可选=" true"初始=" false"/>
                   
                  
               
          
  

  

注意:我修改了initial =" false"使其成为非初始属性。

  1. 必须在项目创建期间设置初始属性,稍后可以设置非初始值。 根据 https://wiki.hybris.com/display/release5/Type+System +文档"覆盖默认创建机制"部分。

  2. 也不要忘记在定义扩展项目类型的自定义扩展中添加extensioninfo.xml。 希望它有用。

亲切的问候

Lily

宇峰Kouji
2楼-- · 2020-09-16 14:44

它按预期工作。

谢谢Lily

一只江湖小虾
3楼-- · 2020-09-16 14:33

我们使用hybris 4.8.15并找到了解决此问题的解决方法:此外,您需要覆盖派生项的Jalo类中的setNamedDeliveryDate方法。

公共类DeliveryConsignment扩展了GeneratedDeliveryConsignment {/** * {@inheritDoc}。 修饰符initial已设置为false,尽管如此,类* {@link de.hybris.platform.ordersplitting.jalo.GeneratedConsignment}中的生成方法已将initial属性设置为true。 * * @请参见de.hybris.platform.ordersplitting.jalo.GeneratedConsignment#setNamedDeliveryDate(SessionContext,* java.util.Date)*/@Override protected void setNamedDeliveryDate(final SessionContext ctx,final Date value){super.setProperty(ctx, NAMEDDELIVERYDATE,值); }

}

南山jay
4楼-- · 2020-09-16 14:48

在示例中添加扩展关键字

  
        <属性>
           
           <修饰符read =" true" write =" true"可选=" true"/>
           
           
           
           <修饰符read =" true" write =" true"可选=" false"/>
           
           
  
梦想连接
5楼-- · 2020-09-16 14:42

redeclare =" true"可以按预期工作,当我们尝试在扩展OOTB类型的自定义类型中修改OOTB类型属性时。

示例:

  
        <属性>
           
           <修饰符read =" true" write =" true"可选=" true"/>
           
           
           
           <修饰符read =" true" write =" true"可选=" false"/>
           
   
    
  





  
小熊yu生菜
6楼-- · 2020-09-16 14:25

是否有上述问题的线索?

d56caomao
7楼-- · 2020-09-16 14:44

您真的尝试过吗?

因为使用hybris 5.1,即使您引入了子类型,它仍然不起作用:

  
       <属性>
           
               <修饰符read =" true" write =" true"初始=" false"/>
               
           
           
               <修饰符read =" true" write =" true"初始=" false"/>
               
           
       
   

  

更新平台并创建订单后,尝试编辑" CustomConsignment"的" namedDeliveryDate"时,仍然会出现异常:

由于以下错误,无法保存该项目:属性" namedDeliveryDate"不可更改

我认为这是因为" namedDeliveryDate"被定义为" initial",似乎无法重新声明" initial"。 也许某些类型系统专家可以在这里进行说明?

一周热门 更多>