Personnalisation du gestionnaire de codes promotionnels
Vous pouvez personnaliser la manière dont le moteur de promotion résout les codes promotionnels en promotions. En outre, vous pouvez personnaliser la manière dont les codes promotionnels sont appliqués pour qu'une zone unique de panier d'achat n'accepte qu'un seul code promotionnel. Cela signifie que, lorsqu'il existe plusieurs codes promotionnels pour une commande, seul le dernier entré est appliqué à la commande et tous les autres sont supprimés. Sans personnalisation, tous les codes promotionnels sont cumulés et appliqués.
Pourquoi et quand exécuter cette tâche
HCL Commerce propose actuellement une fonction simple de gestion des codes promotionnels. Un seul code peut être affecté à une promotion. Ce code doit être entré par les clients qui souhaitent utiliser la promotion. En réalité, de nombreux sites disposent d'applications complexes de gestion de codes promotionnels. Par exemple, les codes promotionnels peuvent véhiculer davantage de renseignements que de simples informations d'identification. Un code peut contenir des informations supplémentaires telles que les informations de canal, d'autorisation et de tarification.
Les codes promotionnels sont gérés par le composant PromotionCodeManager du moteur de promotion. Ce composant est configurable. Le gestionnaire de codes promotionnels par défaut, WCSPromotionCodeManager, enregistre simplement les codes promotionnels entrés pour une commande dans la table ORDPROMOCD. Tous les gestionnaires de codes promotionnels doivent implémenter l'interface com.ibm.commerce.marketing.promotion.code.PromotionCodeManager, qui est une sous-classe de XMLizable.
En général, cette portion du composant PromotionCodeManager ne nécessite pas de personnalisation. Le gestionnaire WCSPromotionCodeManager repose sur un autre composant configurable pour résoudre les codes promotionnels en promotions. Ce composant configurable est un résolveur PromotionCodeResolver. L'implémentation par défaut recherche le code promotionnel entré pour la promotion et essaie de trouver une correspondance. Il s'agit de la caractéristique la plus souvent configurée lors de la prise en charge d'une application complexe de gestion de codes promotionnels.
Procédure
-
Implémentez votre gestionnaire de codes promotionnels.
Tous les résolveurs PromotionCodeResolver doivent implémenter l'interface com.ibm.commerce.marketing.promotion.code.PromotionCodeResolver, qui est également une sous-classe de XMLizable. L'exemple suivant illustre la définition d'interface :
public interface PromotionCodeResolver extends XMLizable { /** * IBM Copyright */ public static final String COPYRIGHT = IBMCopyright.SHORT_COPYRIGHT; /** * Resolves a promotion code to a promotion. * @param code the code * @param context the context within which the resolution is performed. * @return the key to the promotion which is identified by this * promotion code. */ PromotionKey resolve(String code, PromotionContext context) throws PromotionApplicationException; /** * Resolves a promotion code to a promotion. A name-value pair style * parameter can be passed in. * The implementor is responsible for checking whether the required * parameters are provided. * This is for customization purposes. This method is often used when * promotion codes are evaluated. * The reason the other resolve method is not used is because it needs a * PromotionContext object, which may not be available at the time * codes are validated. * @param code the code * @param custoProp custom properties passed to the resolver for promotion * resolution. * @return the key to the promotion which is identified by this promotion * code. */ PromotionKey resolve(String code, Hashtable NVP) throws PromotionApplicationException; }Les deux méthodes clés sont les deux méthodes resolve. La première admet en entrée une chaîne correspondant à un code promotionnel et à son contexte (PromotionContext). Cette méthode est généralement appelée lorsque le moteur de promotion a été appelé. La seconde admet en entrée un paramètre de type chaîne (String), c'est-à-dire le code promotionnel, et un paramètre de type paire nom-valeur de table de hachage (Hashtable NVP). Elle est généralement appelée pour valider un nouveau code promotionnel ajouté à une commande. Par convention, la clé du magasin est sauvegardée sur cette paire nom-valeur, sous le nom "StoreKey".
Les développeurs d'applications personnalisées de gestion de codes promotionnels doivent fournir leur implémentation de la méthode resolve afin de déchiffrer un code promotionnel de type chaîne pour mettre en corrélation une clé et une promotion. Il s'agit généralement d'un problème spécifique au site à traiter au cas par cas.
Au cours de la résolution du code promotionnel, le résolveur peut enregistrer, à des fins d'analyse, l'utilisation d'un code particulier. De même, lorsqu'une commande est confirmée et soumise, un événement PromotionAppliedEvent est émis. Par conséquent, un développeur d'applications de gestion de codes promotionnels peut devoir créer un programme d'écoute pour cet événement et enregistrer les codes promotionnels qui déclenchent réellement des achats.
-
Enregistrez le résolveur de promotion personnalisé dans la configuration du moteur de promotion.
Dans le fichier XML de configuration de promotion, le fragment XML suivant configure le gestionnaire PromotionCodeManager.
<PromotionCodeManager = impl "com.ibm.commerce.marketing.promotion.code.WCSPromotionCodeManager"> <PromotionCodeResolver impl = "com.ibm.commerce.marketing.promotion.code.DefaultPromotionCodeResolver"> </PromotionCodeManager> -
Personnalisez le mode d'application des codes promotionnels.
Vous pouvez personnaliser les codes promotionnels pour qu'une zone unique de panier d'achat n'accepte qu'un seul code promotionnel. Cela signifie que, lorsqu'il existe plusieurs codes promotionnels pour une commande, seul le dernier entré est appliqué à la commande et tous les autres sont supprimés. Sans personnalisation, tous les codes promotionnels sont cumulés et appliqués. Pour modifier le comportement par défaut, procédez comme suit :
- Remplacez PromotionCodeAddRemoveControllerCmdImpl
- Utilisez la méthode statique removeOrderPromotionCode
- Remplacez la méthode addPromoCodeToOrder
Pour supprimer tous les codes promotionnels d'une commande, il existe une autre méthode dans la classe PromotionCodeCentral. Cette méthode ne nécessite que les ID commande comme paramètres, est donc plus facile à exécuter et offre de meilleures performances./** * This method removes all the Promotion Codes from the specified order. * @param orderID The order id of the order from which the promotion codes * are to be removed. * @throws Exception The exception. */ public static void removeAllCodesForOrder(Long ordersID) throws ECSystemException -
Redémarrez HCL Commerce.
Un redémarrage de HCL Commerce est nécessaire après toute modification apportée à PromotionCodeManager ou à PromotionCodeResolver.