Pim-community-dev: 一括編集-更新日

作成日 2016年06月16日  ·  11コメント  ·  ソース: akeneo/pim-community-dev

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

おそらくhttps://github.com/akeneo/pim-community-dev/issues/2644と同じです(説明なしで閉じられ

一括編集を介して製品属性に値を追加すると、バージョン管理は正しいタイムスタンプで更新されますが、製品が更新されたタイムスタンプは更新されません。

これは、1つの製品を一括編集し、 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がこれらの製品を考慮に入れていない理由はまだ謎です。 どこかにタイムゾーンの不一致はありますか?

MondoDBのnormalizedData.updatedが更新されていないようです...

こんにちはマティアス、

「商品属性に値を追加する場合」とはどういう意味ですか? 一般的な製品の価値を変えようとしましたか? 新規インストールで再現しようとしましたが、 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が言ったように:

  • ここでは、更新されたルートフィールドはOKです(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)

製品更新フィールドとnormalizedData.updatedは常に同期していません。 NormalizedDataは1ステップ遅れています。

データが製品モデルに設定されている場合、ノーマライザーは$data['updated'] = $this->mongoFactory->createMongoDate();を実行する必要はないと思います。 これはノーマライザーであり、アップデーターではありません。

実際には、正規化する前に製品を更新する必要があります(つまり、フィールドを更新する必要があります)。

+1

こんにちは@ mathewrapid@ jlestel@ bmarrot

参考までに、この問題(PIM-6038)は次のバージョンで修正されています。

宜しくお願いします、

イモ。 閉じることができます。 意見は?

@niduphttps://github.com/akeneo/pim-community-dev/issues/4620#issuecomment-279428030で指摘しているように、これはPIM-6038で修正されています。

このページは役に立ちましたか?
0 / 5 - 0 評価