Ссылка на идентификатор документа не работает для impex

У меня проблема с impex, который содержит ссылку на идентификатор документа.

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

Элементы из *items.xml (только самые важные части)

<itemtype code="A" autocreate="true" generate="true" abstract="true"/>

<itemtype code="B" autocreate="true" generate="true" extends="A">
    <deployment table="btable" typecode="20115" />
    <attributes>
        <attribute qualifier="code" type="java.lang.Integer" autocreate="true" generate="true">
         <persistence type="property"/>
         <modifiers optional="false"/>
    </attribute>
</attributes>
</itemtype>

<itemtype code="C" autocreate="true" generate="true">
    <deployment table="ctable" typecode="20117" />
    <attributes>
        <attribute qualifier="code" type="java.lang.String" autocreate="true" generate="true">
            <persistence type="property"/>
            <modifiers optional="false" unique="true"/>
        </attribute>
        <attribute qualifier="test" type="A" autocreate="true" generate="true">
            <persistence type="property"/>
            <modifiers optional="false" partof="true"/>
        </attribute>
    </attributes>
</itemtype>

Код импекса:

INSERT B;code;&docIdRef
;1;docId

INSERT_UPDATE C;code[unique=true];test(&docIdRef)
;uniqueCode;docId

Сообщение об ошибке:

 cannot create C with values ItemAttributeMap[ registry:  null, type: <null>, (...) due to [de.hybris.platform.servicelayer.interceptor.impl.MandatoryAttributesValidator@3b777877]:missing values for [test] in model C

Когда я удалил модификатор partof из атрибута test (класс C), все работало нормально.

Интересно, как должен выглядеть impex, если я хочу сохранить модификатор partof.

3 ответа

Когда вы используете partOf Вы должны ссылаться на partOf используя владельца.

Так оно и есть:

INSERT B;owner(C.code);&docIdRef
;uniqueCode;docId

INSERT_UPDATE C;code[unique=true];test(&docIdRef)
;uniqueCode;docId

Вам не нужно назначать B идентификатор, вам просто нужно сослаться на владельца.

Если вы точно знаете, что ваши данные верны, вы можете использовать модификатор [forceWrite=true] или устаревший режим, чтобы пропустить проверку уровня обслуживания.

Вы также должны убедиться, что эта конфигурация - то, что вам действительно нужно. Установка необязательного значения true или partOf в false или указание значения по умолчанию также должны решить проблему.

Так как вы упомянули partof="true" Вы не можете назначить ссылку типа A, Вы можете только создать новую сущность.

Проверьте OOTB AbstractOrder2AbstractOrderEntry отношения, они упомянули partof="true" за AbstractOrderEntry означает, что вы не можете ссылаться на другие AbstractOrderEntry в Order, Вы всегда можете создать новую запись.

Взгляните также на сайт HMC

Вы можете увидеть здесь нет + Add Entry Кнопка доступна здесь. Взаимное может быть возможным.

Другие вопросы по тегам