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.

- 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.
| 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. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.ContentRecommendationWidgetManager Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager. |
|
| 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.
|
| com.ibm.commerce.pagelayout.widget.management.impl.IBMProductRecommendationsWidgetManager Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager. |
|
| 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. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.ProductRecommendationWidgetManager Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.RichTextWidgetManager Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.RotatingContentWidgetManager Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.URLLinkWidgetManager Esta clase amplía la clase com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager. |
|
Procedimiento
-
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 claseDefaultWidgetManager, 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 { -
Sustituya uno o varios de los métodos de la clase
DefaultWidgetManagerpara definir cómo debe manejar la clase de gestor las propiedades para su widget.Estos métodos incluyen los siguientes métodos:createExtendedDataupdateExtendedDatadeleteExtendedDataretrieveExtendedData
- 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.
createExtendedDatapara definir cómo crear un enlace de URL para un widget:
El métodopublic 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); }createURLLinkllama al servicio de marketing para crear un contenido de marketing para almacenar la URL. -
Registre el gestor de widgets estableciendo el atributo
widget-managerpara el widget en el archivo XML de definición de widget.Utilice el siguiente formato para especificar una clase de gestor de widget:
Por ejemplo, el siguiente código especifica la clase del gestor de widgets<widget-manager j2ee=""/><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> -
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.
-
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 serviciocreateExtendedDataService.
Donde:<!--- 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>- <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 invocarcreateExtendedDataServiceenvía los siguientes parámetros de URL
Por ejemplo,urlType= sequenceOrder= xExtData_urlText= languageId=- pageLayoutId= timeZoneId= requestIdentifier= identityId= identitySignature= type= locale= storeId= widgetId=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=6201El BOD de solicitud de la llamada de serviciocreateExtendedDatapuede 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.