Personnalisation des demandes de service sortant existantes

Avec HCL Commerce, vous pouvez personnaliser les requêtes de service sortant existantes ; par exemple, vous pouvez les étendre pour y inclure des données utilisateur additionnelles.

Procédure

  1. Identifiez la commande de tâche de client responsable de l'émission de la demande de service sortant. Pour cela, référez-vous à la table de correspondance entre requêtes de service et instructions de tâche de client, à la rubrique Points d'intégration sortants orientés services. Par exemple, l'instruction de tâche de client com.ibm.commerce.order.client.commands.ProcessOrderCmd est chargée de composer le SDO ProcessOrder et d'appeler l'implémentation de façade de client pour émettre la requête de service sortant TransferOrder.
  2. Etendez l'implémentation par défaut de la commande de tâche de client et enregistrez-la comme implémentation personnalisée. Par exemple, pour personnaliser la requête de service sortant TransferOrder, étendez l'implémentation par défaut de l'API com.ibm.commerce.order.client.commands.ProcessOrderCmd :
    
    import com.ibm.commerce.order.client.commands.ProcessOrderCmdImpl;
    
    public class MyProcessOrderCmdImpl extends ProcessOrderCmdImpl {
    }
    
  3. Remplacez une ou plusieurs des méthodes protégées responsables de la composition du BOD de la demande et de ses composants. Par exemple, la méthode com.ibm.commerce.order.client.commands.ProcessOrderCmdImpl.composeProcessOrder() peut être remplacée pour modifier le SDO ProcessOrder en cours de composition :
    
    import com.ibm.commerce.exception.ECException;
    import com.ibm.commerce.order.client.commands.ProcessOrderCmdImpl;
    import com.ibm.commerce.order.datatypes.ProcessOrderType;
    
    public class MyProcessOrderCmdImpl extends ProcessOrderCmdImpl {
            protected ProcessOrderType composeProcessOrder() throws
    ECException {
                    ProcessOrderType processOrder =
    super.composeProcessOrder();
                    //custom code here
                    return processOrder;
            }
    }
    

    Le code personnalisé peut modifier le SDO en vue d'ajouter de nouveaux composants ou de changer les composants existants. Vous pouvez notamment ajouter vos propres données au SDO en utilisant l'une de ses zones de données utilisateur (userData). Par exemple, le code suivant ajoutera la zone de données utilisateur foo avec la valeur bar à la zone de données utilisateur de l'en-tête de la commande :

    
    public class MyProcessOrderCmdImpl extends ProcessOrderCmdImpl {
            protected ProcessOrderType composeProcessOrder() throws
    ECException {
                    ProcessOrderType processOrder =
    super.composeProcessOrder();
                    OrderType order =
    (OrderType)processOrder.getDataArea().getOrder().get(0);
                    UserDataType userData =
    order.getOrderHeader().getUserData();
                    if(userData == null) {
                            userData =
    getCommerceFoundationFactory().createUserDataType();
                           
    order.getOrderHeader().setUserData(userData);
                    }
                    UserDataFieldType userDataField =
    getCommerceFoundationFactory().createUserDataFieldType();
                    userDataField.setName("foo");
                    userDataField.setValue("bar");
                   
    order.getOrderHeader().getUserData().getUserDataField().add(userDataField);
                    return processOrder;
            }
    }
    

    Le BOD ProcessOrder résultant sera le suivant :

    
    <ord:ProcessOrder>
            <wcf:ApplicationArea>...</wcf:ApplicationArea>
            <ord:DataArea>
                    <wcf:Process>...</wcf:Process>
                    <ord:Order>
                            ...
                            <wcf:UserData>
                                    <wcf:UserDataField
    name="foo">bar</wcf:UserDataField>
                            </wcf:UserData>
                    </ord:Order>
            </ord:DataArea>
    </ord:ProcessOrder>