Políticas de promoción personalizadas

El motor de promociones se configura con un conjunto de políticas de promoción que refuerzan las reglas relacionadas con la exclusividad de la promoción , la combinación de promociones, los límites de aplicación, etc. Si el conjunto predeterminado de políticas de promoción no cumple con sus requisitos empresariales, puede implementar políticas de promoción personalizadas.

Este conjunto de políticas predeterminadas se listan en organización de promociones. La introducción de políticas de promoción personalizadas en un proceso de dos pasos. El primer paso es la implementación de la nueva política. El segundo paso es asignar la política a uno de los grupos de promociones o marcarla como política global. Para asignar una política a un grupo, consulte Personalizar la organización de las promociones. Si crea una política y la marca como activa, pero no la asigna a ningún grupo, se considera que la política es global.

Todas las políticas personalizadas deben implementar la interfaz com.ibm.commerce.marketing.promotion.policy.PromotionPolicy. Esta interfaz es una subclase de XMLizable, lo que significa que debe implementar los métodos toXML y fromXML, y diseñar un formulario XML serializado para la política.

El método clave de una política de promoción es el método apply. Utiliza dos parámetros: PromotionContext y PromotionExecutionRecord. Una política de promoción se invoca cuando se cumplen las condiciones de una promoción, y los ajustes de la promoción se han aplicado "provisionalmente" al contexto de promoción (PromotionContext). La responsabilidad de una política de promoción, ejecutada mediante el método apply, es comprobar el estado del PromotionContext para determinar si hay o no alguna violación. Una política de promoción debe leer el PromotionContext no comprometido para determinar el efecto de aplicar la promoción actual al pedido. Los detalles de PromotionContext se encuentran en la documentación de la API. En particular, tome nota de los métodos que utilizan con el contenido no comprometido de PromotionContext. El método apply debe devolver un valor booleano que indica si se ha encontrado una violación (true) o no (false).

El código de ejemplo siguiente es una política de ejemplo:


package com.ibm.commerce.marketing.promotion.policy;

import com.ibm.commerce.marketing.promotion.reward.MonetaryAdjustment;
import com.ibm.commerce.marketing.promotion.runtime.PromotionContext;
import com.ibm.commerce.marketing.promotion.runtime.PromotionExecutionRecord;

/**
 * Checks whether applying a promotion drops the order running total to zero or not.
 */
 
public class NoneZeroOrderTotalPolicy extends PromotionPolicyBase {
   /**
    * IBM copyright notice field.
    */
   public static final String COPYRIGHT = 
        com.ibm.commerce.copyright.IBMCopyright.SHORT_COPYRIGHT;
            
   /**
    * Constructor.
    *
    */
   public NoneZeroOrderTotalPolicy(){
      super();
   }
   /**
    * This method checks if the order total will drop to zero or not
    * after a promotion is applied.
    * @return true if the order total remains positive,
    * false if the order total is zero or negative.
    * @see com.ibm.commerce.marketing.promotion.policy.
    * PromotionPolicy#apply(
    *     com.ibm.commerce.marketing.promotion.runtime.PromotionContext
    *     com.ibm.commerce.marketing.promotion.runtime.PromotionExecutionRecord)
    */
    
    public boolean apply(
       PromotionContext context,
       PromotionExecutionRecord record)
       throws PromotionPolicyApplicationException{
          return (
          context.getOrderRunningTotal(MonetaryAdjustment.PRICE).signum()>0);
       }
    }

Tenga en cuenta que la clase PromotionPolicyBase proporciona los métodos toXML y fromXML básicos para las políticas de promoción que no tienen otro formulario XML serializado, sólo el formulario más sencillo que se ilustra a continuación:


<PromotionPolicy impl="fully qualified implementation class name">
   <PromotionPolicyKey>
      <PolicyName>Unique Name for the policy</PolicyName>
      <StoreKey>
         <DN>o=root organization<DN>
         <Identifier>BlueStore 202</Identifier>
      </StoreKey>
   </PromotionPolicyKey>
   <Status>Active</Status>
</PromotionPolicy>