Activation de la visualisation des versions d'objet personnalisé sur l'interface utilisateur

Pour activer l'affichage des objets de version dans l'interface utilisateur, créez un fichier JSP de sérialisation qui extrait les données des objets de version et mettez à jour le fichier de modèle de requête pour rendre les requêtes SQL versionnables et extraire les différentes informations de version.

Avant de commencer

  • Assurez-vous que les tables personnalisées ont déjà été ajoutées au schéma de version.
  • Pour plus d'informations sur l'affichage des détails de version, reportez-vous à la rubrique suivante : Affichage des détails de version.

Procédure

  1. Créez un fichier JSP de sérialisation pour convertir les objets de version serveur en code XML compréhensible par le client.
  2. Mettez à jour votre fichier de modèle de requête personnalisé.
    Pour afficher les informations de version, vous devez mettre à jour le fichier de modèle de requête. Ce fichier définit les requêtes SQL qui extraient des données du serveur.

    Lorsque les versions sont affichées, certaines des données doivent être extraites du schéma de version, tandis que d'autres doivent être extraites du schéma de base. Vous devez déterminer si vous devez écrire des requêtes spécifiques à la version. Pour plus d'informations sur la génération SQL de modèles de requête, voir Affichage des détails de version.

    Ci-dessous figure un exemple de fichier de modèle de requête personnalisé qui extrait différentes versions de l'objet Recette à l'aide de la génération SQL de versions.
    BEGIN_XPATH_TO_SQL_STATEMENT
    name=/Project[ProjectIdentifier[(UniqueID=)]]
    base_table=XPROJECT
    param=versionable
    sql=	
    SELECT
    XPROJECT.$COLS:XPROJECT_ID$
    FROM
    XPROJECT
    WHERE
    XPROJECT.XPROJECT_ID IN (?UniqueID?)
    END_XPATH_TO_SQL_STATEMENT
  3. Configurez des services existants pour extraire les informations relatives à la version.
    La structure HCL Commerce partage les services pour extraire les informations des objets métier et de leur version. Par exemple, un objet de produit utilise le service GetChildrenService suivant dans le fichier ProductPrimaryObjectDefinition.def pour extraire les attributs de définition :
    <GetChildrenService objectTypes="CatalogEntryDefiningAttribute" url="/cmc/GetCatalogEntryChildren-DefiningAttributes">
    	<ServiceParam name="storeId"/>
    	<ServiceParam name="defaultLanguageId"/>
    </GetChildrenService> 
    Si vous souhaitez gérer les versions des attributs de définition qui appartiennent à ce produit, vous pouvez configurer ce service pour extraire les attributs de définition des versions de ce produit ou du produit lui-même, comme suit :
    1. Identifiez le service GetChildrenService correspondant comme illustré dans la définition d'objet principal de cet objet métier.
    2. Utilisez le fichier de configuration Struts pour identifier le fichier JSP qui fournit ce service :
      <action name="GetCatalogEntryChildren-DefiningAttributes">
      <result name="GetCatalogEntryChildren-DefiningAttributes">
      <param name="location">/jsp/commerce/catalog/restricted/GetCatalogEntryDefiningAttributes.jsp</param>
      </result>
      </action>
    3. Dans le fichier GetCatalogEntryDefiningAttributes.jsp, ajoutez les données de contexte suivantes au service getData :
      <wcf:contextData name="versionId" data="${param.objectVersionId}"/> 
      Code complet du service getData :
      <wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogEntryType[]"
      var="catalogEntry"
      expressionBuilder="getCatalogEntryDefiningAttributesByID">
      	<wcf:contextData name="storeId" data="${param.storeId}"/>
      	<wcf:contextData name="versionId" data="${param.objectVersionId}"/>
      	<wcf:param name="catEntryId" value="${param.parentId}"/>
      	<wcf:param name="dataLanguageIds" value="${param.dataLanguageIds}"/>
      </wcf:getData> 

      Lorsqu'un service de version de contenu est appelé, les données contextuelles versionId indiquent au service getData côté serveur si la demande concerne l'objet métier ou sa version. Par exemple, lorsque vous ouvrez un produit, le service getData est appelé pour extraire les informations d'attribut de définition. Dans ce cas, une valeur vide est affectée au paramètre versionId, car il ne s'agit pas d'une version de produit. Toutefois, si vous ouvrez une version de produit, une valeur non vide est affectée au paramètre versionId et le service getData utilise cet ID pour renvoyer les informations d'attribut de définition de la version de produit particulière.

    4. Si vous gérez les versions d'autres objets enfants de cet objet principal, répétez les étapes précédentes pour le service GetChildrenService correspondant.
    5. Si vous décidez de gérer les versions d'une relation particulière qui appartient à un objet métier (par exemple, la catégorie parent d'un produit), vous devez configurer le service GetReferencesService correspondant dans ProductPrimaryObjectDefinition.def :
      <GetReferencesService url="/cmc/GetCatalogEntryParent-MasterCatalogCatalogGroup">
      	<ServiceParam name="storeId"/>
      	<ServiceParam name="masterCatalogId"/>
      	<ServiceParam name="catentryId" propertyName="catentryId"/>
      	<ServiceParam name="childType" value="ChildProduct"/>
      </GetReferencesService> 
    6. Utilisez le fichier de configuration Struts pour identifier le fichier JSP qui fournit ce service :
      <action name="GetCatalogEntryParent-MasterCatalogCatalogGroup">
      <result name="GetCatalogEntryParent-MasterCatalogCatalogGroup">
      <param name="location">/jsp/commerce/catalog/restricted/GetCatalogEntryParent-ReferenceMasterCatalogGroup.jsp</param>
      </result>
      </action>
    7. Dans le fichier GetCatalogEntryParent-ReferenceMasterCatalogGroup.jsp, ajoutez les données de contexte suivantes au service getData :
      <wcf:contextData name="versionId" data="${param.objectVersionId}"/> 
      Code complet du service getData :
      <wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogEntryType"
      var="catalogEntry"
      expressionBuilder="getCatalogEntrySummaryByID"
      varShowVerb="showCatalogEntryVerb">
      	<wcf:contextData name="storeId" data="${param.storeId}"/>
      	<wcf:contextData name="catalogId" data="${param.masterCatalogId}"/>
      	<wcf:contextData name="versionId" data="${param.objectVersionId}"/>
      	<wcf:param name="catEntryId" value="${param.catentryId}"/>
      </wcf:getData> 
    8. Répétez les étapes précédentes pour configurer la gestion des versions des autres relations de cet objet métier.
    9. Incluez les informations versionId du service RefreshService afin que lorsque les utilisateurs souhaitent actualiser l'objet versionné, les informations versionnées soient de nouveau extraites. Par exemple, pour l'objet Produit, localisez le RefreshService dans le fichier CatalogEntryPrimaryObjectDefinition.def.
      <RefreshService url="/cmc/GetCatalogEntry">
      	<ServiceParam name="storeId"/>
      	<ServiceParam name="catalogId" parentProperty="true" parentType="CatalogAlias" propertyName="catalogId"/>
      	<ServiceParam name="catentryId" propertyName="catentryId"/>
      	<ServiceParam checkObjectDefinition="true" name="objectType" propertyName="objectType"/>
      </RefreshService> 
    10. Utilisez le fichier de configuration Struts pour identifier le fichier JSP qui fournit ce service :
      <action name="GetCatalogEntry">
      <result name="GetCatalogEntry">
      <param name="location">/jsp/commerce/catalog/restricted/GetCatalogEntry.jsp</param>
      </result>
      </action>
    11. Dans le fichier GetCatalogEntry.jsp, ajoutez une nouvelle entrée de données contextuelles, comme suit :
      <wcf:contextData name="versionId" data="${param.objectVersionId}"/>
      So the complete getData tag is:
      	<wcf:getData type="com.ibm.commerce.catalog.facade.datatypes.CatalogEntryType[]"
      var="catalogEntries" expressionBuilder="getCatalogEntryDetailsByIDs"
      varShowVerb="showVerb" recordSetStartNumber="${param.recordSetStartNumber}"
      recordSetReferenceId="${param.recordSetReferenceId}" maxItems="${param.maxItems}">
      	<wcf:contextData name="storeId" data="${param.storeId}"/>
      	<wcf:contextData name="catalogId" data="${param.catalogId}"/>
      	<wcf:contextData name="versionId" data="${param.objectVersionId}"/>
      	<wcf:param name="dataLanguageIds" value="${param.dataLanguageIds}"/>
      	<wcf:param name="UniqueID" value="${param.catentryId}"/>
      </wcf:getData> 
    Vous avez configuré tous les services GetChildrenService, GetReferenceService et RefreshService pour fournir les informations versionnées de l'objet Produit
  4. Mettez à jour le registre des commandes pour que le profil d'accès personnalisé enregistre l'implémentation de la commande d'insertion de version supplémentaires.
    Lorsque vous visualisez des objets versionnés, le Management Center doit disposer des informations sur la version, telles que l'ID version. Pour extraire et inclure ces informations dans le nom, vous devez enregistrer une commande "InsertMore".
    Voici l'exemple d'instruction SQL permettant d'enregistrer le profil d'accès personnalisé MyCompany_All de l'exemple Garantie précédent :
    insert into cmdreg (storeent_id, interfacename, classname, target) values 
    (0, 'com.ibm.commerce.catalog.facade.server.commands.InsertMoreCatalogEntryDataCmd+MyCompany_All.10', 
    'com.ibm.commerce.foundation.server.version.command.InsertMoreNounVersionMetaDataCmdImpl', 'Local');
    

    InsertMoreNounVersionMetaDataCmdImpl recherche les informations de version du nom CatalogEntry et les ajoute à la réponse.