SAP Hybris не может создать компонент настраиваемого баннера - PullRequest
2 голосов
/ 25 мая 2020

Я хочу создать пользовательский компонент баннера, расширенный с SimpleBannerComponent. Но после того, как я его создал, его не удается создать в Backoffice, см. Ниже.

1) Я добавил этот элемент в свой файл *-items.xml.

<itemtype code="PromotionBannerCMSComponent" autocreate="true" generate="true" extends="SimpleBannerComponent"
          jaloclass="my.package.core.jalo.components.PromotionBannerCMSComponent">
    <description>Promotion banner component</description>
    <deployment table="PromotionBanners" typecode="15301"/>
    <attributes>
        <attribute qualifier="code" type="java.lang.String">
            <persistence type="property"/>
            <modifiers/>
            <description>Banner name (not unique)</description>
        </attribute>
        <attribute qualifier="title" type="localized:java.lang.String">
            <description>Title</description>
            <modifiers read="true" write="true" search="true" initial="true"/>
            <persistence type="property"/>
        </attribute>
        <attribute qualifier="position" type="SimpleBannerPositionEnum">
            <description>Banner position</description>
            <modifiers optional="true" initial="true"/>
            <persistence type="property"/>
        </attribute>
        <attribute qualifier="altText" type="localized:java.lang.String">
            <description>Banner alt text</description>
            <modifiers optional="true" initial="true"/>
            <persistence type="property"/>
        </attribute>
        <attribute qualifier="titleSecondary" type="localized:java.lang.String">
            <description>Title secondary</description>
            <persistence type="property" />
            <modifiers />
        </attribute>
        <attribute qualifier="urlLoc" type="localized:java.lang.String">
            <description>Banner url</description>
            <persistence type="property" />
            <modifiers />
        </attribute>
    </attributes>
</itemtype>

2) Я сделал ant clean all, перезапустил сервер, я запустил HAC -> Update с установленным моим расширением и с Update running system. Затем я снова перезапустил сервер.

3) Я хотел создать компонент в Backoffice WCMS->Components->Add, но он не работает с ошибкой - я включил flexible.search.exception.show.query.details, чтобы увидеть его:

 [ConfigurableFlowController] Object  could not be saved
com.hybris.cockpitng.dataaccess.facades.object.exceptions.ObjectSavingException: Object  could not be saved

и

Caused by: de.hybris.platform.servicelayer.exceptions.ModelSavingException: [de.hybris.platform.servicelayer.interceptor.impl.UniqueAttributesInterceptor@716c1b71]: unexpected validator error: SQL search error - Unknown column 'item_t0.p_catalogversion' in 'where clause' query = 'SELECT  item_t0.PK  FROM cmscomponent item_t0 WHERE
.
.

Теперь я не могу создать даже базовый c SimpleBannerComponent, ни другие компоненты. Что-то не так с обновлением? Я использую Hybris 1811.18.

Ответы [ 3 ]

2 голосов
/ 26 мая 2020

Оказывается, у меня была старая таблица развертывания, которая столкнулась с этим компонентом, почему-то она не показывала ошибку во время ant clean all.

Итак, я запускаю HA C delete from ydeployments where typecode=XX; (XX - это код типа найден в HA C) и начал почти с того же развертывания, за исключением того, что я удалил jaloclass и описание таблицы развертывания:

<itemtype code="PromotionBannerCMSComponent" autocreate="true" generate="true" extends="SimpleBannerComponent">
    <description>Promotion banner component</description>
    <attributes>
        <attribute qualifier="code" type="java.lang.String">
            <persistence type="property"/>
            <modifiers/>
            <description>Banner name (not unique)</description>
        </attribute>
        <attribute qualifier="title" type="localized:java.lang.String">
            <description>Title</description>
            <modifiers read="true" write="true" search="true" initial="true"/>
            <persistence type="property"/>
        </attribute>
        <attribute qualifier="position" type="SimpleBannerPositionEnum">
            <description>Banner position</description>
            <modifiers optional="true" initial="true"/>
            <persistence type="property"/>
        </attribute>
        <attribute qualifier="altText" type="localized:java.lang.String">
            <description>Banner alt text</description>
            <modifiers optional="true" initial="true"/>
            <persistence type="property"/>
        </attribute>
        <attribute qualifier="titleSecondary" type="localized:java.lang.String">
            <description>Title secondary</description>
            <persistence type="property" />
            <modifiers />
        </attribute>
        <attribute qualifier="urlLoc" type="localized:java.lang.String">
            <description>Banner url</description>
            <persistence type="property" />
            <modifiers />
        </attribute>
    </attributes>
</itemtype>
0 голосов
/ 25 мая 2020

Я тестировал ваш код с помощью 1905.13, и он работает нормально. (Мне нужно было изменить имя пакета и добавить определение SimpleBannerPositionEnum) Я просто ввел «ant all» в командной строке и «Обновить запущенную систему» ​​во время обновления платформы (без проверки расширения). Я могу создать экземпляр PromotionBannerCMSComponent в бэк-офисе.

Вы пробовали выполнить инициализацию и посмотреть, работает ли она на вашей стороне? В противном случае вам может потребоваться рассказать больше об ошибке / stacktrace.

0 голосов
/ 25 мая 2020

Одна из проблем, которую я вижу, заключается в том, что таблицу развертывания следует удалить, поскольку лучше всего предоставлять ее только при расширении GenericItem (когда вы не указываете родительский элемент этого типа будет установлен автоматически). Итак, ваше определение должно выглядеть так:

<itemtype code="PromotionBannerCMSComponent" autocreate="true" generate="true" extends="SimpleBannerComponent"
      jaloclass="my.package.core.jalo.components.PromotionBannerCMSComponent">
<description>Promotion banner component</description>
<attributes>
    <attribute qualifier="code" type="java.lang.String">
        <persistence type="property"/>
        <modifiers/>
        <description>Banner name (not unique)</description>
    </attribute>
    <attribute qualifier="title" type="localized:java.lang.String">
        <description>Title</description>
        <modifiers read="true" write="true" search="true" initial="true"/>
        <persistence type="property"/>
    </attribute>
    <attribute qualifier="position" type="SimpleBannerPositionEnum">
        <description>Banner position</description>
        <modifiers optional="true" initial="true"/>
        <persistence type="property"/>
    </attribute>
    <attribute qualifier="altText" type="localized:java.lang.String">
        <description>Banner alt text</description>
        <modifiers optional="true" initial="true"/>
        <persistence type="property"/>
    </attribute>
    <attribute qualifier="titleSecondary" type="localized:java.lang.String">
        <description>Title secondary</description>
        <persistence type="property" />
        <modifiers />
    </attribute>
    <attribute qualifier="urlLoc" type="localized:java.lang.String">
        <description>Banner url</description>
        <persistence type="property" />
        <modifiers />
    </attribute>
</attributes>

Попробуйте инициализировать систему, чтобы проверить это, чтобы удалить старый тип и связанную с ним таблицу из базы данных.

...