Pim-community-dev: Edición masiva - Actualizado en

Creado en 16 jun. 2016  ·  11Comentarios  ·  Fuente: akeneo/pim-community-dev

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

Probablemente lo mismo que en https://github.com/akeneo/pim-community-dev/issues/2644 (que está cerrado sin explicación)

Al agregar valores a los atributos del producto a través de la edición masiva, el control de versiones se actualiza con la marca de tiempo correcta, pero la marca de tiempo actualizada de los productos no.

Esto se puede verificar editando en masa un producto y ejecutando php app/console --env=prod pim:product:query '[{"field":"updated","operator":">= WITH TIME","value":"YYYY-MM-DD HH:mm:ss"}]'

Esto tiene un impacto importante en algunos perfiles de exportación que utilizan la opción EnhancedConnectors fromLastExecution .

Nota. MongoDB está en uso -> La edición masiva usará \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll

bug to reproduce

Comentario más útil

Imo. puede ser cerrado. Opiniones

Todos 11 comentarios

Entonces, esto podría tener que ver con el hecho de que el \Pim\Bundle\CatalogBundle\EventSubscriber\TimestampableSubscriber solo está escuchando Doctrines prePersist y preUpdate eventos. El \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll no emite esos eventos en absoluto.

Después de examinarlo, las fechas se crean en \Pim\Bundle\TransformBundle\Normalizer\MongoDB\ProductNormalizer::normalize al ejecutar saveAll . Sigue siendo un misterio por qué EnhancedConnectors fromLastExecution no tiene en cuenta estos productos. ¿Hay una falta de coincidencia de zona horaria en alguna parte?

Parece que el normalizedData.updated MondoDB no se actualiza ...

Hola Matias,

¿Qué significa "Al agregar valores a los atributos del producto"? ¿Intentó cambiar el valor de un producto común? Intenté reproducirlo en una instalación nueva, pero el campo de producto updated_at se ha actualizado bien.
En la información de su sistema, no hay EnhancedConnectors , ¿normal?

¿Qué significa "Al agregar valores a los atributos del producto"? ¿Intentó cambiar el valor de un producto común? Intenté reproducirlo en una instalación nueva, pero el campo de producto updated_at se ha actualizado bien.

Sí, cambie cualquier atributo para que el producto esté marcado para cambios y, por lo tanto, persista.

En la información de su sistema, no hay EnhancedConnectors, ¿normal?

Irrelevante

Al hacer ediciones masivas (cualesquiera métodos que llamen a \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll ) lo siguiente se llamará \Pim\Bundle\TransformBundle\Normalizer\MongoDB\ProductNormalizer::normalize
Como estamos en la rama 1.4.x, veremos que el valor _updated_ de los productos se actualiza aquí
https://github.com/akeneo/pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer.php#L87
Pero las consultas a través del controlador de mongo están dirigidas a los productos normalizedData y eso no se actualiza con las nuevas marcas updated tiempo created y updated (https://github.com/akeneo /pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer.php#L99).

Como solución alternativa, escuchamos el evento akeneo.storage.pre_save_all y actualizamos las marcas de tiempo de los productos allí.

Se relaciona / duplicado por # 5006
@ aRn0D esto no es una pregunta, es un error; según # 5006 funciona en modo ORM pero no en ODM

Arriba.
Reproduje ese error en nuestra instancia de PIM.

El normalizador actualiza el campo "raíz" actualizado sobre la marcha, pero no lo actualiza al objeto de producto. Entonces, como dijo @mathewrapid :

  • aquí, el campo raíz actualizado es correcto (https://github.com/akeneo/pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer.php#L87);
  • y en normalizedData, es la memoria del objeto del producto la que se normaliza (https://github.com/akeneo/pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer .php # L99)

El campo de producto actualizado y normalizedData.updated siempre están desincronizados. NormalizedData está un paso más tarde.

Creo que el normalizador nunca tiene que hacer $data['updated'] = $this->mongoFactory->createMongoDate(); si los datos se establecen en el modelo de producto. Es un normalizador, no un actualizador.

El caso es que el producto tiene que actualizarse (campo así actualizado) antes de la normalización.

+1

¡Hola @mathewrapid , @jlestel , @bmarrot !

Para su información, este problema (PIM-6038) se ha solucionado en las siguientes versiones,

Atentamente,

Imo. puede ser cerrado. Opiniones

Como @nidup señaló en https://github.com/akeneo/pim-community-dev/issues/4620#issuecomment -279428030, esto se ha corregido en PIM-6038.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

lpxavi picture lpxavi  ·  3Comentarios

wakqasahmed picture wakqasahmed  ·  4Comentarios

a2xchip picture a2xchip  ·  5Comentarios

grabelle picture grabelle  ·  3Comentarios

Piotr-Borek picture Piotr-Borek  ·  5Comentarios