Ampliar un nombre

Hay dos métodos para añadir más información al nombre. El método más sencillo es aprovechar los puntos de extensión UserData que proporcionan los nombres de componente. La alternativa es aprovechar la metodología de superposición. Las extensiones de superposición permiten a los usuarios que sus extensiones aparezcan dentro de los tipos complejos HCL Commerce u OAGIS. Para añadir elementos, un usuario debe ampliar los tipos complejos HCL Commerce u OAGIS dentro de su propio espacio de nombres. Al hacerlo, los usuarios pueden implementar restricciones adicionales o añadir elementos adicionales a los tipos complejos HCL Commerce u OAGIS.

Procedimiento

  • Añadir más datos utilizando los puntos de extensión UserData:
    Para utilizar este método sencillo de adición de más información a la petición, debe efectuar las actualizaciones siguientes.
    1. Identifique la biblioteca de cliente que rellena el nombre y amplíela. La extensión rellenará los elementos UserData del nombre para que contengan la información adicional.

      Por ejemplo, si añadiera un atributo nuevo, como por ejemplo datos de grabado, a un conjunto de artículos de pedido, especificaría el código siguiente en el método buildOrderItems.

      
      for (int i=0; i<orderItems.length; i++) //for all of the order
      items
      {
              OrderItemType orderItem = orderItems[i]; //get a particular
      orderItem
              //prepare the userData section
              UserDataType userData = orderItem.getUserData();
              if (userData == null)
              {
                      userData =
      CommerceFoundationFactory.eINSTANCE.createUserDataType();
              }
              orderItem.setUserData(userData);
              Map userDataFields  = userData.getUserDataField();
      
              //iterate through all the engraving parameters
              Set keys = parameters.keySet();
              Iterator it = keys.iterator();
              while (it.hasNext())
              {
                      String keyName = (String)it.next();
                      if (keyName.startsWith(ENGRAVINGKEYNAME))//if it is
      an engraving attribute
                      {
                              String[] values =
      (String[])parameters.get(keyName);
                              //create a new name, value pair type
                              userDataFields.put(keyName,values[i]);
                      }
              }
      }
      
      Esto añade la lógica adicional para rellenar la extensión UserData. El resultado, en el BOD, debe parecerse al ejemplo siguiente:
      
      <_wcf:UserData>
      <_wcf:UserDataField
      name="engravingFont">Arial</_wcf:UserDataField>
      <_wcf:UserDataField name="engravingText">Happy
      Birthday</_wcf:UserDataField>
      <_wcf:UserDataField
      name="engravingColor">red</_wcf:UserDataField>
      </_wcf:UserData>
      
    2. Identifique los mandatos de servicio que requieren personalización para manejar la nueva información dentro del UserData ampliado. Amplíe la implementación del mandato, siguiendo uno de los patrones de diseño de servicio HCL Commerce. Por ejemplo, puede ampliar el método performExecute() del mandato de tarea ExtendOrderItemProcessCmdImpl para guardar los UserData de las propiedades de petición en la base de datos.
      Tipo de petición
      Process, Change o Sync Actualice los mandatos de servicio que deben poder manejar los datos adicionales. Consulte el patrón de diseño para la implementación de los servicios Process, Change y Sync para obtener más información.
      Get Amplíe la implementación del mandato de tarea Compose (o Format) para el perfil de acceso adecuado, para rellenar la información adicional en el elemento UserData. Consulte el patrón de diseño para la implementación del servicio Get para obtener más información.
    3. Registre la nueva implementación de mandato.
  • Añadir más datos utilizando el modelo de extensión de superposición:

    Añadir más datos utilizando el modelo de extensión de superposición requiere más pasos que el método de UserData. Por tanto, en los casos en que no pueda utilizar el sencillo método de UserData para añadir más datos a una petición específica, realice los pasos siguientes al efectuar la superposición del esquema existente.

    1. Identifique el nombre del componente que desea ampliar. Ampliar el nombre puede consistir en añadir un elemento nuevo al nombre o en ampliar un tipo complejo existente para que contenga más información.
    2. Cree un archivo XSD utilizando la estructura de directorios recomendada y su espacio de nombres personalizado, que contiene el tipo complejo ampliado con los elementos y atributos adicionales.
    3. En el archivo XSD, defina un elemento que sea del tipo complejo que ha creado. Este elemento debe declararse como un grupo de sustitución del elemento que puede sustituir. Por ejemplo:
      
      <element name="ComplexObject"
      type="myco:MyOverlayComplexObjectType"
      substitutionGroup="_ord:ComplexObjectType"/>
      
    4. Cree el archivo genmodel de objetos de datos de servicio para los archivos XSD que contienen los tipos de extensión.
    5. Genere el código SDO a partir del archivo genmodel de SDO.
    6. Cree un archivo SDO.properties en la carpeta xml/config/ para registrar la clase de paquete SDO que se ha generado. Para dar soporte a la detección automática de un documento XML en el objeto Java adecuado, la clase de implementación de paquete SDO debe registrarse en la aplicación. El archivo SDO.properties da soporte al registro de paquetes SDO. Un ejemplo de este archivo es el siguiente:
      
      com.ibm.commerce.foundation-ext/SDO.properties
      
    7. Identifique la lógica de cliente que rellena el objeto Nombre Java y añada la lógica adicional para crear el objeto SDO ampliado y rellenarlo. Esta lógica puede ser otra lógica de negocio que rellena parte del nombre y utiliza la biblioteca de cliente para realizar la petición, o puede ser la biblioteca de cliente.
      1. En el caso en que la lógica de negocio es la biblioteca de cliente, ésta debe ampliarse y la lógica de negocio debe llamar a la biblioteca de cliente ampliada. Por ejemplo, si la extensión es añadir más información para una petición basada en web, el método de correlación de la biblioteca de cliente se amplía para manejar los datos adicionales; la acción que llama a la biblioteca utiliza la biblioteca de cliente ampliada.
    8. Identifique los mandatos de componente que deben cambiarse para manejar la estructura de superposición. Amplíe la implementación de mandato de la forma adecuada.
      1. En el caso de una petición Process, Change o Sync, actualice los mandatos de servicio que deben poder manejar los datos adicionales. Cuando se utiliza la plantilla de correlación de mensajes para llamar a mandatos de controlador existentes, cree una copia de la correlación de plantilla existente y registre la copia en component-services-user-template.xml. A continuación, añada la correlación de extensión de superposición en la plantilla copiada para que maneje la información ampliada que se ha añadido.
      2. En el caso de una petición Get, amplíe la implementación del mandato de tarea Compose (o Format) para el perfil de acceso adecuado, para crear el SDO ampliado que representa la superposición y rellénelo con la información adecuada.
    9. Registre la nueva implementación de mandato.

Resultados

Nota: Puesto que usted es el propietario de todos los objetos de datos nuevos que define, cualquier objeto que utiliza o amplía objetos comunes debe ponerse bajo su espacio de nombres. Es decir, no debe añadir nuevos tipos de datos en los XSD de tipo Common y Identifier. Aunque realizar la ampliación puede parecer más sencillo, pueden producirse problemas futuros al intentar reutilizar los objetos Java en los nombres.