WEB SERVICE CONSUMER
Para consumir un Web Service de otro sistema desde nuestro entorno SAP
necesitamos 2 cosas:
Un Web Service Consumer.
Un Puerto Lógico para este Consumer.
Para ello necesitamos una URL o bien un fichero WSDL que nos
proporcionará el sistema proveedor.
Los pasos a seguir son:
Página 1
1. Creación del Web Service Consumer
Lo vamos a crear desde la transacción SE80. Una vez dentro de la
transacción acudimos a nuestro paquete y pulsamos para visualizar.
Tras esto, botón derecho sobre ‘Enterprise service’ y ‘Create’.
Elegimos la opción del ‘Service Consumer’ y pulsamos ‘Continue’.
Página 2
Seleccionamos ‘external WSDL’. Pulsamos ‘Continue’.
Seleccionamos ‘URL’. Pulsamos ‘Continue’.
Página 3
Introducimos la URL del WSDL de Service Provider. Pulsamos ‘Continue’.
Tras esto damos 3 datos más:
Paquete: el paquete de SAP al que asociamos el Consumer.
Prefijo: esto es solo para indicar la nomenclatura a seguir para los
nombres de los objetos que engloba el Consumer (usamos ZCOD_ por
ejemplo puesto que nuestro Consumer es para Codere).
Página 4
Request/task: simplemente la orden de transporte para nuestro
Consumer.
Pulsamos ‘Continue’.
Pulsamos ‘Complete’.
Nos pide introducir Usuario y Password
Página 5
Finalizamos el Wizard y nuevamente en la transacción SE80 grabamos y
activamos el Consumer.
Alternativamente podemos crear Web Service Consumer a través de un
fichero. Para ello seleccionamos la opción ‘Local File’ al llegar a ‘WSDL
Source’.
Página 6
Introducimos nuestro fichero. Pulsamos ‘Continue’.
A continuación los pasos a seguir son los mismos que en la opción del URL.
Página 7
2. Creacion del Puerto Lógico (SOAMANAGER)
Entra en el Sistema e inicia la transacción “SOAMANAGER”.
Una nueva página del navegador se abrirá.
Página 8
Una vez en SOAMANAGER, en la pestaña ‘Service Administration’ pulsamos
en el link ‘Web Service Configuration’. En la pantalla siguiente hacemos la
búsqueda de nuestro servicio web. Buscamos por search by Consumer Proxy
y Search Pattern nuestro patrón de búsqueda.
Una vez encontrado, lo seleccionamos. Damos al botón ‘Apply Selection’.
Página 9
En la pestaña ‘Configurations’ pulsamos ‘Create’.
A. Opción Creación Manual
Introducimos el Logical Port Name y la Description. Seleccionamos ‘Manual
Configurations’ Pulsamos ‘Apply Settings’.
Introducimos el Logical Port Name y la Description. Seleccionamos ‘Manual
Configurations’ Pulsamos ‘Apply Settings’. En la pestaña ‘Consumer Security’
introducimos Usuario y Password
Página 10
En la pestaña ‘Transport Settings’ rellenamos los siguientes datos:
URL Access Path: (4)
Computer Name of Access URL: (2)
Port Number of Access URL: (3)
URL Protocol Information: (1) pondremos HTTP
De forma que vamos al EndPoint correspondiente y seleccionamos el link
‘Open WSDL document for selected binding or service’
Accedemos a su documento WSDL y buscamos ‘address location’ (está al
final del documento).
Por ejemplo,
http://esplx093.r3.siemens.es:8094/sap/bc/srt/rfc/sap/zws_pr_ant1/
102/zws_pr_ant1/zws_ep_pr_ant1
(1)http:// HTTP
(2)esplx093.r3.siemens.es
(3)8094
(4)/sap/bc/srt/rfc/sap/zws_pr_ant1/102/zws_pr_ant1/zws_ep_pr_ant1
Página 11
Pulsamos ‘Save’ y se activa el Puerto Lógico
B. Opción Creación por Fichero
http://esplx093.r3.siemens.es:8094/sap/bc/srt/wsdl/srvc_CA67AAFD2A001EE583E8
8BBF53D4C103/wsdl11/allinone/ws_policy/document?sap-client=102
Introducimos el Logical Port Name y la Description. Seleccionamos ‘WSDL
Based Configurations’ y ‘Via File’. Seleccionamos el fichero XML del que
vamos a cargar. Pulsamos ‘Apply Settings’.
Página 12
Seleccionamos el Binding y pulsamos ‘Apply Settings’.
En la pestaña ‘Consumer Security’ introducimos Usuario y Password y
pulsamos ‘Save’.
Página 13
C. Opción Creación por URL
Introducimos el Logical Port Name y la Description. Seleccionamos ‘WSDL
Based Configurations’ y ‘Via HTTP Access’. Introducimos la URL y si fuera
necesario Usuario y Password. Pulsamos ‘Apply Settings’.
Seleccionamos el Binding y pulsamos ‘Apply Settings’.
Página 14
En la pestaña ‘Consumer Security’ introducimos Usuario y Password y
pulsamos ‘Save’.
Una vez creado el Puerto Lógico:
Probamos que funciona pulsando ‘Ping Web Service’.
Página 15
Página 16
3. Programación
Pasos para la programación:
Ejemplo:
Paso 1
Debemos declarar las estructuras INPUT y OUTPUT
Buscamos el tipo de INPUT en el Service Consumer.
Buscamos el tipo de OUTPUT en el Service Consumer
Página 17
*--- Declaration Data
DATA: output TYPE ZANTFLIGHT_GETDETAIL_RESPONSE,
input TYPE ZANTFLIGHT_GETDETAIL.
Paso 2
Debemos llenar la estructura INPUT con los datos en los campos
correspondientes.
input-airlineid = p_airl.
input-connectionid = p_conn.
input-flightdate = p_date.
Paso 3
Deberíamos crear una variable con el objeto Proxy de referencia (creado en
la creación del Web Service).
Página 18
DATA: proxy TYPE REF TO ZANTCO_ZWS_PR_ANT1.
Paso 3
Deberíamos tener otra variable o constant para referenciar el Puerto logico
creado (LOG_PORT_<Name>).
DATA: v_logical_port TYPE prx_logical_port_name VALUE ‘LP_PR_ANT1'.
Paso 4
Para enviar los datos el código debería ser algo similar a esto:
*--- WebService Object creation
TRY.
CREATE OBJECT proxy
EXPORTING
logical_port_name = v_logical_port.
CATCH cx_ai_system_fault .
ENDTRY.
*---The data is sent via WebService: FLIGHT_GETDETAIL. This method is called
*---to send the data from the proxy class.
TRY.
CALL METHOD proxy->flight_getdetail
EXPORTING
input = input
IMPORTING
output = output.
CATCH cx_ai_system_fault .
CATCH cx_ai_application_fault .
ENDTRY
Página 19
Ejemplo de programa:
*&---------------------------------------------------------------------*
*& Report ZCONSUME_PROXY_CODERE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zconsumer_proxy_codere.
*--- declaracion Objeto Proxy
DATA: proxy TYPE REF TO ZANTCO_ZWS_PR_ANT1.
*--- Declaración del puerto lógico
DATA: v_logical_port TYPE prx_logical_port_name VALUE 'LP_PR_ANT1'.
*--- Declaration Data
DATA: output TYPE ZANTFLIGHT_GETDETAIL_RESPONSE,
input TYPE ZANTFLIGHT_GETDETAIL.
PARAMETERS: p_airl TYPE ZCURSOFLIGHT_GETDETAIL-airlineid,
p_conn TYPE ZCURSOFLIGHT_GETDETAIL-connectionid,
p_date TYPE ZCURSOFLIGHT_GETDETAIL-flightdate.
TRY.
CREATE OBJECT proxy
EXPORTING
logical_port_name = v_logical_port.
CATCH cx_ai_system_fault .
ENDTRY.
input-airlineid = p_airl.
input-connectionid = p_conn.
input-flightdate = p_date. "Formato para XML AAAA-MM-DD
TRY.
CALL METHOD proxy->FLIGHT_GETDETAIL
EXPORTING
input = input
IMPORTING
output = output.
CATCH cx_ai_system_fault .
CATCH cx_ai_application_fault.
ENDTRY.
************************** Flight Data **************************
WRITE:/'Airline Code :', output-flight_data-airlineid.
WRITE /.
WRITE:/'Airline name :', output-flight_data-airline.
WRITE /.
WRITE:/'Flight Connection Number:', output-flight_data-connectid.
WRITE /.
WRITE:/'Flight date :', output-flight_data-flightdate.
WRITE /.
WRITE:/'Departure airport :', output-flight_data-airportfr.
WRITE /.
WRITE:/'Departure city :', output-flight_data-cityfrom.
WRITE /.
WRITE:/'Destination airport :', output-flight_data-airportto.
WRITE /.
WRITE:/'Arrival city :', output-flight_data-cityto.
WRITE /.
WRITE:/'Departure time :', output-flight_data-deptime.
WRITE /.
WRITE:/'Arrival time :', output-flight_data-arrtime.
WRITE /.
Página 20