Definir una clase del gestor de widgets de Commerce Composer

Un gestor de widgets maneja la persistencia y recuperación de datos ampliados de widget distintos de las propiedades de widgets básicas. Puede utilizar un gestor de widgets para añadir más lógica al crear, actualizar o eliminar un widget.

Cuando un usuario del Management Center guarda valores de propiedades de widget, los valores para las propiedades se guardan en la tabla de base de datos PLWIDGETNVP. Si el widget tiene propiedades que deben tener valores guardados en una tabla distinta a la tabla PLWIDGETNVP, defina una clase de gestor de widgets para que gestione cómo se guardan los valores para las propiedades de widgets. La clase de gestor de widgets también se utiliza para recuperar de la base de datos la información de valores de propiedades guardada. Al definir la clase de gestor de widgets, debe ampliar la clase de gestor de widgets predeterminada. También debe registrar el gestor de widgets personalizado en el XML de definición para el widget. Si el widget tiene valores de propiedad que se guardan únicamente en la tabla PLWIDGETNVP, no es necesario definir una clase de gestor personalizado. De forma predeterminada, cuando no se ha definido ninguna clase de gestor de widget para un widget, el widget utiliza la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultWidgetManage.

El diagrama siguiente muestra la jerarquía de las clases de gestor de widget que se utilizan dentro de la infraestructura de Commerce Composer. Al crear un widget personalizada, utilice el gestor de widget que amplía el menor número de clases y sigue facilitando la funcionalidad que necesita para manejar las propiedades de su widget. El widget puede utilizar cualquiera de las clases de gestor de widget en el diagrama siguiente; no obstante, se resaltan las cuatro clase de gestor de widget más común que puede considerar utilizar.
Herencia de clases de gestor de widgets.
Donde
1 DefaultWidgetManager
Utilizado por todos los widgets que no necesitan escribir datos de propiedad en el subsistema de marketing. Este gestor es la clase de gestor widget predeterminada que está asociada a widgets cuando no se ha especificado ninguna clase de gestor de widget. Este gestor de widget proporciona funciones de validación básicas basadas en la declaración de propiedad de widget dentro del XML de definición de widget. Este gestor de widget Lee y mantiene widget información de par nombre-valor en la tabla de base de datos PLWDIGETNVP.
2 MarketingWidgetManager
Se utiliza cuando un widget necesita un título de visualización o necesita una zona de e-marketing asociada al widget. Esta clase de gestor de widget es el gestor de widget base para todos los widgets que utilizan objetos de marketing. Este widget Manager proporciona funciones comunes como la creación de zonas de e-marketing para un widget. Este gestor de widget permite que los widgets incluyan un título de visualización. Si el widget necesita una zona de e-marketing o un título de visualización, considere el uso de este gestor de widget.
3 DefaultContentWidgetManager
Se utiliza cuando un widget debe guardar los productos, categorías o contenido asociados. Cada widget que utiliza contenido predeterminado de marketing puede utilizar esta superclase para crear, leer, actualizar y eliminar contenido de marketing predeterminado. Este gestor de widget hace referencia al contenido asociado utilizando datos ampliados del widget. El contenido predeterminado puede ser categorías, productos o contenido de marketing.
4 DefaultContentAndWebActivityWidgetManager
Se utiliza cuando un widget debe tener una actividad Web asociada para definir reglas de marketing. Si un widget utiliza una actividad Web para rellenar el widget, esta clase gestiona la zona de e-marketing que asocia el widget con la actividad Web.
Puede revisar las clases de gestor de widget para los widgets que se proporcionan de forma predeterminada para ayudarle a crear su propia clase personalizada. La tabla siguiente identifica las clases de gestor de widget que están disponibles de forma predeterminada:

Clases de gestor de widgets predeterminadas para widgets de Commerce Composer.

Clases de gestor de widgets Widgets que utilizan la clase
com.ibm.commerce.pagelayout.widget.management.impl.CategoryRecommendationWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager.

  • Widget de Recomendación de categorías
com.ibm.commerce.pagelayout.widget.management.impl.ContentRecommendationWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager.

  • Widget de Recomendación de contenido
com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentWidgetManager.

Ningún widget utiliza directamente esta clase. Sin embargo, algunos widgets utilizan una clase de gestor que amplía esta clase.
com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager.

Ningún widget utiliza directamente esta clase. Sin embargo, algunos widgets utilizan una clase de gestor que amplía esta clase.
com.ibm.commerce.pagelayout.widget.management.impl.DefaultWidgetManager Los widgets siguientes utilizan la clase de gestor de widget predeterminada para manejar las propiedades que se han definido para el widget. De forma predeterminada, no todos los widgets tienen propiedades definidas.
  • Widget de Elementos asociados
  • Widget de Indicación de ruta
  • Widget de Navegación de categorías
  • Widget de Componentes
  • Widget de Atributos de definición
  • Widget de Atributos descriptivos
  • Widget de Descuentos
  • Widget de Zona de E-Marketing
  • Widget de Actividad de Facebook
  • Widget Me gusta de Facebook
  • Widget de Navegación por facetas
  • Widget de Imagen de tamaño normal
  • Widget de Cabecera
  • Widget de Disponibilidad de inventario
  • Widget de Descripción completa
  • Widget de Asociaciones de comercialización
  • Widget de nombre, número de pieza y precio
  • Widget de Resumen de búsqueda
  • Widget de Acciones del comprador
  • Widget de Descripción breve
  • Widget de Lista de contenido del sitio
  • Widget de Mapa del sitio
com.ibm.commerce.pagelayout.widget.management.impl.IBMProductRecommendationsWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager.

  • Widget de IBM Product Recommendations
com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultWidgetManager.

Ningún widget utiliza directamente esta clase. Sin embargo, algunos widgets utilizan una clase de gestor que amplía esta clase.
com.ibm.commerce.pagelayout.widget.management.impl.ProductListingWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentWidgetManager.

  • Widget de Lista de entradas de catálogo
com.ibm.commerce.pagelayout.widget.management.impl.ProductRecommendationWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager.

  • Widget de Recomendación de entradas de catálogo
com.ibm.commerce.pagelayout.widget.management.impl.RichTextWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager.

  • Widget de Editor de texto
com.ibm.commerce.pagelayout.widget.management.impl.RotatingContentWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager.

  • Widget de Carrusel de contenido
com.ibm.commerce.pagelayout.widget.management.impl.URLLinkWidgetManager

Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager.

  • Widget de Enlaces
Para ver ejemplos de las propiedades que estas clases manejan para los widgets que están disponibles de forma predeterminada con HCL Commerce, consulte Propiedades de widget de Commerce Composer.

Procedimiento

  1. Crea un archivo para definir la clase de implementación para el gestor de widgets. En el nuevo archivo, amplíe la clase DefaultWidgetManager.
    Para ampliar la clase DefaultWidgetManager, añada el siguiente código en el nuevo archivo:
    /**
    * This is the widget manager associated with my custom widget.
    * It creates, updates, deletes and gets data for my custom widget.
    */
    public class CustomWidgetManager extends DefaultWidgetManager {
  2. Sustituya uno o varios de los métodos de la clase DefaultWidgetManager para definir cómo debe manejar la clase de gestor las propiedades para su widget.
    Estos métodos incluyen los siguientes métodos:
    • createExtendedData
    • updateExtendedData
    • deleteExtendedData
    • retrieveExtendedData
    Dentro de estos métodos se incluyen los siguientes parámetros:
    LayoutType
    El nombre Layout que se pasa.
    WidgetType
    La parte del nombre del nombre Layout que representa el widget.
    ExtendedDataType
    Un elemento de la parte del nombre WidgetType. Contiene los datos que se van a crear.
    PageLayoutWidget
    El objeto de datos físico del widget. Tiene todos los datos almacenados en la base de datos para este widget.
    Por ejemplo, el método siguiente altera temporalmente el método createExtendedData para definir cómo crear un enlace de URL para un widget:
    public void createExtendedData(LayoutType aLayout, WidgetType aWidget, ExtendedDataType aExtData, PageLayoutWidget aWidgetSDO)
    throws LayoutException {
    
    // Always call super method first so that common extended data type will be handled.
    super.createExtendedData(aLayout, aWidget, aExtData, aWidgetSDO);
    
    String dataType = aExtData.getDataType();
    // Check if the extended data type is 'IBM_CustomURL'
    if (PageLayoutFacadeConstants.WIDGET_EXT_DATA_TYPE_CUSTOM_URL.equals(dataType)) {
    String uniqueId = createURLLink(aWidget, aExtData, aWidgetSDO);
    
    // Return the unique id of the extended data back.
    aExtData.setUniqueID(uniqueId);
    }
    
    El método createURLLink llama al servicio de marketing para crear un contenido de marketing para almacenar la URL.
  3. Registre el gestor de widgets estableciendo el atributo widget-manager para el widget en el archivo XML de definición de widget.
    Utilice el siguiente formato para especificar una clase de gestor de widget:
    <widget-manager j2ee=""/>
    
    Por ejemplo, el siguiente código especifica la clase del gestor de widgets
    <Definition>
    <widget-manager j2ee="com.ibm.commerce.pagelayout.widget.management.impl.URLLinkWidgetManager"/>
    ...
    </Definition>
    El siguiente código es un archivo XML de definición de widget de ejemplo que define un gestor de widgets para el widgets de enlaces:
    <Definition>
      <widget-property name="widgetRestrictionGroups">
        <value>AnyPage,CatalogEntryPage,CategoryPage,SearchPage</value>
      </widget-property>
      <widget-manager j2ee="com.ibm.commerce.pagelayout.widget.management.impl.URLLinkWidgetManager"/>
      <widget-property name="requireEMS">
        <value>true</value>
      </widget-property>
      <widget-property name="serializeActionPath">
        <value>SerializeLayoutWidget-URLLinkWidget</value>
      </widget-property>
      <widget-property name="isURLLink">
        <value>true</value>
      </widget-property>
      <widget-property name="emsName" required="false" datatype="java.lang.String"/>
    </Definition>  
  4. Utilice el programa de utilidad de carga de datos para cargar la definición de widget en la base de datos de HCL Commerce para registrar el gestor de widgets junto con el widget personalizado.
    Para obtener más información sobre cómo registrar el widget, consulte Registrar un widget de Commerce Composer.
  5. En el archivo WidgetObjectDefinition.xml para su widget, incluya un servicio para invocar el servicio createExtendedDataService.
    El archivo WidgetObjectDefinition.xml incluye la definición de las variables de campo de entrada para el widget. Este archivo de definición de objeto también define los servicios para crear, actualizar y eliminar datos para su widget. Cuando añade datos ampliados para su widget, debe definir un servicio Create dentro de este archivo para guardar los datos ampliados. Al incluir el código siguiente, se crea un servicio de este tipo que invoca el servicio createExtendedDataService.
    <!---
    This definition defines the custom URL child object
    -->
    <ChildObjectDefinition definitionName="plmURLLinkCustomURL"
     objectType="URLLinkCustomURL" idProperty="extDataId"
     displayName="${plmPageLayoutResources.customURL}"
     icon="URLIcon">
     
    <!--- Create service. -->
    <CreateService url="/cmc/CreateWidgetExtendedData">
      <ServiceParam name="storeId"/>
      <ServiceParam name="dataStoreId" parameterName="dataStoreId" parentProperty="true" 
        resolvePrimaryParent="true" propertyName="objectStoreId">
        <EnablementCondition checkObjectDefinition="true" conditionId="objectTypeCondition" 
          enablementValue="URLLinks" negate="true" propertyName="objectType" 
          parentProperty="true" resolvePrimaryParent="false"/>
      </ServiceParam>
      <ServiceParam name="pageLayoutId" propertyName="pageLayoutId" parentProperty="true" />
      <ServiceParam name="type" value="IBM_CustomURL"/>
      <ServiceParam name="widgetId" propertyName="widgetId" parentProperty="true" objectPath="LayoutWidgetAlias"/>
      <ServiceParam name="languageId" resolvePrimaryParent="false" parentProperty="true" propertyName="languageId"/>
    </CreateService>
    
    Donde:
    <ServiceParam name="type" value=""/>
    El tipo de datos ampliados para el widget, por ejemplo<ServiceParam name="type" value="IBM_CustomURL"/>
    La llamada de servicio para invocar createExtendedDataService envía los siguientes parámetros de URL
    urlType=
    sequenceOrder=
    xExtData_urlText=
    languageId=-
    pageLayoutId=
    timeZoneId=
    requestIdentifier=
    identityId=
    identitySignature=
    type=
    locale=
    storeId=
    widgetId=
    
    Por ejemplo,
    urlType=custom
    sequenceOrder=1
    xExtData_urlText=cnn
    languageId=-1
    pageLayoutId=10601
    timeZoneId=America/New_York
    requestIdentifier=1
    identityId=95121
    identitySignature=********
    type=IBM_CustomURL
    locale=en_US
    storeId=10001
    widgetId=6201
    
    El BOD de solicitud de la llamada de servicio createExtendedData puede parecerse a la siguiente solicitud:
    <oa:Change>
      <oa:ActionCriteria>
        <oa:ActionExpression actionCode="Add" 
         expressionLanguage="_wcf:XPath">/Layout[1]/Widget[1]/ExtendedData[1]</oa:ActionExpression>
      </oa:ActionCriteria>
    </oa:Change>
    <_pgl:Layout>
      <_pgl:LayoutIdentifier>
        <_wcf:UniqueID>10601</_wcf:UniqueID>
      </_pgl:LayoutIdentifier>
      <_pgl:Widget>
        <_pgl:WidgetIdentifier>
          <_wcf:UniqueID>6201</_wcf:UniqueID>
        </_pgl:WidgetIdentifier>
        <_pgl:ExtendedData sequenceOrder="1.0">
          <_pgl:DataType>IBM_CustomURL</_pgl:DataType>
          <_pgl:Attributes language="-1">
            <_pgl:Attribute name="url">cnn.com</_pgl:Attribute>
            <_pgl:Attribute name="urlText">cnn</_pgl:Attribute>
          </_pgl:Attributes>
        </_pgl:ExtendedData>
      </_pgl:Widget>
    </_pgl:Layout>

    Para obtener más información sobre la creación de definición de objeto para el widget, consulte Añadir soporte del Management Center para un widget de Commerce Composer.