Personalización de solicitudes de servicios de salida existentes

Con HCL Commerce, puede personalizar las solicitudes de servicio de salida existentes, como por ejemplo, ampliarlos para que incluyan datos de usuario adicionales.

Procedimiento

  1. Identifique el mandato de tarea de cliente que se ocupa de realizar la solicitud de servicio de salida. Las correlaciones entre solicitudes de servicio y mandatos de tarea de cliente se encuentran en Correlaciones de mensajes de servicios de salida habilitadas para la integración orientada a servicios. Por ejemplo, el mandato de tarea de cliente de pedido com.ibm.commerce.order.client.commands.ProcessOrderCmd se ocupa de componer el SDO ProcessOrder e invocar la implementación de portada de cliente de pedido para efectuar solicitudes de servicio de salida TransferOrder.
  2. Amplíe la implementación predeterminada del mandato de tarea de cliente y registre la implementación personalizada. Por ejemplo, para personalizar la solicitud de servicio de salida TransferOrder, amplíe la implementación predeterminada de com.ibm.commerce.order.client.commands.ProcessOrderCmd:
    
    import com.ibm.commerce.order.client.commands.ProcessOrderCmdImpl;
    
    public class MyProcessOrderCmdImpl extends ProcessOrderCmdImpl {
    }
    
  3. Altere temporalmente uno o varios métodos protegidos que se encargan de componer el BOD de solicitud y sus componentes. Por ejemplo, el método com.ibm.commerce.order.client.commands.ProcessOrderCmdImpl.composeProcessOrder() se puede sustituir para modificar el SDO ProcessOrder compuesto:
    
    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;
            }
    }
    

    El código personalizado puede modificar el SDO añadiendo nuevos componentes o modificando componentes existentes. En concreto, se pueden añadir datos de usuario personalizados al SDO utilizando una de sus áreas de datos de usuario. Por ejemplo, en el siguiente código se añade el campo de datos de usuario foo con el valor bar al área de datos de usuario de la cabecera del pedido:

    
    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;
            }
    }
    

    Este se convertirá en el siguiente BOD ProcessOrder:

    
    <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>