Définition d'une classe de gestionnaire de widgets Commerce Composer
Un gestionnaire de widgets gère la persistance et la récupération de données étendues de widgets autres que les propriétés de base des widgets. Vous pouvez utiliser un gestionnaire de widgets pour ajouter plus de logique lorsque vous créez, mettez à jour ou supprimez un widget.
Lorsqu'un utilisateur Management Center enregistre les paramètres de propriété de widgets, les valeurs des propriétés sont enregistrées dans la table de base de données PLWIDGETNVP. Si votre widget possède des propriétés dont les valeurs doivent être enregistrées dans une table différente que la table PLWIDGETNVP, définissez une classe de gestionnaire de widgets pour gérer l'enregistrement des valeurs pour vos propriétés de widget. La classe de gestionnaire de widgets est également utilisée pour récupérer les informations de valeur de propriété enregistrées à partir de la base de données. Lorsque vous définissez votre classe de gestionnaire de widgets, vous devez étendre la classe de gestionnaire de widgets par défaut. Vous devez également inscrire votre gestionnaire de widgets personnalisé dans le XML de définition de votre widget. Si votre widget dispose de valeurs de propriété enregistrées uniquement dans la table PLWIDGETNVP, vous n'avez pas besoin de définir une classe de gestionnaire personnalisée. Par défaut, lorsqu'aucune classe de gestionnaire de widgets n'est définie pour un widget, le widget utilise la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultWidgetManager.

- 1 DefaultWidgetManager
- Utilisé par tous les widgets qui n'ont pas besoin d'écrire des données de propriété dans le sous-système marketing. Ce gestionnaire est la classe de gestionnaire de widgets par défaut associée aux widgets lorsqu'aucune classe de gestionnaire de widgets n'est spécifiée. Ce gestionnaire de widgets fournit des fonctionnalités de validation de base basées sur la déclaration de propriété de widgets dans le XML de définition de widget. Ce gestionnaire de widgets lit et conserve les informations de la paire nom-valeur du widget dans la table de base de données PLWDIGETNVP.
- 2 MarketingWidgetManager
- Utilisé lorsqu'un widget a besoin d'un titre d'affichage ou nécessite un emplacement e-marketing associé au widget. Cette classe de gestionnaire de widgets est le gestionnaire de widgets de base pour tous les widgets qui utilisent des objets marketing. Ce gestionnaire de widgets fournit des fonctions communes, telles que la création d'emplacements e-marketing pour un widget. Ce gestionnaire de widgets permet aux widgets d'inclure un titre d'affichage. Si votre widget a besoin d'un emplacement e-marketing ou d'un titre d'affichage, envisagez d'utiliser ce gestionnaire de widgets.
- 3 DefaultContentWidgetManager
- Utilisé lorsqu'un widget doit enregistrer les produits, catégories ou contenus associés. Chaque widget qui utilise du contenu marketing par défaut peut utiliser cette super classe pour créer, lire, mettre à jour et supprimer du contenu marketing par défaut. Ce gestionnaire de widgets fait référence au contenu associé à l'aide de données étendues du widget. Le contenu par défaut peut se présenter sous la forme de catégories, de produits ou de contenu marketing.
- 4 DefaultContentAndWebActivityWidgetManager
- Utilisé lorsqu'un widget doit avoir une activité Web associée pour définir les règles marketing. Si un widget utilise une activité Web pour remplir le widget, cette classe gère l'emplacement e-marketing qui associe le widget à l'activité Web.
| Classe de gestionnaire de widgets | Widgets qui utilisent la classe |
|---|---|
| com.ibm.commerce.pagelayout.widget.management.impl.CategoryRecommendationWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.ContentRecommendationWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentWidgetManager. |
Aucun widget n'utilise directement cette classe. Toutefois, certains widgets utilisent une classe de gestionnaire qui étend cette classe. |
| com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager. |
Aucun widget n'utilise directement cette classe. Toutefois, certains widgets utilisent une classe de gestionnaire qui étend cette classe. |
| com.ibm.commerce.pagelayout.widget.management.impl.DefaultWidgetManager | Les widgets suivants utilisent la classe de gestionnaire de widgets par défaut pour gérer toutes les propriétés définies pour le widget. Par défaut, certains widgets n'ont pas de propriétés définies.
|
| com.ibm.commerce.pagelayout.widget.management.impl.IBMProductRecommendationsWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultWidgetManager. |
Aucun widget n'utilise directement cette classe. Toutefois, certains widgets utilisent une classe de gestionnaire qui étend cette classe. |
| com.ibm.commerce.pagelayout.widget.management.impl.ProductListingWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.ProductRecommendationWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.RichTextWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.RotatingContentWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager. |
|
| com.ibm.commerce.pagelayout.widget.management.impl.URLLinkWidgetManager Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager. |
|
Procédure
-
Créez un fichier pour définir la classe d'implémentation de votre gestionnaire de widgets. Dans votre nouveau fichier, étendez la classe
DefaultWidgetManager.Pour étendre la classeDefaultWidgetManager, ajoutez le code suivant dans votre nouveau fichier :/** * 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 { -
Remplacez une ou plusieurs des méthodes de la classe
DefaultWidgetManagerpour définir comment votre classe de gestionnaire doit gérer les propriétés de votre widget.Parmi ces méthodes, on peut citer :createExtendedDataupdateExtendedDatadeleteExtendedDataretrieveExtendedData
- LayoutType
- Le nom Présentation qui est transmis.
- WidgetType
- La partie nom du nom Présentation qui représente le widget.
- ExtendedDataType
- Un élément de la partie du nom de
WidgetType. Il contient les données à créer. - PageLayoutWidget
- L'objet de données physiques du widget. Il dispose de toutes les données stockées dans la base de données pour ce widget.
createExtendedDatapour définir comment créer un lien URL pour un widget :
La méthodepublic 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); }createURLLinkappelle le service marketing pour créer du contenu marketing afin de stocker l'URL. -
Enregistrez le gestionnaire de widgets en définissant l'attribut
widget-managersur le widget dans le fichier XML de définition de widget.Utilisez le format suivant pour spécifier une classe de gestionnaire de widgets :
Par exemple, le code suivant spécifie la classe de gestionnaire de widgets<widget-manager j2ee=""/><Definition> <widget-manager j2ee="com.ibm.commerce.pagelayout.widget.management.impl.URLLinkWidgetManager"/> ... </Definition>Le code suivant est un exemple de fichier XML de définition de widget qui définit un gestionnaire de widgets pour le widget Liens :<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> -
Utilisez l'utilitaire Chargement des données pour charger la définition de widget dans la base de données HCL Commerce afin d'enregistrer votre gestionnaire de widgets avec votre widget personnalisé.
Pour en savoir plus sur l'enregistrement de votre widget, voir Enregistrement d'un widget Commerce Composer.
-
Dans le fichier WidgetObjectDefinition.xml de votre widget, incluez un service pour appeler le service
createExtendedDataService.Le fichier WidgetObjectDefinition.xml inclut la définition des variables de la zone d'entrée pour votre widget. Ce fichier de définition d'objet définit également les services de création, de mise à jour et de suppression de données pour votre widget. Lorsque vous ajoutez des données étendues pour votre widget, vous devez définir un service de création dans ce fichier pour enregistrer les données étendues. En incluant le code suivant, vous créez un service de ce type qui invoque le servicecreateExtendedDataService.
Où :<!--- 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=""/>
- Le type de données étendues pour le widget, par exemple
<ServiceParam name="type" value="IBM_CustomURL"/>
L'appel de service pour appelercreateExtendedDataServiceenvoie les paramètres d'URL suivants
Par exemple,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=6201La requête BOD de l'appel de servicecreateExtendedDatapeut ressembler à la requête suivante :<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>Pour en savoir plus sur la création de l'objet de définition pour votre widget, voir Ajout de la prise en charge Management Center pour un widget Commerce Composer.