You are on page 1of 36

TAPM50 Workload Analysis

Programacin de SOAP en ABAP


Csar Martin

SAP ESPAA 2005

Copyright

Copyright 2005 SAP ESPAA. Reservados todos los derechos. Prohibida la distribucin, reproduccin o traduccin de este manual o de parte del mismo, sea cual sea el fin y la forma, sin la autorizacin expresa por escrito de SAP ESPAA. La informacin contenida en este manual puede modificarse o complementarse sin previo aviso. Reservados todos los derechos.

SAP ESPAA 2005

SOAP en ABAP

SOAP en ABAP

SOAP en ABAP 6.20

SOAP en ABAP 6.40

SAP ESPAA 2005

Objetivos de la presentacin

Presentamos aqu la forma estndar en la que podemos usar SOAP desde el entorno ABAP, tanto como proveedor de servicios como consumidor. Veremos las implementaciones disponibles en 6.20 y 6.40. nicamente se analiza la parte ABAP: no Java, no XI.

SAP ESPAA 2005

Antes de empezar

Requisitos previos:
Programacin ABAP en general XML, HTTP ABAP Objects

A quien va dirigida:
Programadores ABAP Administradores de sistema SAP WAS (parte ABAP)

SAP ESPAA 2005

Introduccin

Introduccin

SAP ESPAA 2005

SOAP

Conceptos bsicos SOAP (Simple Object Access Protocol) es un lenguaje basado en XML que se utiliza para transmitir mesajes por una red, normalmente a travs de HTTP. SOAP es la base tcnica de los Web Services. La forma de invocar a un servicio SOAP se define con una descripcin del servicio escrita en WSDL (Web Services Description Language). El conjunto de servicios Web disponibles se pueden obtener a travs de un directorio UDDI (Universal Description, Discovery and Integration)

SAP ESPAA 2005

SOAP

Hasta la versin 6.10, la nica forma en que programas externos podan acceder a la funcionalidad de SAP era a travs de RFC. RFC es difcil de programar a bajo nivel y es un protocolo cerrado de SAP. Para ofrecer interconectividad con protocolos estndar, se recurre a conectores externos (Business Connector) y a wrappers de RFC (DCOM, .NET Connector, JCO, etc). A partir de 6.10 SAP puede hablar HTTP de forma nativa: Se construye un servicio sobre ICF que permite acceder a RFC a travs de SOAP, incluyendo una descripcin WSDL del mismo.

SAP ESPAA 2005

SOAP en ABAP 6.10/6.20

SOAP en ABAP 6.20

SAP ESPAA 2005

SOAP en ABAP 6.20

SAP 6.20 como proveedor de servicios Web En 6.20 existe un servicio en ICF (Internet Control Framework) para acceder a RFC a travs de SOAP Se puede ofrecer como servicio Web cualquier mdulo de funcin que est disponible para ejecucin remota. Esto incluye todas las BAPIs. El mapeo de funcionalidad SAP a servicios Web se tendr que hacer por tanto por BAPIs y mdulos de funcin.

SAP ESPAA 2005

SOAP en ABAP 6.20

Procedimiento para crear un servicio Web en 6.20 Marcar el modulo de funcin que se desea habilitar como servicio accesible por RFC:

SAP ESPAA 2005

SOAP en ABAP 6.20

Activar servicio ICF /sap/bc/soap/rfc

SAP ESPAA 2005

SOAP en ABAP 6.20

Obtener descripcin del servicio con la BSP /sap/bc/bsp/sap/webservicebrowser

SAP ESPAA 2005

SOAP en ABAP 6.20

Obtener el URL de la descripcin WSDL

SAP ESPAA 2005

SOAP en ABAP 6.20


El URL de la descripcin WSDL, p.ej.:
http://twdf0156.wdf.sap.corp:8000/sap/bc/soap/wsdl11?services=BAP I_FLCONN_GETLIST&sap-client=000

o el contenido del fichero, es la informacin que necesita quin vaya a conectar con el servicio. Con el WSDL, se podr generar un proxy para .NET, J2EE, ABAP 6.40, XI y otros entornos. El nico sistema de autentificacin disponible es usuario/contrasea de un usuario SAP. Y nicamente a travs de autenticacin bsica HTTP. El punto de contacto del servicio Web es la URL /sap/bc/soap/rfc
SAP ESPAA 2005

SOAP en ABAP 6.20


Ejemplo (funcin RFC_CLIENT_INFO)

SAP ESPAA 2005

SOAP en ABAP 6.20

Programacion de cliente SOAP en ABAP (ABAP como consumidor de servicios Web) Incluir la definiciones de las clases ABAP para SOAP: INCLUDE SOAPINCL. Generar un objeto para el documento SOAP: data: soapdoc type ref to CSoapDocument create object soapdoc. Generar un objeto para el transporte SOAP: data: soaptrans type ref to CSoapTransportHttp. create object soaptrans.
SAP ESPAA 2005

SOAP en ABAP 6.20

Indicar mtodo que se ha de llamar:


CALL METHOD soapdoc->set_method EXPORTING nsprefix = 'saprfc' nsvalue = CSoapConstants=>sc_rfc_soap_function_ns_uc name = Z_A_FUNCTION_MODULE'.

Crear transporte:
CALL METHOD CSoapTransport=>new_http_transport IMPORTING transport = soaptrans.

SAP ESPAA 2005

SOAP en ABAP 6.20

Asignar parmetros de export:


data: dref type ref to data. GET REFERENCE OF param1 INTO dref. CALL METHOD soapdoc->add_parameter EXPORTING direction = CSoapConstants=>ic_param_in name = PARAM1' value = iref.

Asignar parmetros de import:


GET REFERENCE OF result INTO dref. CALL METHOD soapdoc->add_parameter EXPORTING direction = CSoapConstants=>ic_param_out name = RESULT' value = dref.
SAP ESPAA 2005

SOAP en ABAP 6.20

Asignar destino (SOAP endpoint): Por URL:


CALL METHOD soaptrans->set_destination_by_url EXPORTING url = http://xxx:8000/sap/bc/soap/rfc.

Por destino RFC (SM59):


CALL METHOD soaptrans->set_destination_by_name EXPORTING dest = A_SOAP_HTTP_RFCDEST.

SAP ESPAA 2005

SOAP en ABAP 6.20

Asignar payload:
CALL METHOD soaptrans->set_payload EXPORTING payload = soapdoc.

Ejecutar llamada SOAP:


CALL METHOD soaptrans->request_response.

SAP ESPAA 2005

SOAP en ABAP 6.20

Las limitaciones de SOAP en 6.20 son: El servicio ICF /sap/bc/soap/rfc es una puerta abierta a todos los mdulos de funcin que estn habilitados para ejecucin remota: no es posible aislar el acceso a un solo servicio Web. Solo soporta autenticacin por ICF (HTTP bsica, o certificados SSL). La programacin de cliente en ABAP es compleja y limitada: no permite utilizar WSDL, no soporta toda la especificacin SOAP, etc.
SAP ESPAA 2005

SOAP en ABAP 6. 40

SOAP en ABAP 6.40

SAP ESPAA 2005

SOAP en ABAP 6.40

Mejor integracin SOAP con ABAP SOAP Framework Creacin de servicios Web directamente desde BAPIs, mdulos de funcin o transaccin WSCONFIG. Administracin de servicios Web (WSADMIN) Mecanismos de control de acceso Integracin con SAP J2EE y SAP XI

SAP ESPAA 2005

SOAP en ABAP 6.40

ABAP como proveedor de servicios Web Se utiliza un servicio ICF: /sap/bc/srt (basado en SOAP Runtime) Es necesario crear directamente los servicios que queremos que sean invocados, esto permite limitar el acceso SOAP slo a aquella funcionalidad necesaria y no a todas las funciones RFC.

SAP ESPAA 2005

SOAP en ABAP 6.40


Generar un servicio desde el BAPI Explorer:

SAP ESPAA 2005

SOAP en ABAP 6.40


Generar un servicio desde un mdulo de funcin:

SAP ESPAA 2005

SOAP en ABAP 6.40


Generar un servicio desde ABAP Workbench:

SAP ESPAA 2005

SOAP en ABAP 6.40


WSCONFIG: crear servicios nuevos y configurar servicios existentes.

SAP ESPAA 2005

SOAP en ABAP 6.40


WSADMIN: administracin de servicios Web.

SAP ESPAA 2005

SOAP en ABAP 6.40


Web Services Navigator

SAP ESPAA 2005

SOAP en ABAP 6.40

ABAP 6.40 como consumidor de servicios Web No es necesario programar a bajo nivel. El acceso se hace a travs de una clase ABAP que reproduce el interfaz del servicio Web. Esta tipo de clase se denomina proxy. Se genera una clase proxy a travs de la definicin WSDL del servicio con el que queremos conectar.

SAP ESPAA 2005

SOAP en ABAP 6.40


Generacin de clase proxy desde ABAP Workbench

SAP ESPAA 2005

SOAP en ABAP 6.40


Asignar puerto lgico a clase proxy (LPCONFIG)

SAP ESPAA 2005

SOAP en ABAP 6.40


Programa ABAP:
data rfcsys type ref to ZRFCCO_RFC_SYSTEM_INFOPORT_TYP. data rfcresp type ZRFCRFC_SYSTEM_INFOOUTPUT. data rfcq type ZRFCRFC_SYSTEM_INFOINPUT.

create object rfcsys. * exporting LOGICAL_PORT_NAME =

'Z_RFCSYS_PORT'.

TRY. CALL METHOD RFCSYS->RFC_SYSTEM_INFO EXPORTING INPUT = rfcq IMPORTING OUTPUT = rfcresp. CATCH CX_AI_SYSTEM_FAULT . CATCH CX_AI_APPLICATION_FAULT . ENDTRY.
SAP ESPAA 2005

Preguntas?

SAP ESPAA 2005

You might also like