Webservices (II): service providers

lunes, 12 de marzo de 2012

entrada

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

    Object type


  • Choose endpoint: aquí escribimos el nombre del módulo de funciones RFC que previamente hemos creado.

    Endpoint RFC


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

    webservice administration


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

    servicio web


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

    datos logon


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

    usuario y password


  • Marcamos Ejecutar operaciones de acceso todas.
  • Nos aseguramos que se encuentran todas la lista de operaciones de acceso.

    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

1 comentario: