Crear la plantilla XSLT para transformar el XML de promoción
Cree una plantilla XSLT personalizada para transformar el XML de promoción de autoría en el XML de promoción de tiempo de ejecución. Esta transformación tiene lugar cuando un usuario de negocio activa una promoción basada en su tipo de promoción personalizado.
Antes de empezar
- Cómo se almacenan y gestionan los datos de promoción
- Crear y registrar la plantilla XSL (esta es una lección de una guía de aprendizaje que proporciona un ejemplo descargable de una plantilla XSLT y luego explica su contenido)
Por qué y cuándo se efectúa esta tarea
- La sección de condición de compra del XML de promoción de tiempo de ejecución que ha modelado
- Los datos que ha determinado que son necesarios de la interfaz de usuario del Centro de gestión para este tipo de promoción concreto
Procedimiento
-
Cree la plantilla XSLT para el elemento del nuevo tipo de promoción que está personalizando. En la mayoría de los casos, este es el elemento <PurchaseCondition>.
Si desea utilizar una de las plantillas XSLT predeterminadas como punto de partida, las plantillas se almacenan en esta vía de acceso:
workspace_dir/WC/xml/config/com.ibm.commerce.promotion/template
La tabla siguiente correlaciona cada plantilla XSLT de condición de compra con su tipo de promoción predeterminado:
Plantillas XSLT correlacionadas con tipos de promoción predeterminados Plantilla XSLT de condición de compra Tipo de promoción predeterminado CategoryAllItemAmountOffPurchaseConditionTemplate.xsl Importe de descuento en el subtotal de las entradas de catálogo de una categoría CategoryAllItemFixedCostPurchaseConditionTemplate.xls Precio fijo en el subtotal de entradas de catálogo de una categoría CategoryAllItemPercentOffPurchaseConditionTemplate.xsl Porcentaje de descuento en el subtotal de las entradas de catálogo de una categoría CategoryFixedCostShippingPurchaseConditionTemplate.xls Compre las entradas de catálogo de la categoría X y llévese un precio fijo de envío CategoryPerItemAmountOffPurchaseConditionTemplate.xsl Importe de descuento en entradas de catálogo individuales de una categoría CategoryPerItemFixedCostPurchaseConditionTemplate.xls Precio fijo en entradas de catálogo individuales de una categoría CategoryPerItemPercentOffPurchaseConditionTemplate.xsl Porcentaje de descuento en entradas de catálogo individuales de una categoría CategoryPurchaseWithPurchasePercentOffPurchaseConditionTemplate.xls Compre entradas de catálogo X y obtenga un porcentaje de descuento en la entrada de catálogo Y CategorySameItemPercentOffPurchaseConditionTemplate.xsl Compre entradas de catálogo de la categoría X y obtenga un porcentaje de descuento en entradas de catálogo adicionales de la categoría X CategoryWithFreeGiftPurchaseConditionTemplate.xsl Compre entradas de catálogo de categoría X y llévese la entrada de catálogo Y gratis MultipleItemsGetYFixedAmountOffPurchaseConditionTemplate.xls Compre A (y B y C), obtenga un importe de descuento Y MultipleItemsGetYPercentOffPurchaseConditionTemplate.xls Compre A (y B y C) y obtenga un porcentaje de descuento en Y MultipleItemsPercentOffPurchaseConditionTemplate.xsl Compre A y B y obtenga un porcentaje de descuento en ambos OrderAmountOffPurchaseConditionTemplate.xsl Importe de descuento en el pedido OrderFixedAmountOffShippingPurchaseConditionTemplate.xsl Importe de descuento en el envío de un pedido OrderFixedCostShippingPurchaseConditionTemplate.xsl Precio fijo para el envío de un pedido OrderFreeGiftPurchaseConditionTemplate.xsl Regalo gratis con un pedido OrderPercentOffPurchaseConditionTemplate.xsl Porcentaje de descuento en el pedido ProductAllItemAmountOffPurchaseConditionTemplate.xsl Importe de descuento en el subtotal de las entradas de catálogo ProductAllItemFixedCostPurchaseConditionTemplate.xls Precio fijo en el subtotal de las entradas de catálogo ProductAllItemPercentOffPurchaseConditionTemplate.xsl Porcentaje de descuento en el subtotal de las entradas de catálogo ProductFixedCostShippingPurchaseConditionTemplate.xls Compre la entrada de catálogo X y llévese un precio fijo de envío ProductPerItemAmountOffPurchaseConditionTemplate.xsl Importe de descuento en entradas de catálogo individuales ProductPerItemFixedCostPurchaseConditionTemplate.xls Precio fijo en entradas de catálogo individuales ProductPerItemPercentOffPurchaseConditionTemplate.xsl Porcentaje de descuento en entradas de catálogo individuales ProductPurchaseWithPurchasePercentOffPurchaseConditionTemplate.xsl Compre la entrada de catálogo X y obtenga un porcentaje de descuento en la entrada de catálogo Y ProductSameItemPercentOffPurchaseConditionTemplate.xsl Compre una entrada de catálogo X y llévese otra entrada de catálogo X con un porcentaje de descuento ProductWithFreeGiftPurchaseConditionTemplate.xsl Compre la entrada de catálogo X y llévese la entrada de catálogo Y gratis Además de las plantillas XSLT de condición de compra, hay tres plantillas XSLT adicionales. Estas tres plantillas se utilizan para todos los tipos de promoción predeterminados.
Plantillas XSLT correlacionadas con tipos de promoción predeterminados Plantilla XSLT de condición de compra Finalidad DefaultTargetingConditionTemplate.xsl Transforma el XML de promoción de autoría para crear la sección targetingCondition del XML de promoción de tiempo de ejecución. DefaultCustomConditionsTemplate.xsl Transforma el XML de promoción de autoría para crear la sección customCondition del XML de promoción de tiempo de ejecución. DefaultBasePromotionTemplate.xsl Transforma el XML de promoción de autoría para crear la sección basePromotion del XML de promoción de tiempo de ejecución. -
Guarde su archivo de plantilla XSLT personalizado bajo el siguiente directorio:
workspace_dir/WC/xml/config/com.ibm.commerce.promotion-ext/template
Ejemplo
<?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>