Ссылка на идентификатор документа не работает для 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
Кнопка доступна здесь. Взаимное может быть возможным.