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
- 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.ProcessOrderCmdest chargée de composer le SDOProcessOrderet d'appeler l'implémentation de façade de client pour émettre la requête de service sortantTransferOrder. -
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'APIcom.ibm.commerce.order.client.commands.ProcessOrderCmd:import com.ibm.commerce.order.client.commands.ProcessOrderCmdImpl; public class MyProcessOrderCmdImpl extends ProcessOrderCmdImpl { } - 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 SDOProcessOrderen 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
fooavec la valeurbarà 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
ProcessOrderré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>