Crear la definición de objeto hijo para el nuevo tipo de promoción

En esta lección definirá una nueva definición de objeto hijo para representar el nuevo elemento de promoción de condición de compra.

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

La definición de objeto hijo define una condición de compra para el nuevo tipo de promoción. Esta definición de objeto es una de las definiciones de elemento raíz que amplía el elemento raíz de condición de compra de promoción e incluye todos los subelementos de la promoción, como por ejemplo la condición de compra y la bonificación. En la herramienta Promociones, cada tipo de promoción tiene su propia definición de objeto. Esta definición de objeto debe ser una extensión de la definición PurchaseConditionObjectDefinition.

La condición de compra define los requisitos que debe cumplir un usuario para tener derecho a una promoción y recibir la bonificación. Para este nuevo tipo de promoción, la condición de compra es "Gaste $ en la entrada del catálogo X." Un usuario de empresa puede utilizar este nuevo tipo de promoción para crear una promoción que requiera que el cliente "Gaste $200 o más en entradas de catálogo de vajillas" para tener derecho a la bonificación.

Procedimiento

  1. Cree un archivo de definición de nuevo para la definición de objeto de elemento de promoción:
    1. En la vista Enterprise Explorer, expanda LOBTools > WebContent > WEB-INF > src > xml.
    2. Haga clic en el botón derecho del ratón en el directorio xml y, a continuación, Haga clic en Nuevo > Carpeta.
    3. Cree la siguiente estructura de directorios: mycompany > promotion > objectDefinitions > elements y Haga clic en Finalizar.
    4. Haga clic con el botón derecho en del ratón en el directorio elements y seleccioneNuevo > Archivo.
    5. Asigne un nombre al nuevo archivo ProductLevelFreeGiftPurchaseConditionObjectDefinition.xml.
    6. Haga clic en Finalizar para crear el archivo. Se abre el archivo en el editor XML predeterminado.
  2. Defina el archivo de definición de objeto de elemento de promoción, ProductLevelFreeGiftPurchaseConditionObjectDefinition.xml.
    1. Copie y pegue el ejemplo de definición de objeto siguiente en este archivo de definición.
      
      <?xml version="1.0" encoding="UTF-8"?>
      <Definitions>
      
      <PromotionElementObjectDefinition baseDefinition="cmc/promotion/PurchaseConditionObjectDefinition" 
       definitionName="cmc/promotion/ExtProductLevelFreeGiftPurchaseConditionObjectDefinition" 
      1 objectType="ProductLevelFreeGiftPurchaseCondition" package="cmc/promotion">
      <dependency localName="promotionResources" moduleName="cmc/promotion/PromotionResources"/>
      <dependency localName="ExtPromotionResources" moduleName="cmc/promotion/ExtPromotionResources"/>
      2<PromotionElementReferenceObjectDefinition baseDefinition="cmc/promotion/IdentifierCatalogEntryObjectDefinition" 
       package="cmc/promotion">
      <Xml name="template">
      3<elementType>IncludeCatalogEntryIdentifier</elementType>
      </Xml> 
      </PromotionElementReferenceObjectDefinition> 
      
      <PromotionElementReferenceObjectDefinition baseDefinition="cmc/promotion/IdentifierInheritedCatalogEntryObjectDefinition" package="cmc/promotion">
      <Xml name="template">
      <elementType>IncludeCatalogEntryIdentifier</elementType>
      </Xml> 
      </PromotionElementReferenceObjectDefinition> 
      
      <!-- property definition: The total price threshold for the promotion condition -->
      <PropertyDefinition displayName="${ExtPromotionResources.promotion_Minimum_purchase_TotalPrice}" minValue="1" 
       propertyName="BaseItemTotalPrice" required="true"/>
      
      <PromotionElementReferenceObjectDefinition baseDefinition="cmc/promotion/IdentifierGiftCatalogEntryObjectDefinition" package="cmc/promotion">
      <Xml name="template">
      <elementType>GiftCatalogEntryIdentifier</elementType>
      </Xml>	
      <!-- property definition: the quantity of each gift -->
      <PropertyDefinition displayName="${ExtPromotionResources.promotion_Free_gift_qty}" minValue="1" propertyName="giftQuantity" required="true"/> 
      </PromotionElementReferenceObjectDefinition> 
      
      <PromotionElementReferenceObjectDefinition baseDefinition="cmc/promotion/IdentifierInheritedGiftCatalogEntryObjectDefinition" 
       package="cmc/promotion">
      <Xml name="template">
      <elementType>GiftCatalogEntryIdentifier</elementType>
      </Xml>
      <!-- property definition: the quantity of each gift -->
      <PropertyDefinition displayName="${ExtPromotionResources.promotion_Free_gift_qty}" minValue="1" propertyName="giftQuantity" required="true"/> 
      </PromotionElementReferenceObjectDefinition> 
      
      <!-- Validator definition: The condition catentry set cannot be empty, at least one catentry should be assigned --> 
      <RequiredChildObjectValidator errorMessage="${promotionResources.promotion_error_AtLeastOneProduct}" 
       objectPath="Identifier_CatalogEntryGroup" validatorId="reqCatValidator"/>
      
      <!-- Validator definition: The gift set cannot be empty, at least one gift should be assigned -->
      <RequiredChildObjectValidator errorMessage="${promotionResources.promotion_error_AtLeastOneGift}" 
       objectPath="Identifier_GiftCatalogEntryGroup" validatorId="reqGiftValidator"/>  
      </PromotionElementObjectDefinition>
      </Definitions>
      1 objectType
      Este atributo define el nombre del elemento de interfaz de usuario de esta condición de compra y se almacena en la columna SUBTYPE de la tabla PX_ELEMENT. La condición de compra consta de los elementos de promoción hijo, incluidas las definiciones de elementos de promoción de compra y bonificación predefinidas.
      2 PromotionElementReferenceObjectDefinition
      La primera instancia de este elemento en el ejemplo de código hace referencia al objeto de entrada de catálogo. Para este tipo de promoción, esta entrada de catálogo es lo que el cliente debe comprar para poder tener derecho a la promoción. La segunda instancia del elemento PromotionElementReferenceObjectDefinition se incluye para dar soporte a entradas de catálogo heredadas de una tienda de elementos de catálogo maestra. La tercera instancia de este elemento también hace referencia al objeto de entrada de catálogo; en este caso, la entrada de catálogo es un regalo gratuito. La última instancia del elemento PromotionElementReferenceObjectDefinition se incluye para dar soporte a entradas de catálogo de regalo heredadas de una tienda de elementos de catálogo maestra.
      3 elementType
      Este elemento se encuentra dentro del elemento XML. Se almacenará en la columna TYPE de la tabla PX_ELEMENT cuando se cree la promoción y se utilizará para componer el XML de creación de promoción cuando se active.
    2. Guarde y cierre el archivo.
      El nuevo objeto amplía la definición PurchaseConditionObjectDefinition existente.
  3. Ahora que la condición de compra personalizada ya está definida, añada la nueva definición de objeto al objeto principal de promoción.
    1. Expanda el directorio LOBTools > WebContent > WEB-INF > src > xml > commerce > promotion > objectDefinitions.
    2. Abra el archivo PromotionPrimaryObjectDefinition.xml. Este archivo de definición de objeto primario contiene toda la información sobre una promoción en el Management Center. Observe los servicios, propiedades y objetos hijo definidos aquí.
    3. Localice las líneas siguientes, que son declaraciones de otras definiciones de objetos de condiciones de compra:
      
      <PromotionElementObjectDefinition baseDefinition="cmc/promotion/ProductLevelFixedCostDiscountPurchaseConditionObjectDefinition" 
       package="cmc/promotion"/>
      <PromotionElementObjectDefinition baseDefinition="cmc/promotion/ProductLevelPerItemFixedCostDiscountPurchaseConditionObjectDefinition" 
       package="cmc/promotion"/>
      
    4. Añada la condición de compra personalizada insertando el código siguiente bajo la sección anterior:
      
      <!-- Customization: New Promotion Type -->
      <PromotionElementObjectDefinition baseDefinition="cmc/promotion/ExtProductLevelFreeGiftPurchaseConditionObjectDefinition" 
       package="cmc/promotion"/>
      
    5. Guarde y cierre el archivo.

      Ahora ha creado la definición del objeto de elemento de promoción. Cuando los usuarios de la empresa crean nuevas promociones en el Management Center, la definición del objeto de elemento de promoción habilitará los datos del elemento de promoción para almacenarlos en dos tablas: PX_ELEMENT y PX_ELEMENTNVP. Los datos almacenados en estas dos tablas tienen una estructura de árbol. Cuando el usuario de la empresa activa la promoción, se lleva a cabo las acciones siguientes:

      1. HCL Commerce lee los datos almacenados en las tablas PX_ELEMENT y PX_ELEMENTNVP y crea el XML de creación de promoción.
      2. Las plantillas XSL transforman el XML de promoción de autoría en el XML de promoción de tiempo de ejecución. Estas plantillas XSL se describen en la lección Crear y registrar la plantilla XSL.
      3. El XML de promoción de tiempo de ejecución se guarda en la tabla PX_PROMOTION.
      4. El motor de promociones utiliza posteriormente el XML de promoción de tiempo de ejecución para evaluar las promociones durante el flujo de compras.
      El XML de promoción de autoría es una representación simplificada de una promoción en el Centro de gestión. El siguiente es un XML de promoción de autoría de ejemplo:
      
      <PurchaseCondition 
        impl="com.ibm.commerce.marketing.promotion.condition.PurchaseCondition">
        <Pattern impl="com.ibm.commerce.marketing.promotion.condition.Pattern">
        <UniqueConstraints>false</UniqueConstraints>
        <Constraint impl="com.ibm.commerce.marketing.promotion.condition.Constraint">
        <WeightedRange impl="com.ibm.commerce.marketing.promotion.condition.WeightedRange">
        <LowerBound>1</LowerBound>
        <UpperBound>-1</UpperBound>
        <Weight>1</Weight>
        </WeightedRange>
        <FilterChain impl="com.ibm.commerce.marketing.promotion.condition.FilterChain">
        <Filter impl="com.ibm.commerce.marketing.promotion.condition.MultiSKUFilter">
        <IncludeCatEntryKey>
        <CatalogEntryKey>
        <SKU>HKT030_3001</SKU>
        <DN>ou=asset store organization,o=extended sites organization,o=root organization</DN>
        </CatalogEntryKey>
        </IncludeCatEntryKey>
        <IncludeCatEntryKey>
        <CatalogEntryKey>
        <SKU>HKT030_3002</SKU>
        <DN>ou=asset store organization,o=extended sites organization,o=root organization</DN>
        </CatalogEntryKey>
        </IncludeCatEntryKey>
        </Filter>
        </FilterChain>
        </Constraint>
        </Pattern>
        <Distribution impl="com.ibm.commerce.marketing.promotion.reward.Distribution">
        <Type>Volume</Type>
        <Base>Cost</Base>
        <Currency>USD</Currency>
        <Range impl="com.ibm.commerce.marketing.promotion.reward.DistributionRange">
        <UpperBound>-1</UpperBound>
        <LowerBound>200</LowerBound>
        <UpperBoundIncluded>true</UpperBoundIncluded>
        <LowerBoundIncluded>true</LowerBoundIncluded>
        <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.DummyFilter"/>
        </FilterChain>
        <Adjustment impl="com.ibm.commerce.marketing.promotion.reward.FreePurchasableGiftAdjustment">
        <GiftItem>
        <CatalogEntryKey>
        <SKU>HTA029_291001</SKU>
        <DN>ou=asset store organization,o=extended sites organization,o=root organization</DN>
        </CatalogEntryKey>
        </GiftItem>
        <Quantity>4</Quantity>
        <AddStrategy>1</AddStrategy>
        <AdjustmentType>wholeOrder</AdjustmentType>
        </Adjustment>
        </AdjustmentFunction>
        <RewardPolicy>ALL</RewardPolicy>
        </Reward>
        </RewardChoice>
        </Range>
        <PatternFilter impl="com.ibm.commerce.marketing.promotion.condition.DummyPatternFilter"/>
        </Distribution>
      </PurchaseCondition>
      

Resultados

En esta lección, ha creado la definición de objeto para el nuevo tipo de promoción. En la lección siguiente, creará la plantilla para la interfaz de usuario de la promoción.