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.
<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.
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 tables versionnables non jointes sont remplacées par la table du schéma de version. Par exemple, la table
CATGROUPest versionnable et est remplacée parVCW_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
versionIdspécifié. Par exemple, la tableCATGRPDESCest versionnable et l'instruction :
est remplacée parLEFT OUTER JOIN CATGRPDESC ON (CATGROUP.CATGROUP_ID = CATGRPDESC.CATGROUP_ID AND CATGRPDESC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$))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
T0est créé pour la tableCATGRPDESCde l'exemple précédent et l'instruction suivante :
Cette instruction est ensuite transformée pour être l'instruction suivante :SELECT CATGROUP.$COLS:CATGROUP$, CATGRPDESC.$COLS:CATGRPDESC$, CATTOGRP.$COLS:CATTOGRP$
La requête transformée finale peut ressembler à la requête suivante :SELECT VCW_DEMO.CATGROUP.$COLS:CATGROUP$, T0.$COLS:CATGRPDESC$, CATTOGRP.$COLS:CATTOGRP$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
$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
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