Extension d'un nom

Il existe deux méthodes pour ajouter plus d'informations au nom. La méthode la plus simple consiste à tirer parti des points d'extension UserData fournis par les noms de composant. L'alternative est de profiter de la méthodologie de chevauchement. Les extensions de chevauchement permettent aux utilisateurs d'afficher leurs extensions dans les types OAGIS ou HCL Commerce complexes. Pour ajouter des éléments, un utilisateur doit étendre les types OAGIS ou HCL Commerce complexes dans son propre espace de noms. Ce faisant, il est possible pour les utilisateurs d'appliquer des restrictions supplémentaires ou d'ajouter des éléments supplémentaires aux types OAGIS ou HCL Commerce complexes.

Procédure

  • Ajout d'autres données à l'aide des points d'extension UserData :
    Pour utiliser cette approche simple consistant à ajouter plus d'informations à la requête, vous devez effectuer les mises à jour suivantes.
    1. Identifiez la bibliothèque client qui remplit le nom et étendez-la. L'extension remplira les éléments UserData du Nom pour contenir les informations supplémentaires.

      Par exemple, si vous ajoutez un nouvel attribut tel que des données de gravure à un ensemble d'éléments de commande, vous ajoutez le code suivant à la méthode 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]);
                      }
              }
      }
      
      Cela ajoute la logique supplémentaire pour remplir l'extension UserData. Le résultat, dans le BOD, devrait être similaire à l'exemple ci-après :
      
      <_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. Identifiez les commandes de service qui nécessitent une personnalisation pour gérer les nouvelles informations à l'intérieur de l'UserData étendu. Prolongez l'implémentation de commande, suivant l'un des patterns de conception de service HCL Commerce. Par exemple, vous pouvez étendre la méthode performExecute() de la commande de tâche ExtendOrderItemProcessCmdImpl pour enregistrer les UserData des propriétés de la requête dans la base de données.
      Type de demande
      Process, Change ou Sync Mettez à jour les commandes de service qui doivent être en mesure de gérer les données supplémentaires. Pour plus d'informations, consultez le pattern de conception pour l'implémentation des services Process, Change et Sync.
      Get Étendez l'implémentation de la commande de tâche Compose (ou Format) pour le profil d'accès approprié afin de remplir les informations supplémentaires dans l'élément UserData. Pour plus d'informations, consultez le pattern de conception pour l'implémentation de services Get.
    3. Enregistrez votre nouvelle implémentation de commande.
  • Ajout de données supplémentaires à l'aide du modèle d'extension de chevauchement :

    L'ajout de plus de données à l'aide du modèle d'extension de chevauchement nécessite plus d'étapes que l'approche UserData. Ainsi, pour les cas où vous ne pouvez pas utiliser l'approche UserData simple pour ajouter plus de données pour une requête donnée, effectuez les étapes suivantes lors du chevauchement du schéma existant.

    1. Identifiez le nom du composant que vous souhaitez étendre. L'extension du nom peut consister à ajouter un nouvel élément au nom ou à étendre un type complexe existant pour contenir plus d'informations.
    2. Créez un fichier XSD à l'aide de la structure de répertoire recommandée et de votre espace de noms personnalisé qui contient le type complexe étendu avec les éléments et attributs supplémentaires.
    3. Dans le fichier XSD, définissez un élément du type complexe que vous avez créé. Cet élément doit être déclaré comme un groupe de substitution de l'élément qu'il peut remplacer. Par exemple :
      
      <element name="ComplexObject"
      type="myco:MyOverlayComplexObjectType"
      substitutionGroup="_ord:ComplexObjectType"/>
      
    4. Créez le fichier d'objet SDO genmodel pour les fichiers XSD qui contiennent les types d'extension.
    5. Générez le code SDO à partir du fichier SDO genmodel.
    6. Créez un fichier SDO.properties dans le dossier xml/config/ pour enregistrer la classe de package SDO générée. Afin de prendre en charge la détection automatique d'un document XML vers l'objet Java approprié, la classe d'implémentation du package SDO doit être enregistrée dans l'application. Le fichier SDO.properties prend en charge l'enregistrement de packages SDO. Un exemple de ce fichier est le suivant :
      
      com.ibm.commerce.foundation-ext/SDO.properties
      
    7. Identifiez la logique client qui remplit l'objet Java Noun et ajoutez la logique supplémentaire pour créer l'objet SDO étendu et le remplir. Cette logique peut être une autre logique métier qui remplit des morceaux du nom et utilise la bibliothèque client pour effectuer la requête, ou il peut s'agir de la bibliothèque client.
      1. Dans le cas où la logique métier est la bibliothèque client, la bibliothèque client doit être étendue et la logique métier doit appeler la bibliothèque client étendue. Par exemple, si l'extension ajoute plus d'informations pour une requête Web, la méthode de mappe de la bibliothèque client est étendue pour gérer les données supplémentaires ; L'action appelant la bibliothèque utilise la bibliothèque client étendue.
    8. Identifiez les commandes de composant qui doivent être modifiées pour gérer la structure de chevauchement. Étendez l'implémentation de commande en conséquence.
      1. Dans le cas d'une requête Process, Change ou Sync, mettez à jour les commandes de service qui doivent être en mesure de gérer les données supplémentaires. Lorsque le modèle de mappage de messages est utilisé pour appeler les commandes de contrôleur existantes, créez une copie du mappage de modèle existant et enregistrez-la dans component-services-user-template.xml. Ajoutez ensuite le mappage d'extension de chevauchement au modèle copié pour tenir compte des informations étendues ajoutées.
      2. Dans le cas d'une requête Get, étendez l'implémentation de la commande Compose (ou Format) pour le profil d'accès approprié afin de créer le SDO étendu qui représente le chevauchement, puis le remplir avec les informations appropriées.
    9. Enregistrez votre nouvelle implémentation de commande.

Résultats

Remarque : Étant donné que vous possédez tous les nouveaux objets de données que vous définissez, tout objet qui utilise ou étend des objets communs doit être placé dans votre espace de noms. Autrement dit, vous ne devez pas ajouter de nouveaux types de données aux XSD de type Common et Identifier. Bien que l'extension puisse sembler plus simple, elle peut entraîner des problèmes futurs lorsque vous tenterez de réutiliser les objets Java dans l'ensemble des noms.