HCL Commerce Developer

Personnalisation de la structure de mappage de la commande de contrôleur et des beans de données basée sur la configuration.

HCL Commerce utilise les appels REST pour certains beans de données par défaut. Ils sont configurés avec des profils de mappage qui mappent les paramètres d'entrée REST aux méthodes d'accès set du bean de données ou de la commande de contrôleur, et les méthodes d'accès get du bean de données ou de la commande de contrôleur aux paramètres de sortie REST. Pour personnaliser ce comportement, vous devez créer de nouveaux mappages ou étendre les mappages par défaut.

Les scénarios suivants peuvent être typiques lors de la personnalisation de la structure :
  • Utilisation des mêmes beans de données ou commandes de contrôleur REST que HCL Commerce, mais obtention d'un ensemble différent de données d'entrée ou de réponse.
  • Création d'une sous-classe pour un bean de données préexistant pour étendre la fonction et création d'une configuration de mappage REST qui fait référence au profil de mappage préexistant afin que vous puissiez ajouter les modifications delta.
  • Configuration d'un nouveau service REST pour un bean de données ou une commande de contrôleur préexistant qui n'a pas de configuration REST par défaut.
  • Création ou mise à jour de vos propres beans de données et commandes de contrôleur personnalisés auxquels accéder via REST.
Remarque : La personnalisation de la structure consiste à créer de nouveaux gestionnaires REST et profils de mappage ou à étendre les profils de mappage intégrés.

Procédure

  • Utilisez le répertoire d'extension des beans de données ou des commandes de contrôleur pour ajouter de nouveaux profils de mappage de configuration.
    Utilisez les exemples de configurations suivants en tant que base :
    • Emplacement de la configuration par défaut : 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>
      
      Où :
      • Le fichier de configuration par défaut se trouve dans le répertoire de mappage des beans par défaut.
      • Il contient deux profils.
      • Chaque profil comporte des mappages d'entrée et de sortie entre REST et le bean de données.
    • Emplacement de la configuration d'extension : 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>
      
      Où :
      • Le fichier de configuration d'extension se trouve dans le répertoire de mappage des beans d'extension.
      • Le nom de fichier est différent, car il s'agit d'une sous-classe personnalisée du bean d'origine.
      • Il contient un nouveau profil appelé MyCompany_Details :
        • Le profil contient un élément d'extension, indiquant où obtenir les valeurs d'entrée et de sortie pour commencer. Dans cet exemple, il provient du profil IBM_Details du fichier de configuration com.ibm.commerce.BeanBaseClass par défaut.
        • Il remplace l'entrée int1 requise.
        • Il ajoute la nouvelle entrée int3 et la nouvelle sortie string3.
        • Il remplace la sortie string2 pour appeler la méthode getString2a au lieu de la méthode getString2.
        • Pour l'arborescence ou la hiérarchie de sortie qui commence par object1, ajoutez une sortie de feuille appelée long2.
    • Emplacement de la configuration d'extension : 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>
      
      Où :
      • Le fichier de configuration d'extension se trouve dans le répertoire de mappage des beans d'extension.
      • Le nom de fichier est le même que le fichier par défaut, car il est destiné à remplacer les profils intégrés ou à ajouter d'autres profils pour le bean d'origine.
      • Le profil IBM_Summary est répété dans ce fichier, de sorte que chaque fois qu'il est référencé par un appel REST, le profil de ce fichier d'extension est prioritaire :
        • Le profil contient des éléments extends indiquant où obtenir les valeurs d'entrée et de sortie avec lesquelles commencer. Dans cet exemple, il provient du profil IBM_Summary d'origine.
        • Ajoute une nouvelle sortie string2.
  • Assurez-vous d'être au courant des règles suivantes pour les extensions :
    • Un fichier de mappage dans le répertoire d'extension est prioritaire sur la configuration par défaut. Lorsqu'un profil se trouve dans les deux fichiers, celui du fichier d'extension est prioritaire.
    • Utilisation de la capacité d'extension/étendre :
      • Les éléments extension/extension ne sont autorisés que dans un fichier de configuration d'extension.
      • Vous ne pouvez étendre qu'un seul profil par défaut par profil d'extension.
      • Le profil d'origine est utilisé par défaut. Toutes les entrées et sorties et attributs listName sont ajoutés au profil étendu.
      • Toute entrée dans le profil étendu qui a le même nom methodName remplace celle trouvée dans le profil par défaut, indépendamment de inputName.
      • Toute entrée dans le profil étendu qui possède le même inputName remplace le profil par défaut.
      • Toute autre entrée dans le profil étendu est ajoutée sous forme de nouvelle entrée.
      • La valeur d'attribut listName est dictée par son utilisation dans le profil d'extension. S'il n'est pas mentionné dans le profil d'extension, il n'est pas utilisé.
      • Si l'élément de sortie est une branche (contient des éléments de sortie) dans le profil étendu :
        • Si le nom outputName est différent, une nouvelle branche est ajoutée.
        • Si le nom outputName est le même que celui par défaut, mais que le nom methodName de sortie est différent, la branche de la valeur par défaut est remplacée par celle-ci.
        • Si les noms outputName et methodName sont les mêmes qu'une branche dans la valeur par défaut, ils traitent les éléments à l'intérieur selon ces mêmes règles.
      • Toute sortie qui n'est pas une branche dans le profil étendu et qui a le même nom outputName remplace le profil par défaut.
      • Si une entrée ou une sortie est dupliquée (même nom) dans le même profil, le résultat n'est pas défini.
  • Types de paramètres d'entrée pris en charge.
    Qu'un appel REST soit effectué à l'aide de paramètres de chemin d'accès (par exemple, des chaînes) ou d'un corps JSON (par exemple, des types de données JSON), AbstractConfigBasedClassicHandler doit les convertir au type de données attendu par la méthode d'accès set du bean de données ou de la commande de contrôleur. Pour les types de date/heure, les formats sont axés sur les normes ISO 8601. La table suivante affiche une liste des types de données cible (types de paramètres de méthode d'accès set du bean de données et de la commande de contrôleur) et des types de données d'entrée REST pris en charge :
    Type de données cible du bean de données ou de la commande de contrôleur (par exemple, argument de méthode d'accès set) Type de données d'entrée/de source Format d'entrée/de source (le cas échéant)
    java.lang.String Chaîne
    java.lang.Boolean (ou bool) Chaîne true | false
    Booléen JSON
    java.lang.Number (par exemple, Integer, Long, BigDecimal) ou nombres primitifs ChaîneNuméro JSON Tentative de conversion en cible requise
    java.util.Date Chaîne 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 Chaîne 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...] (tel que décrit dans la documentation Java pour l'horodatage)
    java.sql.Date Chaîne AAAA-MM-JJ
    java.sql.Time Chaîne 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
    Tableau Java (par exemple, [123, 456, 789])Collection Java d'éléments de n'importe quel type de cible pris en charge, à mesure que tous les éléments sont du même type de données Tableau JSON d'éléments de n'importe quel type de cible pris en charge
  • Formats de sortie JSON.
    La table suivante décrit les formats de sortie JSON auxquels vous pouvez vous attendre pour les différents types de données renvoyées par les méthodes d'accès de type get des beans de données et des commandes de contrôleur :
    Type de données de retour du bean de données ou de la commande de contrôleur Type de données JSON Format JSON (le cas échéant)
    java.lang.String Chaîne JSON
    java.lang.Number (par exemple, Integer, Long, BigDecimal) ou nombres primitifs Numéro JSON
    java.lang.Boolean (ou bool) Booléen JSON
    java.util.Date Chaîne JSON 1975-08-04T12:35:00.123Z
    java.sql.Timestamp Chaîne JSON 2014-08-01T13:41:07.000000000Z
    java.sql.Date Chaîne JSON AAAA-MM-JJ
    java.sql.Time Chaîne JSON 13:41:07Z
    Tableau Java (par exemple, [123, 456, 789]) ou collection Java (on s'attend à ce que tous les éléments soient du même type de données) Tableau JSON
    Mappe Java Objet JSON (les touches sont des chaînes, les valeurs sont de n'importe quel type de retour pris en charge)