Habilitar la visualización de versiones de objetos personalizados en la interfaz de usuario

Para habilitar la visualización de objetos de versión en la interfaz de usuario, debe crear un archivo JSP de serialización que recupere los datos del objeto de versión; asimismo, debe actualizar el archivo de plantilla de consulta para que las consultas SQL que pueden tener versiones recuperen la información de las distintas versiones.

Antes de empezar

  • Asegúrese de que las tablas personalizadas ya se han añadido al esquema de versiones.
  • Revise el tema siguiente para obtener más información acerca de la visualización de detalles de las versiones: Mostrar detalles de versión.

Procedimiento

  1. Cree un archivo JSP de serialización para transformar los objetos de versión de servidor en XML que el cliente pueda entender.
  2. Actualice el archivo de plantilla de consulta personalizado.
    Para ver la información sobre la versión, debe actualizar el archivo de plantilla de consulta. El archivo de plantilla de consulta define las consultas SQL que recuperan datos del servidor.

    Cuando se visualizan versiones, algunos de los datos deben recuperarse del esquema de versiones y otros datos deben recuperarse del esquema base. Debe determinar si debe escribir consultas específicas de la versión. Para obtener más información sobre la generación de SQL de plantillas de consulta, consulte Mostrar detalles de versión.

    A continuación se muestra un ejemplo de un archivo de plantilla de consulta personalizado que recupera distintas versiones del objeto Recipe utilizando la generación de SQL de versión.
    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
  3. Configure los servicios existentes para recuperar información relacionada con las versiones.
    La infraestructura de HCL Commerce comparte servicios para recuperar información para los objetos de negocio y sus versiones. Por ejemplo, un objeto de producto utiliza el servicio GetChildrenService siguiente en ProductPrimaryObjectDefinition.def para recuperar atributos de definición:
    <GetChildrenService objectTypes="CatalogEntryDefiningAttribute" url="/cmc/GetCatalogEntryChildren-DefiningAttributes">
    	<ServiceParam name="storeId"/>
    	<ServiceParam name="defaultLanguageId"/>
    </GetChildrenService> 
    Si desea crear versiones de los atributos de definición que pertenecen a este producto, puede configurar este servicio para recuperar atributos de definición para las versiones de este producto o el producto propiamente dicho de este modo:
    1. Identifique el servicio GetChildrenService correspondiente como se muestra en la definición de objeto primario de este objeto de negocio.
    2. Utilice el archivo de configuración de Struts para identificar el archivo JSP que proporciona este servicio:
      <action name="GetCatalogEntryChildren-DefiningAttributes">
      <result name="GetCatalogEntryChildren-DefiningAttributes">
      <param name="location">/jsp/commerce/catalog/restricted/GetCatalogEntryDefiningAttributes.jsp</param>
      </result>
      </action>
    3. En el archivo GetCatalogEntryDefiningAttributes.jsp, añada los siguientes datos de contexto al servicio getData:
      <wcf:contextData name="versionId" data="${param.objectVersionId}"/> 
      Código del servicio getData completo:
      <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> 

      Cuando se invoca un servicio de versión de contenido, los datos de contexto versionId indican al servicio getData del servidor si la solicitud es para el objeto de negocio o para la versión del objeto de negocio. Por ejemplo, al abrir un producto, el servicio getData se invoca para recuperar información del atributo de definición. En este caso, se asigna un valor vacío al parámetro versionId, porque no se trata de una versión del producto. No obstante, si abre una versión del producto, se asigna un valor no vacío a parámetro versionId y el servicio getData utiliza este ID para devolver la información del atributo de definición para la versión del producto en particular.

    4. Si crea versiones de otros objetos hijo de este objeto principal, repita los pasos precedentes para el servicio GetChildrenService correspondiente.
    5. Si decide crear una versión de una relación determinada que pertenece a un objeto de negocio, por ejemplo, la categoría padre de un producto, debe configurar el servicio GetReferencesService correspondiente en ProductPrimaryObjectDefinition.def:
      <GetReferencesService url="/cmc/GetCatalogEntryParent-MasterCatalogCatalogGroup">
      	<ServiceParam name="storeId"/>
      	<ServiceParam name="masterCatalogId"/>
      	<ServiceParam name="catentryId" propertyName="catentryId"/>
      	<ServiceParam name="childType" value="ChildProduct"/>
      </GetReferencesService> 
    6. Utilice el archivo de configuración de Struts para identificar el archivo JSP que proporciona este servicio:
      <action name="GetCatalogEntryParent-MasterCatalogCatalogGroup">
      <result name="GetCatalogEntryParent-MasterCatalogCatalogGroup">
      <param name="location">/jsp/commerce/catalog/restricted/GetCatalogEntryParent-ReferenceMasterCatalogGroup.jsp</param>
      </result>
      </action>
    7. En el archivo GetCatalogEntryParent-ReferenceMasterCatalogGroup.jsp, añada los siguientes datos de contexto al servicio getData:
      <wcf:contextData name="versionId" data="${param.objectVersionId}"/> 
      Código del servicio getData completo:
      <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> 
    8. Repita los pasos precedentes para configurar versiones de otras relaciones de este objeto de negocio.
    9. Incluya la información de versionIdpara el servicio RefreshService de modo que, cuando los usuarios deseen renovar el objeto de versión, la información de la versión se recupere de nuevo. Por ejemplo, para el objeto Product, localice el RefreshService en el archivo CatalogEntryPrimaryObjectDefinition.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> 
    10. Utilice el archivo de configuración de Struts para identificar el archivo JSP que proporciona este servicio:
      <action name="GetCatalogEntry">
      <result name="GetCatalogEntry">
      <param name="location">/jsp/commerce/catalog/restricted/GetCatalogEntry.jsp</param>
      </result>
      </action>
    11. En el archivo GetCatalogEntry.jsp, añada una entrada de datos de contexto de este modo:
      <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> 
    Ha configurado los servicios GetChildrenService, GetReferenceService y RefreshService para proporcionar información de versión para el objeto Product.
  4. Actualice el registro de mandatos para el perfil de acceso personalizado para registrar la implementación del mandato para insertar más versiones.
    Al visualizar objetos de versión, el Management Center debe tener información sobre la versión, como el ID de versión. Para recuperar e incluir esta información en el nombre, debe registrar un mandato "InsertMore".
    A continuación se muestra la sentencia SQL de ejemplo para registrar el perfil de acceso personalizado MyCompany_All para el ejemplo Warranty precedente:
    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');
    

    InsertMoreNounVersionMetaDataCmdImpl busca la información de la versión para el nombre CatalogEntry y añade dicha información a la respuesta.