Création du modèle XSLT pour transformation du code XML de la promotion
Créez un modèle XSLT personnalisé afin de transformer le code XML de création de la promotion en code XML d'exécution. Cette transformation intervient lorsqu'un professionnel active une promotion basée sur votre type de promotion personnalisé.
Avant de commencer
- Stockage et gestion des données de promotion
- Création et enregistrement du modèle XSL (leçon d'un tutoriel fournissant un exemple téléchargeable de modèle XSLT et expliquant son contenu)
Pourquoi et quand exécuter cette tâche
- La section de condition d'achat dans le code XML d'exécution de promotion que vous avez modélisée
- Les données déterminées comme requises pour ce type de promotion spécifique depuis l'interface utilisateur du Centre de gestion
Procédure
-
Créez le modèle XSLT pour l'élément du nouveau type de promotion que vous personnalisez. Dans la plupart des cas, il s'agit de l'élément <PurchaseCondition>.
Si vous désirez utiliser comme point de départ l'un des modèles XSLT par défaut, ceux-ci sont stockés sous l'emplacement suivant :
workspace_dir/WC/xml/config/com.ibm.commerce.promotion/template
Le tableau suivant met en correspondance chaque modèle XSLT de condition d'achat avec son type de promotion par défaut :
Modèles XSLT mappés aux types de promotion par défaut Modèle XSLT de condition d'achat Type de promotion par défaut CategoryAllItemAmountOffPurchaseConditionTemplate.xsl Montant déduit du sous-total des entrées de catalogue d'une catégorie CategoryAllItemFixedCostPurchaseConditionTemplate.xls Prix fixe sur le sous-total des entrées de catalogue d'une catégorie CategoryAllItemPercentOffPurchaseConditionTemplate.xsl Pourcentage de remise sur le sous-total des entrées de catalogue d'une catégorie CategoryFixedCostShippingPurchaseConditionTemplate.xls Pour l'achat d'entrées de catalogue de la catégorie X, frais de port fixes CategoryPerItemAmountOffPurchaseConditionTemplate.xsl Montant déduit sur des entrées de catalogue spécifiques d'une catégorie CategoryPerItemFixedCostPurchaseConditionTemplate.xls Prix fixe sur les entrées de catalogue individuelles d'une catégorie CategoryPerItemPercentOffPurchaseConditionTemplate.xsl Pourcentage de remise sur des entrées de catalogue spécifiques d'une catégorie CategoryPurchaseWithPurchasePercentOffPurchaseConditionTemplate.xls Pour l'achat d'entrées de catalogue de la catégorie X, pourcentage de remise sur l'entrée de catalogue Y CategorySameItemPercentOffPurchaseConditionTemplate.xsl Pour l'achat d'entrées de catalogue de la catégorie X, pourcentage de remise sur les entrées de catalogue supplémentaires de la catégorie X CategoryWithFreeGiftPurchaseConditionTemplate.xsl Pour l'achat d'entrées de catalogue de la catégorie X, entrée de catalogue Y offerte MultipleItemsGetYFixedAmountOffPurchaseConditionTemplate.xls Pour l'achat de A (et B et C), obtenez une remise sur Y MultipleItemsGetYPercentOffPurchaseConditionTemplate.xls Pour l'achat de A (et B et C), obtenez une remise en pourcentage sur Y MultipleItemsPercentOffPurchaseConditionTemplate.xsl Pour l'achat de A et de B, pourcentage de remise sur les deux OrderAmountOffPurchaseConditionTemplate.xsl Montant déduit d'une commande OrderFixedAmountOffShippingPurchaseConditionTemplate.xsl Remise sur frais de port d'une commande OrderFixedCostShippingPurchaseConditionTemplate.xsl Frais de port fixes sur l'expédition d'une commande OrderFreeGiftPurchaseConditionTemplate.xsl Cadeau offert avec une commande OrderPercentOffPurchaseConditionTemplate.xsl Pourcentage de remise sur une commande ProductAllItemAmountOffPurchaseConditionTemplate.xsl Montant déduit du sous-total des entrées de catalogue ProductAllItemFixedCostPurchaseConditionTemplate.xls Prix fixe sur le sous-total des entrées de catalogue ProductAllItemPercentOffPurchaseConditionTemplate.xsl Pourcentage de remise sur le sous-total des entrées de catalogue ProductFixedCostShippingPurchaseConditionTemplate.xls Pour l'achat de l'entrée de catalogue X, frais de port fixes ProductPerItemAmountOffPurchaseConditionTemplate.xsl Montant déduit sur des entrées de catalogue spécifiques ProductPerItemFixedCostPurchaseConditionTemplate.xls Prix fixe sur les entrées de catalogue individuelles ProductPerItemPercentOffPurchaseConditionTemplate.xsl Pourcentage de remise sur des entrées de catalogue spécifiques ProductPurchaseWithPurchasePercentOffPurchaseConditionTemplate.xsl Pour l'achat de l'entrée de catalogue X, pourcentage de remise sur l'entrée de catalogue Y ProductSameItemPercentOffPurchaseConditionTemplate.xsl Pour l'achat d'une entrée de catalogue X, pourcentage de remise sur les entrées X supplémentaires ProductWithFreeGiftPurchaseConditionTemplate.xsl Pour l'achat d'entrée de catalogue X, entrée de catalogue Y offerte Outre le modèle XSLT de condition d'achat, trois autres modèles XSLT sont fournis. Ces derniers sont utilisés pour tous les types de promotion par défaut.
Modèles XSLT mappés aux types de promotion par défaut Modèle XSLT de condition d'achat Objectif DefaultTargetingConditionTemplate.xsl Transforme le code XML de création de promotion afin de générer la section targetingCondition du code XML d'exécution de la promotion. DefaultCustomConditionsTemplate.xsl Transforme le code XML de création de promotion afin de générer la section customCondition du code XML d'exécution de la promotion. DefaultBasePromotionTemplate.xsl Transforme le code XML de création de promotion afin de générer la section basePromotion du code XML d'exécution de la promotion. -
Sauvegardez votre fichier de modèle XSLT personnalisé sous le répertoire suivant :
workspace_dir/WC/xml/config/com.ibm.commerce.promotion-ext/template
Exemple
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- handles purchase condition -->
<xsl:template name="PurchaseConditionTemplate" match="/">
<PurchaseCondition impl="com.ibm.commerce.marketing.promotion.condition.PurchaseCondition">
<Pattern impl="com.ibm.commerce.marketing.promotion.condition.Pattern">
<Constraint impl="com.ibm.commerce.marketing.promotion.condition.Constraint">
<WeightedRange impl="com.ibm.commerce.marketing.promotion.condition.WeightedRange">
<LowerBound>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Purchase/Data/Quantity" />
</LowerBound>
<UpperBound>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Purchase/Data/Quantity" />
</UpperBound>
<Weight>1</Weight>
</WeightedRange>
<FilterChain impl="com.ibm.commerce.marketing.promotion.condition.FilterChain">
<Filter impl="com.ibm.commerce.marketing.promotion.condition.MultiSKUFilter">
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/Purchase/IncludeCatalogEntryIdentifier">
<IncludeCatEntryKey>
<xsl:call-template name="CatalogEntryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="sku" select="Data/SKU" />
</xsl:call-template>
</IncludeCatEntryKey>
</xsl:for-each>
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/Purchase/ExcludeCatalogEntryIdentifier">
<ExcludeCatEntryKey>
<xsl:call-template name="CatalogEntryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="sku" select="Data/SKU" />
</xsl:call-template>
</ExcludeCatEntryKey>
</xsl:for-each>
</Filter>
</FilterChain>
</Constraint>
<Constraint impl="com.ibm.commerce.marketing.promotion.condition.Constraint">
<WeightedRange impl="com.ibm.commerce.marketing.promotion.condition.WeightedRange">
<LowerBound>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Reward/Data/Quantity" />
</LowerBound>
<UpperBound>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Reward/Data/Quantity" />
</UpperBound>
<Weight>1</Weight>
</WeightedRange>
<FilterChain impl="com.ibm.commerce.marketing.promotion.condition.FilterChain">
<Filter impl="com.ibm.commerce.marketing.promotion.condition.MultiSKUFilter">
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/Reward/IncludeCatalogEntryIdentifier">
<IncludeCatEntryKey>
<xsl:call-template name="CatalogEntryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="sku" select="Data/SKU" />
</xsl:call-template>
</IncludeCatEntryKey>
</xsl:for-each>
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/Reward/ExcludeCatalogEntryIdentifier">
<ExcludeCatEntryKey>
<xsl:call-template name="CatalogEntryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="sku" select="Data/SKU" />
</xsl:call-template>
</ExcludeCatEntryKey>
</xsl:for-each>
</Filter>
</FilterChain>
</Constraint>
</Pattern>
<Distribution impl="com.ibm.commerce.marketing.promotion.reward.Distribution">
<Type>Volume</Type>
<Base>Quantity</Base>
<Currency>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/Currency" />
</Currency>
<Range impl="com.ibm.commerce.marketing.promotion.reward.DistributionRange">
<LowerBound>1</LowerBound>
<UpperBound>-1</UpperBound>
<LowerBoundIncluded>true</LowerBoundIncluded>
<UpperBoundIncluded>false</UpperBoundIncluded>
<RewardChoice>
<Reward impl="com.ibm.commerce.marketing.promotion.reward.DefaultReward">
<AdjustmentFunction impl="com.ibm.commerce.marketing.promotion.reward.AdjustmentFunction">
<FilterChain impl="com.ibm.commerce.marketing.promotion.condition.FilterChain">
<Filter impl="com.ibm.commerce.marketing.promotion.condition.MultiSKUFilter">
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/Reward/IncludeCatalogEntryIdentifier">
<IncludeCatEntryKey>
<xsl:call-template name="CatalogEntryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="sku" select="Data/SKU" />
</xsl:call-template>
</IncludeCatEntryKey>
</xsl:for-each>
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/Reward/ExcludeCatalogEntryIdentifier">
<ExcludeCatEntryKey>
<xsl:call-template name="CatalogEntryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="sku" select="Data/SKU" />
</xsl:call-template>
</ExcludeCatEntryKey>
</xsl:for-each>
</Filter>
</FilterChain>
<Adjustment impl="com.ibm.commerce.marketing.promotion.reward.FixedCostAdjustment">
<FixedCost>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/FixedCost" />
</FixedCost>
<AdjustmentType>IndividualAffectedItems</AdjustmentType>
<Currency>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/Currency" />
</Currency>
</Adjustment>
</AdjustmentFunction>
</Reward>
</RewardChoice>
</Range>
<PatternFilter impl="com.ibm.commerce.marketing.promotion.condition.DummyPatternFilter">
</PatternFilter>
</Distribution>
</PurchaseCondition>
</xsl:template>
<!-- handles CatalogEntryKey -->
<xsl:template name="CatalogEntryKeyTemplate">
<xsl:param name="dn" />
<xsl:param name="sku" />
<CatalogEntryKey>
<DN>
<xsl:value-of select="$dn" />
</DN>
<SKU>
<xsl:value-of select="$sku" />
</SKU>
</CatalogEntryKey>
</xsl:template>
</xsl:transform>
<Constraint impl="com.ibm.commerce.marketing.promotion.condition.Constraint">
<WeightedRange impl="com.ibm.commerce.marketing.promotion.condition.WeightedRange">
<LowerBound>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/BaseQuantity" />
</LowerBound>
<UpperBound>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/BaseQuantity" />
</UpperBound>
<Weight>1</Weight>
</WeightedRange>
<FilterChain impl="com.ibm.commerce.marketing.promotion.condition.FilterChain">
<Filter impl="com.ibm.commerce.marketing.promotion.condition.CategoryFilter">
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/IncludeCategoryIdentifier">
<IncludeCategory>
<xsl:call-template name="CategoryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="name" select="Data/Name" />
</xsl:call-template>
</IncludeCategory>
</xsl:for-each>
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/ExcludeCategoryIdentifier">
<ExcludeCategory>
<xsl:call-template name="CategoryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="name" select="Data/Name" />
</xsl:call-template>
</ExcludeCategory>
</xsl:for-each>
</Filter>
<xsl:choose>
<xsl:when test="PromotionData/Elements/PurchaseCondition/ExcludeCatalogEntryIdentifier">
<!-- Only populate when there are exclude items -->
<Filter impl="com.ibm.commerce.marketing.promotion.condition.MultiSKUFilter">
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/ExcludeCatalogEntryIdentifier">
<ExcludeCatEntryKey>
<xsl:call-template name="CatalogEntryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="sku" select="Data/SKU" />
</xsl:call-template>
</ExcludeCatEntryKey>
</xsl:for-each>
</Filter>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="PromotionData/Elements/PurchaseCondition/CatalogEntryAttributeRule">
<!-- Only populate when there are attributes -->
<Filter impl="com.ibm.commerce.marketing.promotion.condition.CatalogEntryAttributeFilter">
<AssociatedLanguage><xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/Language" />
</AssociatedLanguage>
<CaseSensitive>false</CaseSensitive>
<SupportAttributeWithNoAssociatedLanguage>true</SupportAttributeWithNoAssociatedLanguage>
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/CatalogEntryAttributeRule">
<xsl:call-template name="CatalogEntryAttributeRuleTemplate">
<xsl:with-param name="attributeRule" select="." />
</xsl:call-template>
</xsl:for-each>
</Filter>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="PromotionData/Elements/PurchaseCondition/IncludePaymentTypeIdentifier">
<xsl:choose>
<xsl:when test="PromotionData/Elements/PurchaseCondition/IncludePaymentTypeIdentifier/Data/PaymentType != 'Any'">
<Filter impl="com.ibm.commerce.marketing.promotion.condition.PaymentTypeFilter">
<IncludePaymentType>
<PaymentMethodName><xsl:value-of
select="PromotionData/Elements/PurchaseCondition/IncludePaymentTypeIdentifier/Data/PaymentType" />
</PaymentMethodName>
</IncludePaymentType>
</Filter>
</xsl:when>
</xsl:choose>
</xsl:when>
</xsl:choose>
<Filter impl="com.ibm.commerce.marketing.promotion.condition.ItemSortingFilter">
<SortingMethod>PriceHighToLow</SortingMethod>
<SplitMethod>SplitEndToStart</SplitMethod>
</Filter>
</FilterChain>
</Constraint>
<Constraint impl="com.ibm.commerce.marketing.promotion.condition.Constraint">
<WeightedRange impl="com.ibm.commerce.marketing.promotion.condition.WeightedRange">
<LowerBound>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/RewardQuantity" />
</LowerBound>
<UpperBound>
<xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/RewardQuantity" />
</UpperBound>
<Weight>1</Weight>
</WeightedRange>
<FilterChain impl="com.ibm.commerce.marketing.promotion.condition.FilterChain">
<Filter impl="com.ibm.commerce.marketing.promotion.condition.CategoryFilter">
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/IncludeCategoryIdentifier">
<IncludeCategory>
<xsl:call-template name="CategoryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="name" select="Data/Name" />
</xsl:call-template>
</IncludeCategory>
</xsl:for-each>
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/ExcludeCategoryIdentifier">
<ExcludeCategory>
<xsl:call-template name="CategoryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="name" select="Data/Name" />
</xsl:call-template>
</ExcludeCategory>
</xsl:for-each>
</Filter>
<xsl:choose>
<xsl:when test="PromotionData/Elements/PurchaseCondition/ExcludeCatalogEntryIdentifier">
<!-- Only populate when there are exclude items -->
<Filter impl="com.ibm.commerce.marketing.promotion.condition.MultiSKUFilter">
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/ExcludeCatalogEntryIdentifier">
<ExcludeCatEntryKey>
<xsl:call-template name="CatalogEntryKeyTemplate">
<xsl:with-param name="dn" select="Data/DN" />
<xsl:with-param name="sku" select="Data/SKU" />
</xsl:call-template>
</ExcludeCatEntryKey>
</xsl:for-each>
</Filter>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="PromotionData/Elements/PurchaseCondition/CatalogEntryAttributeRule">
<!-- Only populate when there are attributes -->
<Filter
impl="com.ibm.commerce.marketing.promotion.condition.CatalogEntryAttributeFilter">
<AssociatedLanguage><xsl:value-of select="PromotionData/Elements/PurchaseCondition/Data/Language" />
</AssociatedLanguage>
<CaseSensitive>false</CaseSensitive>
<SupportAttributeWithNoAssociatedLanguage>true</SupportAttributeWithNoAssociatedLanguage>
<xsl:for-each select="PromotionData/Elements/PurchaseCondition/CatalogEntryAttributeRule">
<xsl:call-template name="CatalogEntryAttributeRuleTemplate">
<xsl:with-param name="attributeRule" select="." />
</xsl:call-template>
</xsl:for-each>
</Filter>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="PromotionData/Elements/PurchaseCondition/IncludePaymentTypeIdentifier">
<xsl:choose>
<xsl:when test="PromotionData/Elements/PurchaseCondition/IncludePaymentTypeIdentifier/Data/PaymentType != 'Any'">
<Filter impl="com.ibm.commerce.marketing.promotion.condition.PaymentTypeFilter">
<IncludePaymentType>
<PaymentMethodName><xsl:value-of
select="PromotionData/Elements/PurchaseCondition/IncludePaymentTypeIdentifier/Data/PaymentType" />
</PaymentMethodName>
</IncludePaymentType>
</Filter>
</xsl:when>
</xsl:choose>
</xsl:when>
</xsl:choose>
<Filter impl="com.ibm.commerce.marketing.promotion.condition.ItemSortingFilter">
<SortingMethod>PriceLowToHigh</SortingMethod>
</Filter>
</FilterChain>
</Constraint>