En este segundo artículo sobre webservices voy a continuar con
la creación de un service provider. Con esto lo que conseguiremos es
crear un enlace estable de comunicación a través del cual nuestro cliente pueda
enviar información a nuestro sistema SAP. Y que a continuación, nosotros podamos
recoger esta información e incorporarla.
Módulo RFC
En primer lugar debemos crear el módulo de funciones RFC que contenga toda la lógica de transformación del fichero
XML que nos llegará vía webservice.
Herramientas / Workbench ABAP / Desarrollo / SE37 –
Biblioteca de funciones
-
Atributos de la función: será una funcion de acceso remoto (RFC)
-
Parámetros de entrada (import): al menos debe contener un parámetro de entrada de tipo string con traspaso de valores. Este parámetro recibirá el fichero xml.
-
Parámetros de salida (export): no es obligatorio pero es recomendado si queremos enviarle una respuesta del tipo Ok/Error de vuelta a nuestro cliente.
Éste podría ser un ejemplo de código ABAP para el RFC:
FUNCTION z_prueba_test_mf.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" VALUE(I_STRING) TYPE STRING
*" EXPORTING
*" VALUE(O_RESPONSE) TYPE STRING
*"----------------------------------------------------------------------
TABLES:
ztiris_rec,
ztiris_err.
DATA:
ti_vbap LIKE vbap OCCURS 0 WITH HEADER LINE,
ti_errores LIKE ztiris_err OCCURS 0 WITH HEADER LINE.
* XML string to ABAP itab
CALL TRANSFORMATION id SOURCE XML i_string
RESULT data = ti_vbap[].
* Incorpora la información recibida a una tabla SAP
LOOP AT ti_vbap.
MOVE-CORRESPONDING ti_vbap TO ztiris_rec.
MODIFY ztiris_rec.
ENDLOOP.
* Gestión de errores
IF ti_vbap[] IS INITIAL.
ti_errores-error = 'X'.
APPEND ti_errores. CLEAR ti_errores.
ENDIF.
* ABAP itab to XML string
CALL TRANSFORMATION id SOURCE data = ti_errores[]
RESULT XML o_response.
ENDFUNCTION.
Creación del objecto
-
Definimos nuestro servicio proxy a través de la transacción SE80. Desde la pestaña Enterprise Services, seleccionamos la opción Serv. proxy y damos nombre a nuestro servicio. Esto abrirá el wizard que guiará todo nuestro proceso.
Herramientas / Workbench ABAP / Resumen / SE80 – Object
Navigator
-
Object type: determinamos nuestro proxy del tipo service provider.
-
Service provider: crearemos nuestro service provider en base a Existing ABAP Objects (Inside Out).
-
Object type: damos nombre a nuestro servicio así como un prefijo. También indicamos que utilizaremos la lógica de nuestro módulo de funciones.
-
Choose endpoint: aquí escribimos el nombre del módulo de funciones RFC que previamente hemos creado.
-
Configure service: por defecto, dejamos la información de SOAP application y profile que SAP nos proporciona.
-
Package/request: indicamos el paquete y orden de transporte para nuestro objeto.
-
Grabamos. SAP nos muestra la siguiente ventana informativa
Se crea el servicio Web ZWS_PRUEBA_TEST:Tenga en cuenta que el servicio no posee ninguna liberación de tiempo de ejecución y por eso no puede utilizarse. Sin embargo, esto sólo se puede crear en la configuración WSCONFIG.A continuación va a solicitar la transacción WSADMIN (Servicios de administración de Web para tiempo de ejecución SOAP) en el registro UDDI para el servicio Web.
-
Finalmente, activamos nuestro servicio.
Creación del servicio
-
Llamamos a la transacción SOAMANAGER. Si tienes problemas para acceder al SOAMANAGER quizás te falte activar alguna configuración.
-
Desde la pestaña Business Administration pulsamos en Web Service Administration.
-
Buscamos el servicio que hemos creado previamente.
-
Lo marcamos y pulsamos Apply Selection. Inmediatamente se nos abre una pantalla más abajo con el detalle del servicio.
-
Aquí vamos a buscar la pestaña Configurations y pulsar el botón Create Service.
-
Damos nombre al servicio en la nueva ventana que se nos abre.
-
Una nueva ventana se nos abre aún por debajo. De toda la información que aquí se nos pide, la más importante se encuentra en la pestaña Provider Security. En ésta marcamos la necesidad de utilizar un user id y password si nuestro cliente quiere enviar información a nuestro sistema SAP.
-
Marcamos el botón Save.
-
Después de todo este proceso SAP se habrá publicado un enlace WSDL que ya podemos dar a nuestro cliente para que configure su sistema. Este enlace contiene las definiciones para que nuestro cliente se pueda conectar directamente a nuestro sistema. Para ver cuál es este enlace vamos a la pestaña Overview y marcamos Open WSDL document for selected binding. También se puede buscar desde la transacción SE80, en la definición de servicio, pestaña WSDL.
Creacion del usuario
Nuestro cliente se conectará a nuestro SAP para dejar la
información a través de un usuario específico que nosotros creemos. Le debemos dar la clave y el usuario a nuestro cliente.
Herramientas / Gestión / Actualización de usuarios / SU01 –
Creación de usuarios
-
Es importante que el usuario que creemos tenga todas las autorizaciones necesarias (pestaña roles), entre ellas los roles que hacen referencia a servicios web como SAP_BC_WEBSERVICE_ADMIN, SAP_BC_WEBSERVICE_CONSUMER o SAP_BC_WEBSERVICE_SERVICE_USER.
-
También es necesario que el usuario se haya creado como usuario C-comunicación (pestaña Datos Logon) para que éste no pueda acceder a través de SAPGUI sino solamente pueda conectarse por webservice.
Datos logon del servicio
Aún nos queda un paso para activar completamente nuestro
servicio. Debemos especificar el usuario y contraseña de acceso a nuestro
servicio a través de la transacción SICF.
Herramientas / Gestión / Red / SICF – Actualización de árbol
de servicio HTTP
-
Buscamos nuestro servicio.
-
Entramos en los servicios web que hemos creado ZWS_PRUEBA_SERVICIO y ZWS_PRUEBA_BINDING.
-
En ambos indicamos que la operación de acceso será de tipo L (secuencia de acceso alternativa).
-
Damos un usuario y contraseña.
-
Marcamos Ejecutar operaciones de acceso todas.
-
Nos aseguramos que se encuentran todas la lista de operaciones de acceso.
En este artículo también podéis encontrar un ejemplo de
webservice. Y si lo preferís en este vídeo de @ivanfemia.
Imagen inicial | tj scenes
Excelen, Gracias.
ResponderEliminar