Filtres personnalisés

Les filtres sont utilisés pour construire des promotions, comme indiqué dans la rubrique Anatomie d'une promotion. Le modèle XML d'un filtre devient partie du modèle XML de la promotion. Une fois que vous implémentez un filtre personnalisé, vous pouvez l'utiliser pour composer vos promotions personnalisées. Les filtres personnalisés doivent implémenter l'interface com.ibm.commerce.marketing.promotion.condition.Filter. Sa définition figure ci-dessous :


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

import com.ibm.commerce.marketing.promotion.runtime.LineItemSet;
import com.ibm.commerce.marketing.promotion.runtime.PromotionContext;
import com.ibm.commerce.marketing.promotion.xml.XMLizable;

/**
 * Contains the IBM Copyright information for HCL Commerce.
 * @author changl
 */

public interface Filter extends XMLizable {
   /**
    * IBM copyright notice field.
    */
    public static final String COPYRIGHT = 
          com.ibm.commerce.copyright.IBMCopyright.SHORT_COPYRIGHT;
    
    /**
     * This method filters the <code>LineItemSet</code>.
     * @param input <code>LineItemSet</code>
     * @param context <code>PromotionContext</code>
     * @return <code>LineItemSet</code>
     */

    LineItemSet filter(LineItemSet input, PromotionContext context);
}

La logique de votre filtre est encapsulée dans la méthode de filtrage déclarée dans l'interface Filter. Il s'agit de la méthode worker. Elle reçoit en entrée un LineItemSet et renvoie un sous-ensemble du LineItemSet en entrée. L'élément PromotionContext est transmis à cette méthode et fournit à la méthode de filtrage le contexte dans lequel opérer.

Cette interface est une sous-classe de XMLizable. Par conséquent, vous devez développer un modèle XML pour votre nouveau filtre. Une liste d'exemples de modèles XML pour les types de filtre existants est fournie dans Exemple : fragments XML de filtre. L'exemple ci-dessous en fournit une illustration :


<Filter impl="com.ibm.commerce.marketing.promotion.condition.CategoryFilter>
    <IncludeCategory>
       <CategoryKey>
          <DN>o=root organization</DN>
          <Name>Store 201 Pants</Name>
       </CategoryKey>
    </IncludeCategory>
    <ExcludeCategory>
       <CategoryKey>
          <DN>o=root organization</DN>
          <Name>Store 201 Sweaters</Name>
       </CategoryKey>
    </ExcludeCategory>
</Filter>

Voue devez remplacer la valeur de l'attribut impl de l'élément Filter par le nom de classe complètement qualifié de votre filtre personnalisé. Le modèle de contenu de votre élément Filter est complètement extensible.

Remarque : toutes les implémentations de filtre personnalisé doivent autoriser les unités d'exécution multiples et être réentrantes.