Я использую Akeneo 2.3, и у меня есть структура продукта, как
Product Model (Master) -> Product Model (Color) -> Product (Size)
Я пытаюсь вызвать в эту конечную точку
{{url}}/api/rest/v1/product-models?search = {
"parent": [{
"operator": " = ",
"value": "DRZ9186"
}]
}
Однако я получаю
{
"code": 422,
"message": "Filter on property \"parent\" is not supported or does not support operator \"=\""
}
Теперь я не совсем уверен, действительно ли родительский элемент не поддерживается фильтром, поскольку они здесь не упоминаются https://api.akeneo.com/documentation/filter.html
Совершенно уверен, что дело доходит до \Pim\Bundle\ApiBundle\Checker\QueryParametersChecker::checkPropertyParameters, но дальше я двигаться не мог.




Свойство «parent» сейчас недоступно в Akeneo Web API.
Вы правы насчет QueryParametersChecker::checkPropertyParameters. Он проверяет, какие свойства можно использовать, на основе своего определение услуги. Как видите, parent не входит в число разрешенных полей.
Кстати, даже если бы он был доступен, на данный момент нет оператора = для свойства parent. Доступные операторы: IN, EMPTY и NOT EMPTY. Так что вместо:
search = {"parent":[{"operator":" = ","value":"DRZ9186"}]
правильный запрос будет:
search = {"parent":[{"operator":"IN","value":"[DRZ9186]"}]
Не стесняйтесь открывать запрос функции на Репозиторий Akeneo GitHub с описанием вашего варианта использования. Владельцам продукции Akeneo, безусловно, будет интересно.
Нет необходимости переопределять класс. Если вы хотите добавить его как собственный код в свой проект, вам необходимо сначала переопределить 3 службы в вашем приложении проекта: pim_api.checker.query_parameters, pim_api.checker.query_parameters_product и pim_api.checker.query_parameters_product_model. Добавьте parent в массив их последнего аргумента. Это должно помочь.
Спасибо, @Damien, я попробую :) ценю вашу помощь.
Привет, @Damien, похоже, это неплохо работает с конечной точкой моделей продуктов, но, похоже, не выполняет фильтрацию (возвращает список пустых элементов) для конечной точки продуктов. Какие-либо предложения?
Привет, @AlvinNguyen. В Akeneo есть 3 разных индекса elasticsearch: «akeneo_pim_product», «akeneo_pim_product_model» и «akeneo_pim_product_and_product_model» (последний используется в сетке данных). Содержание этих индексов поступает от нормализаторов. Если вы посмотрите на нормализатор свойств продукта github.com/akeneo/pim-community-dev/blob/master/src/Pim/…, вы увидите, что он не обрабатывает «родительское» поле (которое в таблице продуктов называется «product_model», а не «parent»).
Если вы хотите, чтобы родительский фильтр работал, вам нужно переопределить этот нормализатор (его служба - «pim_catalog.normalizer.indexing_product.product.properties» ) и добавить «родительское» поле в elasticsearch, заполнив его кодом модели продукта, которая является родительской для вашего продукта, или со значением null, если у продукта нет родительского элемента.
Спасибо. Хотите знать, есть ли у вас указатель, счастлив ли я взять это на себя? Сразу после чего-то вроде того, какой класс / метод я должен искать в расширении / переопределении.