Hybris项目:自定义属性和属性

时间:2018-06-07 19:31:12

标签: java sap backend hybris

在hybris类型的定义中,我很难理解这两个标签的含义:< custom-properties>和< attributes>

详细说明,第一个包含子标签< property>第二个包含子标签< attribute>。在“属性”标签中还有另一个标签< value>内容。

我所依据的示例代码取自hybris路径,即:

<itemtype
    code="News"
    autocreate="false"
    generate="false">
    <custom-properties>
        <property name="catalogItemType"><value>java.lang.Boolean.TRUE</value></property>
        <property name="catalogVersionAttributeQualifier"><value>"catalogVersion"</value></property>
        <property name="uniqueKeyAttributeQualifier"><value>"id"</value></property>
    </custom-properties>
    <attributes>
        <attribute qualifier="id" type="java.lang.String">
            <modifiers initial="true" optional="false" write="true"/>
            <persistence type="property"/>
            </attribute>
        <attribute qualifier="catalogVersion" type="CatalogVersion">
            <modifiers initial="true" optional="false" write="true"/>
            <persistence type="property"/>
        </attribute>
    </attributes>
</itemtype>

总体而言,这两个标签之间有什么区别&lt; custom-properties&gt;和&lt; attributes&gt;?

2 个答案:

答案 0 :(得分:3)

项目属性定义项目的状态。它们实际上是由于平台构建和更新过程而创建的db表的列(动态属性除外)。

自定义属性是某些已定义的属性,这些属性在类型系统定义中用于定义类型的某些属性。通常,如果您解释类型系统的元数据,则可以读取属性以实现所需的行为。它们可以在不同的级别定义

  1. 在项目类型级别 - 自定义属性用于定义类型的属性。这是您在问题正文中发布的示例。问题中的自定义类型
  2. <custom-properties>
            <property name="catalogItemType"><value>java.lang.Boolean.TRUE</value></property>
            <property name="catalogVersionAttributeQualifier"><value>"catalogVersion"</value></property>
            <property name="uniqueKeyAttributeQualifier"><value>"id"</value></property>
        </custom-properties>

    这些属性是在类型级别定义的 - 这些属性在类型级别提供目录感知。这些属性可以在运行时通过getProperty(String propertyName)方法检索这些项类型属性。还有其他示例。

    1. 关系级别,请参阅下面的代码段
    2. <relation code="User2Addresses" generate="true" localized="false" autocreate="true">
          <sourceElement type="User" cardinality="one" qualifier="owner">
              <modifiers read="true" write="true" search="true" optional="true" initial="false"/>
          </sourceElement>
          <targetElement type="Address" cardinality="many" qualifier="addresses">
              <modifiers read="true" write="true" search="true" optional="true" partof="true"/>
              <custom-properties>
                  <property name="condition.query">
                      <value>"{original} is null"</value>
                  </property>
              </custom-properties>
          </targetElement>
      </relation>

      该属性包含一个字符串,该字符串稍后会添加到为一对多或多对一关系生成的选择查询的“where”部分。

      1. 订购属性 - 通过定义 ordering.attribute ,可以指定在从数据库中检索时将使用哪个属性来订购多方项目
      2. <relation code="AbstractOrder2AbstractOrderEntry" localized="false" generate="true" autocreate="true">
        			<sourceElement type="AbstractOrder" qualifier="order" cardinality="one">
        				<modifiers read="true" write="true" search="true" optional="true" />
        				<custom-properties>
        					<property name="ordering.attribute">
        						<value>"entryNumber"</value>
        					</property>
        				</custom-properties>
        			</sourceElement>
        			<targetElement type="AbstractOrderEntry" qualifier="entries" cardinality="many" collectiontype="list" ordered="false" >
        				<modifiers read="true" write="true" search="true" optional="true" partof="true" />
        			</targetElement>
        		</relation>

        1. 后台自定义属性 - 后台将允许显示任何类型的所有属性(开箱即用),但是有一些特殊的(比如说技术性)属性肯定不应该在UI中可见,或者至少应该只在UI中读取(无论什么他们拥有的访问权限)。对于那些非常罕见的情况,hybris引入了两个我们在扫描类型系统时解释的自定义属性
        2. <property name="readOnlyForUI">
               <value>Boolean.TRUE</value>
           </property>
           <property name="hiddenForUI">
               <value>Boolean.TRUE</value>
           </property>

          希望这有帮助!

答案 1 :(得分:2)

<custom-properties>
    <property name="catalogItemType">
        <value>java.lang.Boolean.TRUE</value>
    </property>
    <property name="catalogVersionAttributeQualifier">
        <value>"catalogVersion"</value>
    </property>
    <property name="uniqueKeyAttributeQualifier">
        <value>"code"</value>
    </property>
</custom-properties>

这些<custom-properties>用于将ItemType定义为目录感知。与产品类型一样。您可以参考this post了解更多详情。

<attribute>用于定义和配置表/项的列。

在SQL中,我可以说<custom-properties>用于表级配置(元数据),<attribute>用于定义和配置该表的列。