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.

Le diagramme suivant montre la hiérarchie des classes de gestionnaire de widgets utilisées dans la structure Commerce Composer. Lorsque vous créez un widget personnalisé, utilisez le gestionnaire de widgets qui étend le moins de classes tout en fournissant les fonctionnalités dont vous avez besoin pour gérer les propriétés de votre widget. Votre widget peut utiliser l'une des classes de gestionnaire de widgets du diagramme suivant. Cependant, les quatre classes de gestionnaire de widgets les plus courantes que vous pourriez envisager d'utiliser sont mises en évidence.
Héritage de la classe de gestionnaire de widgets.
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.
Vous pouvez consulter les classes de gestionnaire de widgets pour les widgets fournis par défaut afin de vous aider à créer votre propre classe personnalisée. La table suivante identifie les classes de gestionnaire de widgets disponibles par défaut :

Classes de gestionnaire de widgets par défaut pour les widgets Commerce Composer.

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.

  • Widget Recommandation de catégorie
com.ibm.commerce.pagelayout.widget.management.impl.ContentRecommendationWidgetManager

Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager.

  • Widget Recommandation de contenu
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.
  • Widget Ressources associées
  • Widget Trajet de navigation
  • Widget Navigation de catégorie
  • Widget Composants
  • Widget Attributs de définition
  • Widget Attributs descriptifs
  • Widget Remises
  • Widget Emplacement E-Marketing
  • Widget Activité Facebook
  • Widget J'aime de Facebook
  • Widget Navigation dans les facettes
  • Widget Image taille réelle
  • Widget En-tête
  • Widget Disponibilité des stocks
  • Widget Description détaillée
  • Widget Associations de marchandisage
  • Widget Nom, référence et prix
  • Widget Récapitulatif de la recherche
  • Widget Actions du client
  • Widget Description abrégée
  • Widget Liste des contenus du site
  • Widget Plan du site
com.ibm.commerce.pagelayout.widget.management.impl.IBMProductRecommendationsWidgetManager

Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager.

  • Widget IBM Product Recommendations
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.

  • Widget Liste des entrées de catalogue
com.ibm.commerce.pagelayout.widget.management.impl.ProductRecommendationWidgetManager

Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager.

  • Widget Recommandation d'entrée de catalogue
com.ibm.commerce.pagelayout.widget.management.impl.RichTextWidgetManager

Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager.

  • Widget Editeur de texte
com.ibm.commerce.pagelayout.widget.management.impl.RotatingContentWidgetManager

Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.DefaultContentAndWebActivityWidgetManager.

  • Widget Carrousel du contenu
com.ibm.commerce.pagelayout.widget.management.impl.URLLinkWidgetManager

Cette classe étend la classe com.ibm.commerce.pagelayout.widget.management.impl.MarketingWidgetManager.

  • Widget Liens
Afin d'obtenir des exemples des propriétés que ces classes gèrent pour les widgets disponibles par défaut avec HCL Commerce, voir Propriétés de widget Commerce Composer.

Procédure

  1. 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 classe DefaultWidgetManager, 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 {
  2. Remplacez une ou plusieurs des méthodes de la classe DefaultWidgetManager pour définir comment votre classe de gestionnaire doit gérer les propriétés de votre widget.
    Parmi ces méthodes, on peut citer :
    • createExtendedData
    • updateExtendedData
    • deleteExtendedData
    • retrieveExtendedData
    Dans ces méthodes, les paramètres suivants sont inclus :
    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.
    Par exemple, la méthode suivante remplace la méthode createExtendedData pour définir comment créer un lien URL pour 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);
    }
    
    La méthode createURLLink appelle le service marketing pour créer du contenu marketing afin de stocker l'URL.
  3. Enregistrez le gestionnaire de widgets en définissant l'attribut widget-manager sur le widget dans le fichier XML de définition de widget.
    Utilisez le format suivant pour spécifier une classe de gestionnaire de widgets :
    <widget-manager j2ee=""/>
    
    Par exemple, le code suivant spécifie la classe de gestionnaire de widgets
    <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>  
  4. 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.
  5. 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 service 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>
    
    Où :
    <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 appeler createExtendedDataService envoie les paramètres d'URL suivants
    urlType=
    sequenceOrder=
    xExtData_urlText=
    languageId=-
    pageLayoutId=
    timeZoneId=
    requestIdentifier=
    identityId=
    identitySignature=
    type=
    locale=
    storeId=
    widgetId=
    
    Par exemple,
    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
    
    La requête BOD de l'appel de service createExtendedData peut 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.