Mostrar detalles de versión

Para poder ver los detalles de distintas versiones en la interfaz de usuario, debe modificar el archivo JSP de serialización que recupera datos para las versiones, y también debe actualizar el archivo de plantilla de consulta para que las consultas SQL puedan tener versiones para recuperar la información de distintas versiones.

En el archivo JSP, modifique la etiqueta <wcf:getData> para añadir los datos de contexto como se muestra:
<wcf:contextData name="versionId" data="${param.objectVersionId}"/>
La etiqueta wcf:getData se utiliza para recuperar información de objetos de negocio. Para obtener más información sobre cómo localizar la etiqueta wcf:getData para modificarla, consulte las instrucciones del paso 4 de la página siguiente: . Habilitar la visualización de versiones de objetos personalizados en la interfaz de usuario.

En el archivo de plantilla de consulta, añada un parámetro versionId a la consulta o defina una consulta específica de la versión. Cuando se visualizan los objetos de versión, algunos de los datos deben recuperarse del esquema de versiones (datos de los que se crean versiones) y otros datos deben recuperarse del esquema base (datos de los que no se crean versiones). El sistema puede ajustar automáticamente las consultas de determinados tipos. Para otros tipos de consulta, debe escribir una consulta específica de la versión.

Limitaciones de generación de SQL de versiones de vistas

  • No se da soporte a las sentencias Subselect de SQL.
  • Si es posible crear versiones de una tabla, todas las apariciones de dicha tabla en una consulta deben provenir del esquema de versión. Por ejemplo, si existe una consulta con dos tablas versionables (CATENTRY y CATENTDESC), la generación SQL de la versión añade el prefijo de esquema de la versión a ambas tablas (para peticiones de versión) o a ninguna de ellas (petición que no es de versión). Este comportamiento se debe a que la generación de SQL de versión no permite seleccionar datos de la tabla CATENTRY base y de la tabla CATENTDESC de versión en la misma consulta. Para seleccionar datos de ambas tablas, se necesita una consulta específica de la versión.

Generación de SQL de plantilla de consulta de versiones de contenido

Las plantillas de consulta que dan soporte a la generación de SQL de versión se marcan con "param=versionable" en el archivo de plantilla de la consulta. Para recuperar el objeto de versión, se utiliza el servicio Get<Noun> existente y se pasa un parámetro versionId en el área de contexto de negocio de la petición. Cuando el servidor detecta una petición de versión, modifica el SQL definido en la plantilla de consulta para incluir el versionId, y selecciona datos de las tablas del esquema de versiones según se define en el archivo de configuración wc-content-version.xml.

Por ejemplo, para recuperar una versión de CatalogGroup 10201, se envía una petición GetCatalogGroup con el versionId especificado en el contexto de negocio. La petición de versión solo da soporte a un objeto, es decir, una petición solo puede devolver una versión de CatalogGroup 10201. No se pueden devolver varias versiones de CatalogGroup 10201. Además, las peticiones de versión de vista no pueden devolver varias versiones para varios objetos.

Considere la siguiente consulta asociada CatalogGroup marcada como versionable:

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
Cuando se transforma una consulta en una consulta de versión, ocurren los siguientes sucesos:
  • Las tablas versionables que no se unen se sustituyen por la tabla del esquema de versiones. Por ejemplo, la tabla CATGROUP es versionable y se sustituye por VCW_DEMO.CATGROUP.
  • Las tablas versionables que se unen se sustituyen por un alias que selecciona datos de la tabla versionable y filtra los datos por el versionId especificado. Por ejemplo, la tabla CATGRPDESC es versionable y la sentencia:
    
    LEFT OUTER JOIN CATGRPDESC ON  (CATGROUP.CATGROUP_ID = CATGRPDESC.CATGROUP_ID 
    AND CATGRPDESC.LANGUAGE_ID IN ($CONTROL:LANGUAGES$))
    Se sustituye por:
    
    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$))
  • Los alias que se crean en el paso anterior se sustituyen de nuevo en la consulta. Por ejemplo, se crea el alias T0 para la tabla CATGRPDESC en el ejemplo precedente y la siguiente sentencia:
    
    SELECT CATGROUP.$COLS:CATGROUP$, CATGRPDESC.$COLS:CATGRPDESC$, CATTOGRP.$COLS:CATTOGRP$
    
    A continuación, esta sentencia se transforma en la siguiente sentencia:
    
    SELECT VCW_DEMO.CATGROUP.$COLS:CATGROUP$, T0.$COLS:CATGRPDESC$, CATTOGRP.$COLS:CATTOGRP$
    
    La consulta transformada final se parecería a la siguiente consulta:
    
    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

Consultas específicas de versión

De forma alternativa, las consultas específicas de versión pueden crearse utilizando las etiquetas $VERSION$ y $VERSION_ID$ en la plantilla de consulta. La capa de servicio de datos (DSL) sustituye la etiqueta $VERSION$ por el nombre de esquema de versión (como por ejemplo, VCW_DEMO). DSL sustituye la etiqueta $VERSION_ID$ por el parámetro versionId del área de contexto de negocio de la petición. Considere la consulta asociada CatalogEntry siguiente que utiliza las etiquetas $VERSION$ y $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
Sentencia SQL después de la sustitución de los parámetros de versión:

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