Saltar al contenido

Consuma servicios web basados ​​en SOAP con el entorno ABAP de SAP Cloud Platform


Paso 1: guarde el archivo WSDL

  1. Guarde el siguiente conjunto de códigos como EPM_Product_SOAP.WSDL. Este archivo WSDL se utilizará en los siguientes pasos.

    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://sap.com/EPM_PRODUCT_SOAP" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" targetNamespace="http://sap.com/EPM_PRODUCT_SOAP"> <wsdl:documentation> <sidl:sidl xmlns:sidl="http://www.sap.com/2007/03/sidl"/> </wsdl:documentation> <wsp:UsingPolicy wsdl:required="true"/> <wsp:Policy wsu:Id="BN__EPM_Product_SOAP"> <wsp:ExactlyOne> <wsp:All> <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled> <saptrnbnd:OptimizedMimeSerialization xmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" wsp:Optional="true"/> <wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/> </wsp:All> <wsp:All> <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled> <saptrnbnd:OptimizedXMLTransfer xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/" uri="http://xml.sap.com/2006/11/esi/esp/binxml" wsp:Optional="true"/> <wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/> </wsp:All> </wsp:ExactlyOne> </wsp:Policy> <wsp:Policy wsu:Id="BN__EPM_Product_SOAP_soap12"> <wsp:ExactlyOne> <wsp:All> <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled> <saptrnbnd:OptimizedMimeSerialization xmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" wsp:Optional="true"/> <wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/> </wsp:All> <wsp:All> <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">false</sapattahnd:Enabled> <saptrnbnd:OptimizedXMLTransfer xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/" uri="http://xml.sap.com/2006/11/esi/esp/binxml" wsp:Optional="true"/> <wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/> </wsp:All> </wsp:ExactlyOne> </wsp:Policy> <wsp:Policy wsu:Id="IF__EPM_Product_SOAP"> <wsp:ExactlyOne> <wsp:All> <sapsession:Session xmlns:sapsession="http://www.sap.com/webas/630/soap/features/session/"> <sapsession:enableSession>false</sapsession:enableSession> </sapsession:Session> <sapcentraladmin:CentralAdministration xmlns:sapcentraladmin="http://www.sap.com/webas/700/soap/features/CentralAdministration/" wsp:Optional="true"> <sapcentraladmin:BusinessApplicationID>0050568C901D1ED79182D1F2706880F5</sapcentraladmin:BusinessApplicationID> </sapcentraladmin:CentralAdministration> </wsp:All> </wsp:ExactlyOne> </wsp:Policy> <wsp:Policy wsu:Id="OP__get_price"> <wsp:ExactlyOne> <wsp:All> <saptrhnw05:required xmlns:saptrhnw05="http://www.sap.com/NW05/soap/features/transaction/">no</saptrhnw05:required> <sapcomhnd:enableCommit xmlns:sapcomhnd="http://www.sap.com/NW05/soap/features/commit/">false</sapcomhnd:enableCommit> <sapblock:enableBlocking xmlns:sapblock="http://www.sap.com/NW05/soap/features/blocking/">true</sapblock:enableBlocking> <saprmnw05:enableWSRM xmlns:saprmnw05="http://www.sap.com/NW05/soap/features/wsrm/">false</saprmnw05:enableWSRM> </wsp:All> </wsp:ExactlyOne> </wsp:Policy> <wsdl:types> <xsd:schema xmlns="http://sap.com/EPM_PRODUCT_SOAP" targetNamespace="http://sap.com/EPM_PRODUCT_SOAP"> <xsd:element name="fault_msg_type"> <xsd:complexType> <xsd:sequence> <xsd:element name="error_text" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="req_msg_type" type="req_data_type"/> <xsd:element name="res_msg_type" type="res_data_type"/> <xsd:complexType name="req_data_type"> <xsd:sequence> <xsd:element name="product"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:length value="10"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="res_data_type"> <xsd:sequence> <xsd:element name="price"> <xsd:simpleType> <xsd:restriction base="xsd:decimal"> <xsd:totalDigits value="15"/> <xsd:fractionDigits value="2"/> <xsd:maxInclusive value="9999999999999.99"/> <xsd:minInclusive value="0"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="currency"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:length value="5"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:schema> </wsdl:types> <wsdl:message name="req_msg_type"> <wsdl:part name="req_msg_type" element="tns:req_msg_type"/> </wsdl:message> <wsdl:message name="res_msg_type"> <wsdl:part name="res_msg_type" element="tns:res_msg_type"/> </wsdl:message> <wsdl:message name="fault_msg_type"> <wsdl:part name="fault_msg_type" element="tns:fault_msg_type"/> </wsdl:message> <wsdl:portType name="EPM_Product_SOAP"> <wsp:Policy> <wsp:PolicyReference URI="#IF__EPM_Product_SOAP"/> </wsp:Policy> <wsdl:operation name="get_price"> <wsp:Policy> <wsp:PolicyReference URI="#OP__get_price"/> </wsp:Policy> <wsdl:input message="tns:req_msg_type"/> <wsdl:output message="tns:res_msg_type"/> <wsdl:fault name="fault_msg_type" message="tns:fault_msg_type"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="EPM_Product_SOAP" type="tns:EPM_Product_SOAP"> <wsp:Policy> <wsp:PolicyReference URI="#BN__EPM_Product_SOAP"/> </wsp:Policy> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <wsdl:operation name="get_price"> <soap:operation soapAction="http://sap.com/EPM_PRODUCT_SOAP/EPM_Product_SOAP/get_priceRequest" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> <wsdl:fault name="fault_msg_type"> <soap:fault name="fault_msg_type" use="literal"/> </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:binding name="EPM_Product_SOAP_soap12" type="tns:EPM_Product_SOAP"> <wsp:Policy> <wsp:PolicyReference URI="#BN__EPM_Product_SOAP_soap12"/> </wsp:Policy> <wsoap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <wsdl:operation name="get_price"> <wsoap12:operation soapAction="http://sap.com/EPM_PRODUCT_SOAP/EPM_Product_SOAP/get_priceRequest" style="document"/> <wsdl:input> <wsoap12:body use="literal"/> </wsdl:input> <wsdl:output> <wsoap12:body use="literal"/> </wsdl:output> <wsdl:fault name="fault_msg_type"> <wsoap12:fault name="fault_msg_type" use="literal"/> </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="EPM_Product_SOAP"> <wsdl:port name="EPM_Product_SOAP" binding="tns:EPM_Product_SOAP"> <soap:address location="https://sapes5.sapdevcenter.com/sap/bc/srt/xip/sap/zepm_product_soap/002/epm_product_soap/epm_product_soap"/> </wsdl:port> <wsdl:port name="EPM_Product_SOAP_soap12" binding="tns:EPM_Product_SOAP_soap12"> <wsoap12:address location="https://sapes5.sapdevcenter.com/sap/bc/srt/xip/sap/zepm_product_soap/002/epm_product_soap/epm_product_soap"/> </wsdl:port> </wsdl:service> </wsdl:definitions>

Hecho

Inicie sesión para responder la pregunta

Paso 2: crear un paquete ABAP

  1. Abra Eclipse, inicie sesión en su cuenta de prueba y haga clic derecho ZLOCAL, Seleccione Nuevo > Paquete ABAP.

  2. Cree un nuevo paquete ABAP:

    • Nombre: ZSC_SOAP_XXX
    • Suelte: Paquete SOAP
    • Superpackage: ZLOCAL

    paquete

    Hacer clic Siguiente>.

  3. Hacer clic Finalizar.

    paquete

    SUGERENCIA: Todo debe crearse en el mismo paquete.

Hecho

Inicie sesión para responder la pregunta

Paso 3: crear un modelo de consumo de servicios

  1. Agrega tu paquete ZSC_SOAP_XXX a Mejores paquetes .

    Miniatura

  2. Elija su paquete ZSC_SOAP_XXX y haga clic derecho Nuevo > Otro propósito del repositorio ABAP.

    Miniatura

  3. Escoger Modelo de consumo de servicios.

    Miniatura

    Hacer clic Siguiente>.

  4. Crea un nuevo modelo de consumo de servicios:

    • Nombre: ZSC_SCM_XXX
    • Suelte: Modelo de consumo de servicios
    • Método de consumo remoto: Web Service

    Miniatura

    Hacer clic Siguiente>.

  5. Escoger EPM_Product_SOAP.WSDL como un archivo de metadatos de servicio y ZSC_ como prefijo. El prefijo facilita la búsqueda de nombres ABAP únicos en el sistema, para cada elemento creado.

    Miniatura

    Hacer clic Siguiente>.

  6. Hacer clic Finalizar.

    Miniatura

  7. Abra su modelo de consumo de servicios ZSC_SCM_XXX y activación eso.

    Miniatura

  8. En el Explorador de proyectos, verá todos los objetos dependientes generados junto con el Modelo de consumo de servicios. El explorador de su proyecto debería tener el siguiente aspecto. Si aún no ve los cambios, seleccione su paquete ZSC_SOAP_XXX Prensa F5 renovar.

    Miniatura

  9. El servicio web tiene una única operación, para la cual se presenta un fragmento de código. Hacer clic Copiar al portapapeles.

    Miniatura

Hecho

Inicie sesión para responder la pregunta

Paso 4: Consuma el servicio web

Este paso muestra un ejemplo sencillo de consumo de servicios web.

  1. Botón derecho del ratón Biblioteca de código fuente y seleccione Nueva clase ABAP.

    sonó

  2. Cree una nueva clase ABAP:

    • Nombre: ZSC_CALL_SERVICE_XXX
    • Suelte: Servicio de clase para llamar

    sonó

    Hacer clic Siguiente>.

  3. Hacer clic Finalizar.

    sonó

  4. Aplicar la interfaz if_oo_adt_classrun:

    CLASS zsc_call_service_xxx DEFINITION
      PUBLIC
      FINAL
      CREATE PUBLIC .
    
      PUBLIC SECTION.
        interfaces if_oo_adt_classrun.
      PROTECTED SECTION.
      PRIVATE SECTION.
    ENDCLASS.
    
    
    
    CLASS zsc_call_service_xxx IMPLEMENTATION.
    
     METHOD if_oo_adt_classrun~main.
    
     ENDMETHOD.
    ENDCLASS.
    
  5. Pegue el grupo de código copiado dentro del modo principal.

  6. Ajusta tu código, cambia tu DATA(destination) a:

    DATA(destination) = cl_soap_destination_provider=>create_by_url( i_url = ).

    El dispositivo intenta utilizar un código de destino del servicio de destino. En la prueba ABAP no hay servicio de destino disponible. O se puede ejecutar una URL de punto final directamente en la codificación.

  7. Abierto EPM_Product_SOAP.WSDL y copie la URL del punto final.

    sonó

    Agregue la URL de punto final a su destino:

    data(destination) = cl_soap_destination_provider=>create_by_url( i_url = 'https://sapes5.sapdevcenter.com/sap/bc/srt/xip/sap/zepm_product_soap/002/epm_product_soap/epm_product_soap').

    sonó

  8. Hasta ahora, la carga útil de la solicitud está vacía. Proporcionar un producto válido para recuperar el precio, p. Ej. HT-1000:

    DATA(request) = VALUE zsc_req_msg_type( req_msg_type-product = 'HT-1000' ).
    
  9. Agregue la siguiente línea para generar la respuesta:

    out->write( |{ response-res_msg_type-price } { response-res_msg_type-currency }| ).
    

    Guardar y activar.

  10. Este debería ser tu resultado final. Tu código debería verse así:

    CLASS zsc_call_service_xxx DEFINITION
      PUBLIC
      FINAL
      CREATE PUBLIC .
    
      PUBLIC SECTION.
        INTERFACES if_oo_adt_classrun.
      PROTECTED SECTION.
      PRIVATE SECTION.
    ENDCLASS.
    
    
    
    CLASS zsc_call_service_xxx IMPLEMENTATION.
    
      METHOD if_oo_adt_classrun~main.
        TRY.
            DATA(destination) = cl_soap_destination_provider=>create_by_url( i_url = 'https://sapes5.sapdevcenter.com/sap/bc/srt/xip/sap/zepm_product_soap/002/epm_product_soap/epm_product_soap').
            DATA(proxy) = NEW zsc_co_epm_product_soap(
                            destination = destination
                          ).
            DATA(request) = VALUE zsc_req_msg_type( req_msg_type-product = 'HT-1000' ).
            proxy->get_price(
              EXPORTING
                input = request
              IMPORTING
                output = DATA(response)
            ).
            out->write( |{ response-res_msg_type-price } { response-res_msg_type-currency }| ).
    
            "handle response
          CATCH cx_soap_destination_error.
            "handle error
          CATCH cx_ai_system_fault.
            "handle error
          CATCH zsc_cx_fault_msg_type.
            "handle error
        ENDTRY.
    
      ENDMETHOD.
    ENDCLASS.
    
  11. Guarde y active su codificación. Prensa F9 para ejecutar su aplicación de consola. El precio debería volver como resultado.

    sonó

Hecho

Inicie sesión para responder la pregunta

más información


Danos 55 segundos de tu tiempo para ayudarnos a mejorar