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.
<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.
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
- 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 porVCW_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 tablaCATGRPDESC
es versionable y la sentencia:
Se sustituye por:LEFT 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$))
- 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 tablaCATGRPDESC
en el ejemplo precedente y la siguiente sentencia:
A continuación, esta sentencia se transforma en la siguiente sentencia:SELECT CATGROUP.$COLS:CATGROUP$, CATGRPDESC.$COLS:CATGRPDESC$, CATTOGRP.$COLS:CATTOGRP$
La consulta transformada final se parecería a la siguiente consulta: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
Consultas específicas de versión
$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
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