Affichage des détails de version

Pour permettre l'affichage des différents détails de version sur l'interface utilisateur, modifiez le fichier JSP de sérialisation qui extrait les données des versions 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.

Dans le fichier JSP, modifiez la balise <wcf:getData> pour ajouter les données contextuelles comme suit :
<wcf:contextData name="versionId" data="${param.objectVersionId}"/>
La balise wcf:getData permet d'extraire les informations d'objet métier. Pour plus d'informations sur la manière de rechercher la balise wcf:getData à modifier, reportez-vous aux instructions de l'étape 4 de la page suivante : Activation de la visualisation des versions d'objet personnalisé sur l'interface utilisateur.

Dans le fichier de modèle de requête, ajoutez un paramètre versionId à la requête ou définissez une requête spécifique à la version. Lorsque les objets de version sont affichés, certaines des données doivent être extraites du schéma de version (données versionnées), tandis que d'autres doivent être extraites du schéma de base (données non versionnées). Le système peut automatiquement ajuster les requêtes de certains types. Pour les autres types de requête, vous devez écrire une requête spécifique à la version.

Limitations de la génération SQL de l'affichage des versions

  • Les instructions de sous-requête SQL ne sont pas prises en charge.
  • Si une table est versionnable, toutes les occurrences de cette table dans une requête doivent provenir du schéma de version. Par exemple, s'il existe une requête avec deux tables versionnables (CATENTRY and CATENTDESC), la génération SQL des versions ajoute le préfixe du schéma de version aux deux tables (pour les demandes de version) ou à aucune des tables (autres demandes). Ce comportement se produit, car la génération SQL des versions ne permet pas de sélectionner des données de la table CATENTRY de base et de la table CATENTDESC de la version dans une même requête. Pour sélectionner des données des deux tables, une requête spécifique à la version est requise.

Génération SQL des modèles de requête de gestion des versions de contenu

Les modèles de requête qui prennent en charge la génération SQL des versions sont indiqués par "param=versionable" dans le fichier du modèle de requête. Pour extraire l'objet de version, le service Get<Noun> existant est utilisé et un paramètre versionId est transmis dans la zone de contexte métier de la demande. Lorsque le serveur détecte une demande de version, il modifie le SQL défini dans le modèle de requête pour inclure le paramètre versionId et sélectionne les données des tables du schéma de version, conformément au fichier de configuration wc-content-version.xml.

Par exemple, pour extraire une version de CatalogGroup 10201, une demande GetCatalogGroup est envoyée avec le paramètre versionId spécifié dans le contexte métier. Lffichage des demandes de version ne prend en charge qu'un objet ; une demande ne peut renvoyer qu'une version de CatalogGroup 10201. Il ne peut pas renvoyer plusieurs versions de CatalogGroup 10201. En outre, l'affichage des demandes de version ne peut pas renvoyer plusieurs versions de plusieurs objets.

Etudiez la requête associée CatalogGroup suivante, marquée comme versionnable :

BEGIN_ASSOCIATION_SQL_STATEMENT
  name=IBM_RootCatalogGroupWithDescriptionWithTopCatGroup
  base_table=CATGROUP
  additional_entity_objects=true
  param=versionable	
  sql= SELECT CATGROUP.$COLS:CATGROUP$, CATGRPDESC.$COLS:CATGRPDESC$, CATTOGRP.$COLS:CATTOGRP$
       FROM CATGROUP LEFT OUTER JOIN CATGRPDESC ON (CATGROUP.CATGROUP_ID = CATGRPDESC.CATGROUP_ID 
       AND CATGRPDESC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$)) 
       LEFT OUTER JOIN CATTOGRP ON (CATGROUP.CATGROUP_ID = CATTOGRP.CATGROUP_ID 
       AND (CATTOGRP.CATALOG_ID = $CTX:CATALOG_ID$ OR CATTOGRP.CATALOG_ID_LINK IS NULL))
       WHERE CATGROUP.CATGROUP_ID IN ($ENTITY_PKS$)
       END_ASSOCIATION_SQL_STATEMENT
Les événements suivants se produisent lors de la transformation d'une requête en requête de version :
  • Les tables versionnables non jointes sont remplacées par la table du schéma de version. Par exemple, la table CATGROUP est versionnable et est remplacée par VCW_DEMO.CATGROUP.
  • Les tables versionnables qui sont jointes sont remplacées par un alias qui sélectionne les données de la table versionable, puis filtre les données en fonction du paramètre versionId spécifié. Par exemple, la table CATGRPDESC est versionnable et l'instruction :
    
    LEFT OUTER JOIN CATGRPDESC ON  (CATGROUP.CATGROUP_ID = CATGRPDESC.CATGROUP_ID 
    AND CATGRPDESC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$))
    est remplacée par
    
    LEFT OUTER JOIN (SELECT * FROM VCW_DEMO.CATGRPDESC WHERE VCW_DEMO.CATGRPDESC.CMVERSNINFO_ID = versionId) T0 
    ON (VCW_DEMO.CATGROUP.CATGROUP_ID = T0.CATGROUP_ID AND T0.LANGUAGE_ID IN ($CONTROL:LANGUAGES$))
  • Les alias créés à l'étape précédente sont remplacés dans la requête. Par exemple, l'alias T0 est créé pour la table CATGRPDESC de l'exemple précédent et l'instruction suivante :
    
    SELECT CATGROUP.$COLS:CATGROUP$, CATGRPDESC.$COLS:CATGRPDESC$, CATTOGRP.$COLS:CATTOGRP$
    
    Cette instruction est ensuite transformée pour être l'instruction suivante :
    
    SELECT VCW_DEMO.CATGROUP.$COLS:CATGROUP$, T0.$COLS:CATGRPDESC$, CATTOGRP.$COLS:CATTOGRP$
    
    La requête transformée finale peut ressembler à la requête suivante :
    
    FROM VCW_DEMO.CATGROUP 
      LEFT OUTER JOIN (SELECT * FROM VCW_DEMO.CATGRPDESC WHERE VCW_DEMO.CATGRPDESC.CMVERSNINFO_ID = versionId) T0 
      ON (VCW_DEMO.CATGROUP.CATGROUP_ID = T0.CATGROUP_ID AND T0.LANGUAGE_ID IN ($CONTROL:LANGUAGES$))
      LEFT OUTER JOIN (SELECT * FROM VCW_DEMO.CATTOGRP WHERE VCW_DEMO.CATTOGRP.CMVERSNINFO_ID = versionId) T1 
      ON (VCW_DEMO.CATGROUP.CATGROUP_ID = T1.CATGROUP_ID AND (T1.CATALOG_ID = $CTX:CATALOG_ID$ OR T1.CATALOG_ID_LINK IS NULL)) 
      WHERE VCW_DEMO.CATGROUP.CATGROUP_ID IN ($ENTITY_PKS$) AND VCW_DEMO.CATRGROUP.CMVERSNINFO_ID = versionId

Requêtes spécifiques aux versions

Il est également possible de générer des requêtes spécifiques à la version à l'aide des balises $VERSION$ et $VERSION_ID$ dans le modèle de requête. La couche des services de données (DSL) remplace la balise $VERSION$ par le nom du schéma de version (par exemple, VCW_DEMO). DSL remplace la balise $VERSION_ID$ par le paramètre versionId de la zone de contexte métier de la requête. Etudiez la requête associée CatalogEntry suivante qui utilise les balises $VERSION$ et $VERSION_ID$ :

BEGIN_XPATH_TO_SQL_STATEMENT
  name=/CatalogEntry[CatalogEntryIdentifier[(UniqueID=)]]+MyCompany_Admin_Details_Version
  base_table=CATENTRY
  className=com.ibm.commerce.catalog.facade.server.services.dataaccess.db.jdbc.EntitledCatalogEntriesSQLComposer 
  param=accessProfile_IBM_Store
  param=includeBrowseable_true
  param=psMark_AndPSAgreements	
  param=versionable
  sql= SELECT $VERSION$.CATENTRY.$COLS:CATENTRY$, $VERSION$.CATENTDESC.$COLS:CATENTDESC$
       FROM $VERSION$.CATENTRY 
       LEFT JOIN $VERSION$.CATENTDESC ON ($VERSION$.CATENTRY.CMVERSNINFO_ID = $VERSION$.CATENTDESC.CMVERSNINFO_ID 
       AND $VERSION$.CATENTDESC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$)) 
       WHERE $VERSION$.CATENTRY.CATENTRY_ID IN (?UniqueID?) AND $VERSION$.CATENTRY.CMVERSNINFO_ID = $VERSION_ID$
       END_XPATH_TO_SQL_STATEMENT
Instruction SQL après substitution des paramètres de version :

SELECT VCW_DEMO.CATENTRY.$COLS:CATENTRY$, VCW_DEMO.CATENTDESC.$COLS:CATENTDESC$
  FROM VCW_DEMO.CATENTRY 
  LEFT JOIN VCW_DEMO.CATENTDESC ON (VCW_DEMO.CATENTRY.CMVERSNINFO_ID = VCW_DMEO.CATENTDESC.CMVERSNINFO_ID 
  AND VCW_DMEO.CATENTDESC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$)) 
  WHERE VCW_DEMO.CATENTRY.CATENTRY_ID IN (?UniqueID?) AND VCW_DEMO.CATENTRY.CMVERSNINFO_ID = 10501