Как создать локализованную коллекцию строк - PullRequest
0 голосов
/ 09 октября 2018

У меня есть сценарий, в котором мне нужно отобразить список элементов String в витрине магазина.После исследования я заметил, что у Hybris есть StringCollection OOTB.Однако строки, которые должны отображаться на витрине магазина, должны быть локализованы.

Каков наилучший подход для реализации такого сценария?Я знаю, что могу создать ItemType, который имеет только один локализованный атрибут типа String, а затем создать связь между этим вновь созданным элементом и элементом, который будет содержать список строк.


Редактировать:

Если я использую:

<collectiontype code="localizedStringColl" elementtype="localized:java.lang.String"  autocreate="true" generate="true"  type="list" />

Я получаю ошибку в backoffice при попытке добавить новую строку в список:

  de.hybris.platform.servicelayer.exceptions.UnknownIdentifierException: No composed type localized:java.lang.String exists
at de.hybris.platform.servicelayer.type.daos.impl.DefaultTypeDao.findComposedTypeByCode(DefaultTypeDao.java:71) ~[coreserver.jar:?]
at de.hybris.platform.servicelayer.type.impl.DefaultTypeService.getComposedTypeForCode(DefaultTypeService.java:114) ~[coreserver.jar:?]
at com.hybris.backoffice.solrsearch.services.impl.DefaultBackofficeFacetSearchConfigService.findSearchConfigForTypeCode(DefaultBackofficeFacetSearchConfigService.java:172) ~[backofficesolrsearchserver.jar:?]
at com.hybris.backoffice.solrsearch.services.impl.DefaultBackofficeFacetSearchConfigService.isSolrSearchConfiguredForType(DefaultBackofficeFacetSearchConfigService.java:122) ~[backofficesolrsearchserver.jar:?]

Hybris Version 6.7

Ответы [ 2 ]

0 голосов
/ 13 июля 2019

Все локализованные типы определены в {extensionName} -items.xml как карты.Например, localized: java.lang.String определен в core-items.xml

Поэтому лучший способ - создать новый тип карты:

<maptypes>
    <maptype code="localized:StringCollection" argumenttype="Language" returntype="StringCollection" generate="false"/>
</maptypes>

Теперь осталось только использовать localized: StringCollection для атрибута, который нуждается в этом типе:

        <itemtype code="CustomCmsItemComponent" extends="SimpleCMSComponent"
                  autocreate="true" generate="true"
                  jaloclass="com.test.hybris.core.jalo.cms.CustomCmsItemComponent">
            <attributes>
                <attribute qualifier="localizedStringCollectionTest" type="localized:StringCollection">
                    <persistence type="property"/>
                </attribute>
            </attributes>
        </itemtype>

После построения и обновления базы данных я заметил, что это решение работает какожидается.

0 голосов
/ 10 октября 2018

Как создать локализованную коллекцию строк?

Вы можете объявить CollectionType с localized: java.lang.String и использовать его каквведите при объявлении вашего атрибута.

<collectiontype code="localizedStringColl" elementtype="localized:java.lang.String"  autocreate="true" generate="true"  type="list" />

Теперь вы можете использовать его как

            <attribute qualifier="myAttib" type="localizedStringColl" >
                <description>MyAttib</description>
                <persistence type="property" />
            </attribute>

Каков наилучший подход к реализации такого сценария?

Сначала выполните этот ответ , который поможет вам понять, как данные хранятся в collectionTypes vs RelationTypes.

Как объяснено в ссылке, в случае CollectionTypes запятаяразделенный список PK будет сохранен, что может привести к усечению значения и, как следствие, к потере данных, если данные вашей коллекции растут ... В этом случае лучше использовать RelationType.

Если вы знаетеваша коллекция String не такого большого размера, которую вы можете использовать с collectionType.

...