如何重新声明核心模型属性类型而不在 Hybris 中扩展它

Posted

技术标签:

【中文标题】如何重新声明核心模型属性类型而不在 Hybris 中扩展它【英文标题】:how to redeclare core model attribute type without extending it in Hybris 【发布时间】:2014-10-17 09:41:47 【问题描述】:

默认情况下,Hybtis 将 CreditCardType 作为强制属性。我想通过使用redeclare=true 使其成为可选(不使用新模型扩展它)。我想知道为什么它不更新CreditCardPaymentInfo 模型。我就是这样的

<itemtype code="CreditCardPaymentInfo" autocreate="false" generate="false" >
        <attributes>
            <attribute qualifier="type" type="CreditCardType" redeclare="true" autocreate="false" generate="true">
                <modifiers read="true" write="true" search="true" optional="true" />
                <persistence type="property"/>
            </attribute>
       </attributes>        
    </itemtype>

我的 ant 构建工作正常。但是每当我更新正在运行的系统时,Hybris 并没有使这个属性成为非强制性的。

如果我用我的自定义模型扩展它并重新声明它然后它可以工作,但这就是我不需要的。我只想让它成为可选而不扩展它。

我认为 Impex 也有可能,但我不知道怎么做。请帮忙。

【问题讨论】:

【参考方案1】:

您不能在不扩展类型的情况下重新声明属性。 重新声明的文档清楚地说明了这一点:

允许您从继承的类型重新定义属性定义。在 本质上,您可以使用不同类型的属性以及 与超类型不同的修饰符组合。

Impex 助您一臂之力。之后您可以使用 impex 更改属性修饰符。 放置以下 impex 脚本

update AttributeDescriptor;enclosingType(code)[unique=true];qualifier[unique=true];optional
;CreditCardPaymentInfo;type;true

&lt;your-extension&gt;/resources/impex/essentialdata-&lt;chosse-a-name&gt;.impex下。

在每次类型系统更新(或初始化)时,都会执行此 impex 并将 CreditCardPaymentInfo.type 标记为可选。出于测试目的,您也可以在hac 中运行此脚本。

【讨论】:

这正是我想要的。谢谢你:) 我很高兴听到这个消息。 这对加密属性不起作用(修饰符 encrypted = true)。加密现有属性需要任何其他步骤吗?

以上是关于如何重新声明核心模型属性类型而不在 Hybris 中扩展它的主要内容,如果未能解决你的问题,请参考以下文章

更改某些实体中某些属性的类型后如何迁移核心数据模型?

核心数据模型文件不在捆绑包中

SAP Hybris Commerce - 初始化参考属性的默认值

Hybris Mockito:获取异常,没有(分离的)模型的 LocaleProvider

Hybris 后台 - 在正确的选项卡中显示属性

Hybris 如何获取 Backoffice 中属性的标签?