Personalizar el gestor de códigos de promoción

Puede personalizar la forma en que el motor de promociones debe resolver los códigos de promoción para las promociones. Además, puede personalizar cómo aplicar los códigos de promoción para que un único campo de un carro de la compra sólo acepte un código de promoción. Esto significa que cuando hay varios códigos de promoción para un pedido, sólo se aplicará el código de promoción que se ha entrado en último lugar y se eliminarán los demás. Sin una personalización, todos los códigos de promoción se acumularán y se aplicará en total.

Por qué y cuándo se efectúa esta tarea

HCL Commerce proporciona actualmente una característica de códigos de promoción simple. Se puede asignar un único código a una promoción. Los clientes que deseen hacer uso de esta promoción deben entrar el mismo código para tener derecho a la misma. En realidad, muchos sitios disponen de sofisticadas aplicaciones de códigos de promoción. Por ejemplo, los códigos de promoción pueden incluir más información que la simple identificación de la promoción. Un código puede incluir información adicional, como información de canal, de autorización y de precios.

Los códigos de promoción los gestiona el componente PromotionCodeManager del motor de promociones. Este es un componente configurable. El gestor de códigos de promoción predeterminado, WCSPromotionCodeManager, simplemente registra los códigos de promoción entrados para un pedido en la tabla ORDPROMOCD. Todos los gestores de códigos de promoción deben implementar la interfaz com.ibm.commerce.marketing.promotion.code.PromotionCodeManager, que es una subclase de XMLizable.

Normalmente, esta parte de PromotionCodeManager no requiere personalización. WCSPromotionCodeManager utiliza otro componente configurable para resolver los códigos de promoción en promociones. Este componente configurable es un PromotionCodeResolver. La implementación predeterminada busca el código de promoción especificado para las promociones e intenta encontrar una coincidencia. Este es el aspecto más frecuentemente configurado al dar soporte a una aplicación de códigos de promoción sofisticada.

Procedimiento

  1. Implemente el gestor de códigos de promoción.
    Todos los PromotionCodeResolvers deben implementar la interfaz com.ibm.commerce.marketing.promotion.code.PromotionCodeResolver, que es también una subclase de XMLizable. El ejemplo siguiente ilustra la definición de la interfaz:
    
    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;
    }
    

    Los dos métodos clave son los dos métodos resolve. El primero toma un parámetro String que es un código de promoción y un PromotionContext. Normalmente, se llama a este método cuando se ha invocado el Motor de promociones. El segundo método resolve toma un parámetro String que es el código de promoción y un parámetro Hashtable de pareja nombre-valor. Este método se invoca normalmente cuando se añade un nuevo código de promoción a un pedido, para validar el código de promoción. Por convención, la clave para la tienda se guarda en esta pareja nombre-valor utilizando el nombre "StoreKey".

    Los desarrolladores de aplicaciones de códigos de promoción personalizadas deben proporcionar su implementación del método resolve para descifrar un código de promoción de caracteres para emparejar una clave con una promoción. Esto suele ser una cuestión específica del sitio y debe tratarse caso por caso.

    Tenga en cuenta que, cuando se está resolviendo el código de promoción, el componente de resolución puede registrar el hecho de que se ha utilizado un código determinado, con fines de análisis. Además, cuando se confirma y se somete un pedido, se genera un PromotionAppliedEvent, de modo que es posible que un desarrollador de aplicaciones de códigos de promoción necesite crear un escucha para escuchar este suceso y registrar los códigos de promoción que realmente desencadenan compras.

  2. Registrar el componente de resolución de códigos de promoción en la configuración del motor de promociones.
    El fragmento XML siguiente del archivo XML de configuración del motor de promociones configura PromotionCodeManager.
    
    <PromotionCodeManager = impl
          "com.ibm.commerce.marketing.promotion.code.WCSPromotionCodeManager">
       <PromotionCodeResolver impl = 
             "com.ibm.commerce.marketing.promotion.code.DefaultPromotionCodeResolver">
    </PromotionCodeManager>
    
  3. Personalizar la forma de aplicar los códigos de promoción.

    Puede personalizar los códigos de promoción de forma que un único camop de un carro de la compra sólo acepte un código de promoción. Esto significa que cuando hay varios códigos de promoción para un pedido, sólo se aplicará el código de promoción que se ha entrado en último lugar y se eliminarán los demás. En un método no personalizado, todos los códigos de promoción se acumularán y se aplicará en total. Esto puede verse afectado por los pasos siguientes:

    1. Sobrescribir PromotionCodeAddRemoveControllerCmdImpl
    2. Utilizar el método estático removeOrderPromotionCode
    3. Sustituir el método addPromoCodeToOrder
    Para eliminar de un pedido todos los códigos de promoción existentes, hay otro método en la clase PromotionCodeCentral. Este método sólo necesita ordersId como parámetro, que facilita su ejecución y, por tanto, es más sencillo y tiene un rendimiento más elevado.
    
     /**
     * 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
    
  4. Reinicie HCL Commerce.

    Es necesario reiniciar HCL Commerce después de realizar cualquier cambio en PromotionCodeManager o PromotionCodeResolver.