HCL Commerce Developer

Personalizar el mandato de controlador basado en configuración y la infraestructura de correlación de beans de datos

HCL Commerce utiliza llamadas REST para algunos beans de datos de forma predeterminada. Configuradas con perfiles de correlación, los parámetros de entrada REST a métodos set de beans de datos o de mandatos de controlador, y los métodos getter de beans de datos o mandato de controlador con los parámetros de salida REST. Para personalizar este comportamiento, debe crear nuevas correlaciones o ampliar las correlaciones predeterminadas.

Los escenarios siguientes pueden ser típicos al personalizar la infraestructura:
  • Utilizar los mismos beans de datos de REST o mandatos de controlador que HCL Commerce, pero obteniendo un conjunto diferente de datos de entrada o de respuesta.
  • Crear subclases de un bean de datos preexistente para ampliar la función y crear una configuración de correlación REST que haga referencia al perfil de correlación preexistente para que pueda añadir los cambios Delta.
  • Configurar un nuevo servicio REST para un bean de datos o un mandato de controlador preexistente que no tiene ninguna configuración de REST predeterminada.
  • Crear o actualizar los beans de datos personalizados y de los mandatos de controlador a los que se accederá a través de REST.
Nota: Personalizar la infraestructura hace referencia a la creación de nuevos manejadores de REST y a la correlación de perfiles, o la ampliación de perfiles de correlación incorporados.

Procedimiento

  • Utilice el bean de datos o el directorio de extensión de mandato de controlador para añadir nuevos perfiles de correlación de configuración.
    Utilice las siguientes configuraciones de ejemplo como base:
    • Ubicación predeterminada de configuración: Rest.war/WebContent/WEB-INF/config/beanMapping/com.ibm.commerce.BeanBaseClass.xml
      
      <bean>
         <profiles>
            <profile name="IBM_Summary">
               <inputs>
                  <input inputName="int1" methodName="setInt1"/>
                  <input inputName="string1" methodName="setString1"/>
               </inputs>
               <outputs>
                  <output methodName="getInt1" outputName="int1"/>
                  <output methodName="getString1" outputName="string1"/>
               </outputs>
            </profile>
      
            <profile name="IBM_Details">
               <inputs>
                  <input inputName="int1" methodName="setInt1"/>
                  <input inputName="int2" methodName="setInt2"/>
                  <input inputName="string1" methodName="setString1"/>
                  <input inputName="string2" methodName="setString2"/>
               </inputs>
               <outputs>
                  <output methodName="getInt1" outputName="int1"/>
                  <output methodName="getInt2" outputName="int2"/>
                  <output methodName="getString1" outputName="string1"/>
                  <output methodName="getString2" outputName="string2"/>
                  <output methodName="getObject1" outputName="object1">
                     <output methodName="getLong1" outputName="long1"/>
                  </output>
               </outputs>
            </profile>
         </profiles>
      </bean>
      
      Donde:
      • El archivo de configuración predeterminado está en el directorio de correlación de beans predeterminado.
      • Contiene dos perfiles.
      • Cada perfil tiene correlaciones de entrada y de salida entre REST y el bean de datos.
    • Ubicación de configuración de extensión: Rest.war/WebContent/WEB-INF/config/beanMapping-ext/com.mycompany.BeanExtendedClass.xml
      
      <bean> 
         <profiles>
            <profile name="MyCompany_Details">
               <extends>
                   <extend profileName="IBM_Details" profileClass="com.ibm.commerce.BeanBaseClass"/>
               </extends>
               <inputs>
                  <input inputName="int1" methodName="setInt1" required="true"/>
                  <input inputName="int3" methodName="setInt3"/>
               </inputs>
               <outputs>
                  <output methodName="getString3" outputName="string3"/>
                  <output methodName="getString2a" outputName="string2"/>
                  <output methodName="getObject1" outputName="object1">
                     <output methodName="getLong2" outputName="long2"/>
                  </output>
               </outputs>
            </profile>
         </profiles>
      </bean>
      
      Donde:
      • El archivo de configuración de extensión se encuentra en el directorio de correlación de bean de extensión.
      • El nombre de archivo es diferente porque es una subclase personalizada del bean original.
      • Contiene un nuevo perfil llamado MyCompany_Details:
        • El perfil contiene un elemento extends, que indica dónde obtener los valores de entrada y salida con los que empezar. En este ejemplo, procede del perfil IBM_Details del archivo de configuración com.ibm.commerce.BeanBaseClass predeterminado.
        • Altera temporalmente la entrada int1 necesaria.
        • Añade una entrada int3 y una salida string3 nuevas.
        • Altera temporalmente la salida string2 para llamar al método getString2a en lugar de getString2.
        • Para el árbol o jerarquía de salida que empieza por object1, añada una salida de hoja llamada long2.
    • Ubicación de configuración de extensión: Rest.war/WebContent/WEB-INF/config/beanMapping-ext/com.ibm.commerce.BeanBaseClass.xml
      
      <bean>
         <profiles>
            <profile name="IBM_Summary">
               <extends>
                   <extend profileName="IBM_Summary"/>
               </extends>
               <outputs>
                  <output methodName="getString2" outputName="string2"/>
               </outputs>
            </profile>
         </profiles>
      </bean>
      
      Donde:
      • El archivo de configuración de extensión se encuentra en el directorio de correlación del bean de extensión.
      • El nombre de archivo es el mismo que el archivo predeterminado porque tiene la intención de alterar temporalmente los perfiles incorporados o añadir más perfiles para el bean original.
      • El perfil IBM_Summary se repite en este archivo, de modo que, siempre que se haga referencia a él mediante una llamada REST, tendrá prioridad el perfil de este archivo de extensión:
        • El perfil contiene elementos de extends, que indican dónde obtener los valores de entrada y salida con los que empezar. En este ejemplo, se procede del perfil IBM_Summary original.
        • Añade una nueva salida string2.
  • Asegúrese de tener en cuenta las siguientes reglas de extensiones:
    • Un archivo de correlación en el directorio de extensión tiene prioridad sobre la configuración predeterminada. Cuando se encuentra un perfil en ambos archivos, tiene prioridad el del archivo de extensión.
    • Utilizar la función extends/extend:
      • Los elementos extends/extend solo se permiten en un archivo de configuración de extensión.
      • Solo puede ampliar un perfil predeterminado por perfil de extensión.
      • El perfil original se utiliza como valor predeterminado. Todos los atributos de entrada y salida y listName se añaden al perfil ampliado.
      • Cualquier entrada en el perfil ampliado que tenga el mismo methodName sustituye a la que se encuentra en el perfil predeterminado, independientemente de inputName.
      • Cualquier entrada en el perfil ampliado que tenga el mismo inputName altera temporalmente el perfil predeterminado.
      • Cualquier otra entrada en el perfil ampliado se añade como una entrada nueva.
      • El valor del atributo listName lo dicta su uso en el perfil de extensión. Si no se menciona en el perfil de extensión, no se utiliza.
      • Si el elemento de salida es una ramificación (contiene elementos de salida dentro) en el perfil ampliado:
        • Si outputName es diferente, se añade una nueva ramificación.
        • Si outputName es el mismo que el valor predeterminado, pero la methodName de salida es diferente, la ramificación del valor predeterminado se sustituye por esta.
        • Si outputName y methodName son los mismos que una ramificación en el valor predeterminado, procesa los elementos en función de estas mismas reglas.
      • Cualquier salida que no sea una ramificación en el perfil ampliado que tenga el mismo outputName altera temporalmente el perfil predeterminado.
      • Si alguna entrada o salida está duplicada (mismo nombre) dentro del mismo perfil, el resultado no estará definido.
  • Tipos de parámetros de entrada admitidos.
    Si se realiza una llamada REST mediante los parámetros de vía de acceso (por ejemplo, series), un cuerpo JSON (por ejemplo, tipos de datos JSON), el AbstractConfigBasedClassicHandler necesita convertirlos al tipo de datos que espera el método set de bean de datos o de mandato de controlador. Para los tipos de fecha y hora, los formatos se centran en estándares ISO 8601. La tabla siguiente muestra una lista de tipos de datos de destino (tipos de parámetros de métodos set de bean de datos y de mandato de controlador) y los tipos de datos de entrada de REST admitidos:
    Bean de datos o tipo de datos de origen del mandato de controlador (por ejemplo, argumento de método set) Tipo de datos de entrada o fuente Formato de entrada o fuente (si aplica)
    java.lang.String Serie
    java.lang.Boolean (o bool) Serie true | false
    Booleano JSON
    java.lang.Number (por ejemplo, entero, largo, decimal grande) o números primitivos Número JSON de cadena Se ha intentado convertir al destino necesario
    java.util.Date Serie 2014-08-01T13:41:07Z
    2014-08-01T13:41:07-04:00
    2014-08-01T13:41:07-0400
    2014-08-12T13:41:07.123Z
    2014-08-12T13:41:07.000-04:00
    2014-08-12T13:41:07.789-0400
    java.sql.Timestamp Serie 2014-08-01T13:41:07Z
    2014-08-01T13:41:07-04:00
    2014-08-01T13:41:07-0400
    aaaa-mm-dd hh:mm:ss.[fff...] (tal como se describe en la documentación de Java para la indicación de fecha y hora)
    java.sql.Date Serie AAAA-MM-DD
    java.sql.Time Serie T16:57:30Z
    T16:57:30-05:00
    T16:57:30+0400
    16:57:30Z
    16:57:30-05:00
    16:57:30+0400
    T16:57:30
    16:57:30
    Matriz Java (por ejemplo, [123, 456, 789]) colección Java de elementos de cualquier tipo de destino soportado, siempre y cuando todos los elementos sean del mismo tipo de datos Matriz JSON de elementos de cualquier tipo de destino soportado
  • Formatos de salida JSON.
    En la tabla siguiente se describen los formatos de salida JSON que puede esperar para distintos tipos de datos que devuelven los métodos de tipo get de beans de datos y los mandatos de controlador:
    Bean de datos o tipo de datos de retorno de mandato de controlador Tipo de datos JSON Formato JSON (si aplica)
    java.lang.String Cadena JSON
    java.lang.Number (por ejemplo, entero, largo, decimal grande) o números primitivos Número JSON
    java.lang.Boolean (o bool) Booleano JSON
    java.util.Date Cadena JSON 1975-08-04T12:35:00.123Z
    java.sql.Timestamp Cadena JSON 2014-08-01T13:41:07.000000000Z
    java.sql.Date Cadena JSON AAAA-MM-DD
    java.sql.Time Cadena JSON 13:41:07Z
    Matriz Java (por ejemplo, [123, 456, 789]) o colección Java (se espera que todos los elementos sean del mismo tipo de datos) Matriz JSON
    Correlación Java Objeto JSON (las claves son cadenas, los valores son de cualquier tipo de retorno soportado)