Développer avec RBS Change : [Résolu] Archivage des produits

  • 80925.1

    19/09/2013 19:25


    hioli01
    Rang : Adepte
    Bonjour,

    Je souhaites savoir si rbs permet d'archiver des produits.
    En fait après 2 ans d'utilisation de rbs pour une boutique en ligne, on se trouve avec une table product qui contient 30000 et qlq produit alors que nous n'avons besoin d'un tiers de ces produits.
    Nous avons pensé à faire la suppression des produits avant chaque import, mais on il y a des relations entre produit et commande on souhaite garder les anciens produits et juste leur donnés un statut 'ARCHIVED'.
    Ce besoin vient du faite que la tache de compilation des produits devient très lente et block tout les temps.

    Alors techniquement ce que j'ai fais et le suivant :
    j'ai fais une manipulation hors change sur la base de données pour données au produit que nous n'avant plus besoin le statut archived.
    Puis j'ai surchargé le service ProductService et au niveau de la methode getProductIdsToCompile j'ai rajouté la restriction suivante :

    "->add(Restrictions::ne('publicationstatus', 'ARCHIVED'))"

    idem au niveau de la methode getCountProductIdsToCompile()

    on affichant dans le log le resultat de la methode getCountProductIdsToCompile() , je trouves que le nombre est egale au nombre total des produits inclu ceux dont le statut est ARCHIVED.
    Donc la tache de compilation parcours toujours tout les produits.

    Ce que je ne comprend pas c'est au niveau base de données le statut ARCHIVED y est toujours.
    est ce que la restriction que j'ai rajouté est fause ou bien change stock les statut des produits .. je ne comprend pas trop , je vous passe le code des deux methodes
    /**
    	 * @return integer[]
    	 */
    	public final function getProductIdsToCompile()
    	{
    		return $this->createQuery()
    			->add(Restrictions::ne('publicationstatus', 'ARCHIVED'))
    			->add(Restrictions::eq('compiled', false))
    			->setProjection(Projections::property('id', 'id'))
    			->findColumn('id');
    	}
    	
    	/**
    	 * @return integer
    	 */
    	public final function getCountProductIdsToCompile()
    	{
    		$data = $this->createQuery()
    			->add(Restrictions::ne('publicationstatus', 'ARCHIVED'))
    			->add(Restrictions::eq('compiled', false))
    			->setProjection(Projections::rowCount('count'))
    			->findColumn('count');
    		return $data[0];
    	}
    


    Après les modif que j'ai fais j'ai bien fait caop et ua et j'ai verifié au niveau cache autoload que le service a été bien remplace et contient le bonne code pour les methodes.

    Sinon Rbs a t il prévu autre methode pour l'archivage des produits .

    Merci d'avance
    Cordialement

    Développeur et intégrateur web
    RBSChange V 3.5.2 e-commerce
  • 80925.2 en réponse à 80925.1 écrit par hioli01

    25/09/2013 17:10


    heristop
    Rang : Nouveau Membre
    Tout d'abord, le statut à utiliser pour l'archivage est plutôt FILED.

    Cela dit RBS Change n'archivera pas le produit tant que ce dernier n'est pas marqué comme à compiler. Il est donc normal qu'il n'y ait pas de filtre sur le statut au moment de la compilation, et il ne faut pas le faire avec une surcharge à mon avis.

    En effet, une fois les produits archivés , il n'est pas possible de modifier leur statut. Ils seront par conséquent toujours exclus des prochaines compilations.

    Concernant, le problème de volumétrie, la question est de savoir si les produits archivés sont exclus des tâches avec un traitement sur la totalité du catalogue (système ou custom). Si ce n'est pas le cas, c'est plutôt de ce côté qui faut appliquer une surcharge.
  • 80925.3 en réponse à 80925.1 écrit par hioli01

    26/09/2013 12:09


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Les statuts dans RBSChange sont définis dans une enum, ne comprenant pas le statut 'ARCHIVE'. Comme l'indique heristop, le statut utilisé pour l'archivage est de préférence FILED.

    Cependant il y a une autre question qu'il faut se poser ; souhaitez vous conserver ces produits visibles sur la boutique? Si la réponse est non, à ce moment vous pouvez effectivement utiliser le statut FILED.

    En revanche si vous souhaitez conserver les produits à l'affichage, alors à ce moment je rajouterai un booléen sur mon produit indiquant s'il doit être considéré comme archivé ou non. Je modifierai la méthode updateCompiledProduct de sorte à empêcher la mise à jour du produit si le booléen le marque comme archivé, ce qui empêchera sa recompilation et permettra de conserver le produit disponible à l'affichage. Bien entendu on pourra rajouter des conditions dans le template afin d'empêcher l'affichage des bouton d’ajout au panier et autres de s'afficher si le produit est marqué comme étant archivé.

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 80925.4 en réponse à 80925.3 écrit par Jean-Michel

    26/09/2013 12:44


    hioli01
    Rang : Adepte
    Bonjour ,

    Merci beaucoup Jean-Michel pour ces détails et ces idées.
    en fait je savais qu'il y a le statut FILED par defaut de RBS et c'est déjà noté sur le wiki, mais ce que je voulais c'est de rajouter un nouveau statut pour gérer l'archivage moi même.
    Mais là je trouves que votre idée de rajouter un nouveau attribut est plus intéressante.
    Par contre je n'ai toujours pas compris pourquoi après avoir modifier directement à partir de la base de donnée le statut on le mettant à 'ARCHIVED' et on rajoutant la restriction au niveau des deux méthodes cités dans mon premier message, la requête me renvoi toujours tout les produits sans prendre compte de la restriction sur le statut !!!

    Merci Jean Michel.
    Cordialement.


    Développeur et intégrateur web
    RBSChange V 3.5.2 e-commerce
  • 80925.5 en réponse à 80925.4 écrit par hioli01

    26/09/2013 16:04


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Je pense que la raison pour laquelle votre requête n'aboutissait pas est directement lié à l'inexistence du statut 'ARCHIVE' dans l'enum.
    Afin de voir la requête SQL passer dans les logs, vous passer la variable de configuration AG_LOGGING_LEVEL à DEBUG et vous pourrez alors savoir précisément pourquoi votre requête n'a pas fonctionné.

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 80925.6

    06/11/2013 12:36


    hioli01
    Rang : Adepte
    Bonjour Jean Michel,

    Je reprend ce sujet avec un peut de retard car j’étais occupé sur autres développement .
    Alors comme j'ai eu un prob avec le status ARCHIVED j'ai essayé le status FILED de rbs mais toujours même problème au niveau des requetes rbs me renvoi toujours tout les produits et donc tout les produits seront recompiler.
    voici par exemple la méthode getProductIdsToCompile()


    Voici la méthode modifié :
    public final function getProductIdsToCompile()
    	{
    		return $this->createQuery()
    			->add(Restrictions::eq('compiled', false))
    			->add(Restrictions::ne('publicationstatus', 'FILED'))
    			->setProjection(Projections::property('id', 'id'))
    			->findColumn('id');
    	}
    



    /* comme cettte methode est final j'ai fais le test sur le ProductService du module catalog sans injection ni AOP juste pour tester */


    Sinon réexplique un peut le besoin :

    En fait on rencontre des problèmes de performances sur nos sites et on soupçonnes que cela reviens au nombre des requêtes sql exécutes qui est très élevé.
    Parmis les améliorations qu'on a deja fait ces la désactivations des logs (useractionlogger).
    On voudrai aussi améliorer les taches :
    Et comme la tache de compilation tourne tout les minutes et parcourt toute la table product pour vérifier quels sont les produits à compiler , on a pensé à diminuer la taille de la table product et supprimer les produits qui ne sont plus utilisé , mais comme il y a des relations entre produits et commandes et que les clients peuvent consultés l'historiques de leurs commandes ... on a pensé de garder les produits dans la table et les archivés pour les exclures des produits à vérifier d'ou l'ajout de la restriction "add(Restrictions::ne('publicationstatus', 'FILED'))".


    j'ai étudié la possibilités d'utiliser updateCompiledProduct comment vous m'avez conseil dan votre dernière réponse mais à mon avis cela m'apportera pas de gain comme la tache de compilation va cherche comme même tout les produits et c'est juste au moment de la compilation d'un produit que ce dernier produit archivé sera ignorer de la compilation.

    une idée pourquoi même avec la valeur FILED la requête me renvoi toujours tout les produits ?
    Sinon avez vous d'autre piste pour optimiser la tache de compilation ou comment faire pour supprimer des produits sans perdre l'historique des commandes

    Merci d'avance


    Développeur et intégrateur web
    RBSChange V 3.5.2 e-commerce
  • 80925.7 en réponse à 80925.6 écrit par hioli01

    13/11/2013 10:14


    Jean-Michel
    Titre : Community Manager
    Rang : Expert
    Bonjour,

    Avez-vous modifié la méthode updateCompiledProduct de sorte à ce qu'elle tienne compte du booléen "d'archivage" au moment de faire la requête de sélection des produits à compiler?

    Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
    Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
  • 80925.8 en réponse à 80925.7 écrit par Jean-Michel

    13/11/2013 16:57


    hioli01
    Rang : Adepte
    Bonjour Jean Michel,

    Finalement j'ai suivi votre proposition de rajouter un nouveau attribue au niveau de la table product et faire pour dire archivé ou pas .
    Cela fonctionne bien et là que je suis entrain de chercher tout les requetes de types findAll from la table product pour tenir compte du nouveau paramettre

    Merci bcp

    Développeur et intégrateur web
    RBSChange V 3.5.2 e-commerce
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1453 membres
Aucun membre connecté