Pim-community-dev: Массовое редактирование - Обновлено в

Созданный на 16 июн. 2016  ·  11Комментарии  ·  Источник: akeneo/pim-community-dev

akeneo-pim-system-info_2016-06-16_14-41.txt

Наверное, так же, как в https://github.com/akeneo/pim-community-dev/issues/2644 (который закрыт без объяснения причин)

При добавлении значений в атрибуты продукта с помощью массового редактирования версия обновляется с правильной меткой времени, а метка времени обновления продуктов - нет.

Это можно проверить, массово отредактировав один продукт и запустив php app/console --env=prod pim:product:query '[{"field":"updated","operator":">= WITH TIME","value":"YYYY-MM-DD HH:mm:ss"}]'

Это существенно влияет на некоторые профили экспорта, в которых используется параметр EnhancedConnectors fromLastExecution .

Примечание. MongoDB уже используется -> Массовое редактирование будет использовать \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll

bug to reproduce

Самый полезный комментарий

Имо. можно закрыть. Мнения?

Все 11 Комментарий

Итак, это может быть связано с тем, что \Pim\Bundle\CatalogBundle\EventSubscriber\TimestampableSubscriber слушает только события Doctrines prePersist и preUpdate . \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll вообще не генерирует эти события.

После изучения этого, даты создаются в \Pim\Bundle\TransformBundle\Normalizer\MongoDB\ProductNormalizer::normalize при выполнении saveAll . До сих пор остается загадкой, почему EnhancedConnectors fromLastExecution не учитывает эти продукты. Есть ли где-то несоответствие часового пояса?

Похоже, что normalizedData.updated MondoDB не обновляется ...

Привет, Матиас,

Что означает выражение «При добавлении значений к атрибутам товара»? Вы пытались изменить общую ценность продукта? Я попытался воспроизвести его при новой установке, но поле продукта updated_at было хорошо обновлено.
В вашей системной информации нет EnhancedConnectors , нормально?

Что означает выражение «При добавлении значений к атрибутам товара»? Вы пытались изменить общую ценность продукта? Я попытался воспроизвести его при новой установке, но поле продукта updated_at было хорошо обновлено.

Да, измените любой атрибут, чтобы продукт был помечен для изменений, чтобы он сохранялся.

В вашей системной информации нет EnhancedConnectors, нормально?

Не имеющий отношения

При массовом редактировании (какие бы методы ни вызывали \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll ) следующее будет называться \Pim\Bundle\TransformBundle\Normalizer\MongoDB\ProductNormalizer::normalize
Поскольку мы находимся в ветке 1.4.x, мы видим, что здесь обновлено значение _updated_ для продуктов.
https://github.com/akeneo/pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer.php#L87
Но запросы через обработчик mongo нацелены на продукты normalizedData и не обновляются с новыми отметками времени created и updated (https://github.com/akeneo /pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer.php#L99).

В качестве обходного пути мы слушаем событие akeneo.storage.pre_save_all и обновляем там временные метки продуктов.

Относится / дублируется # 5006
@ aRn0D это не вопрос, это ошибка; согласно # 5006 работает в режиме ORM, но не в ODM

Вверх.
Я воспроизвел эту ошибку в нашем экземпляре PIM.

Нормализатор обновляет "корневое" поле, обновленное "на лету", но не обновляет его до объекта продукта. Итак, как сказал @mathewrapid :

  • здесь обновленное корневое поле в порядке (https://github.com/akeneo/pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer.php#L87);
  • а для normalizedData нормализуется память объекта продукта (https://github.com/akeneo/pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer .php # L99)

Поле Product updated и normalizedData.updated всегда не синхронизированы. NormalizedData опаздывает на один шаг.

Я думаю, что нормализатор никогда не должен делать $data['updated'] = $this->mongoFactory->createMongoDate(); если данные установлены в модели продукта. Это нормализатор, а не средство обновления.

Дело в том, что товар нужно обновить (значит обновить поле) перед нормализацией.

+1

Привет, @mathewrapid , @jlestel , @bmarrot !

К вашему сведению, эта проблема (PIM-6038) была исправлена ​​в следующих версиях:

С наилучшими пожеланиями,

Имо. можно закрыть. Мнения?

Как отметил @nidup в https://github.com/akeneo/pim-community-dev/issues/4620#issuecomment -279428030, это было исправлено в PIM-6038.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги