Activation de la visualisation des versions d'objet personnalisé sur l'interface utilisateur
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
-
Créez un fichier JSP de sérialisation pour convertir les objets de version serveur en code XML compréhensible par le client.
Suivez les procédures de la rubrique Création et enregistrement d'un fichier JSP de sérialisation pour permettre l'affichage des objets de version.
-
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 -
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
GetChildrenServicesuivant 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 :- Identifiez le service
GetChildrenServicecorrespondant comme illustré dans la définition d'objet principal de cet objet métier. - 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> - Dans le fichier GetCatalogEntryDefiningAttributes.jsp, ajoutez les données de contexte suivantes au service
getData:
Code complet du service<wcf:contextData name="versionId" data="${param.objectVersionId}"/>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
versionIdindiquent 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ètreversionId, 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ètreversionIdet le service getData utilise cet ID pour renvoyer les informations d'attribut de définition de la version de produit particulière. - 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
GetChildrenServicecorrespondant. - 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
GetReferencesServicecorrespondant 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> - 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> - Dans le fichier GetCatalogEntryParent-ReferenceMasterCatalogGroup.jsp, ajoutez les données de contexte suivantes au service
getData:
Code complet du service<wcf:contextData name="versionId" data="${param.objectVersionId}"/>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> - Répétez les étapes précédentes pour configurer la gestion des versions des autres relations de cet objet métier.
- Incluez les informations
versionIddu 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 leRefreshServicedans le fichierCatalogEntryPrimaryObjectDefinition.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> - 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> - 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>
- Identifiez le service
-
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_Allde 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');InsertMoreNounVersionMetaDataCmdImplrecherche les informations de version du nom CatalogEntry et les ajoute à la réponse.