Éste y (creo que) los dos siguientes posts del blog van a tratar sobre comunicaciones entre sistemas mediante servicios web o webservices. Explicaré cómo enviar y recibir información desde y hacia nuestro SAP, lo que comunmente llamamos interfaces. Siempre partiendo de que no disponemos del módulo XI/PI de SAP que seguramente nos facilitaría las cosas bastante.
Para empezar diré que la información que trasladaremos entre
plataformas la convertiremos al “lenguaje” XML y en este primer post voy a explicar cómo hacerlo.
Transformaciones ABAP/XML y XML/ABAP
SAP provee de dos herramientas básicas para hacer
transformaciones de información de ABAP a XML y de XML a ABAP.
-
Utilizando la plantilla de transformación estándar de SAP.
Voy a centrarme en el primer tipo haciendo un pequeño ejemplo.
Primero vamos a crear un fichero XML a partir de datos de pedidos de venta
extraídos de nuestro sistema. En segundo lugar, imaginaremos que el sistema
externo nos ha devuelto esos datos modificados en otro fichero XML que
convertiremos igualmente a datos ABAP.
De ABAP a XML
-
Crearemos un pequeño programa ABAP en nuestro editor.
Herramientas / Workbench ABAP / Desarrollo / SE38 – Editor
ABAP
-
Extraemos los datos de la tabla de pedidos de posiciones de pedidos de venta VBAP.
-
Llamamos a la función CALL_TRANSFORMATION que convierte los datos a XML.
REPORT zpruebas NO STANDARD PAGE HEADING LINE-SIZE 255.
*********************************************************************************
*Tablas
**********************************************************************************
TABLES:
vbap.
*********************************************************************************
*Tablas internas
*********************************************************************************
DATA: BEGIN OF ti_vbap OCCURS 0,
vbeln LIKE vbap-vbeln, "Documento
posnr LIKE vbap-posnr, "Posición
matnr LIKE vbap-matnr, "Material
END OF ti_vbap.
*********************************************************************************
*Datos globales
*********************************************************************************
DATA:
g_xml TYPE string.
*********************************************************************************
*** SELECTION-SCREEN
*********************************************************************************
SELECT-OPTIONS:
s_vbeln FOR vbap-vbeln.
*********************************************************************************
*START-OF-SELECTION
*********************************************************************************
START-OF-SELECTION.
SELECT * FROM vbap
INTO CORRESPONDING FIELDS OF TABLE ti_vbap
WHERE vbeln IN s_vbeln.
*********************************************************************************
*END-OF-SELECTION
*********************************************************************************
END-OF-SELECTION.
CALL TRANSFORMATION id SOURCE data = ti_vbap[]
RESULT XML g_xml.
[…]
-
El resultado para la selección del pedido de ventas 1320000021
De XML a ABAP
-
Crearemos un pequeño programa ABAP en nuestro editor.
Herramientas / Workbench ABAP / Desarrollo / SE38 – Editor
ABAP
-
Subiríamos los datos a SAP. En próximos posts veremos cómo hacerlo a través de webservice.
-
De nuevo llamamos a la función CALL_TRANSFORMATION para convertir los datos XML a ABAP.
REPORT zpruebas NO STANDARD PAGE HEADING LINE-SIZE 255.
*********************************************************************************
*Tablas
*********************************************************************************
*********************************************************************************
*Tablas internas
*********************************************************************************
* Tabla que contiene el xml
DATA: BEGIN OF ti_xml OCCURS 0,
string TYPE string,
END OF ti_xml.
* Tabla de datos ABAP
DATA: BEGIN OF ti_vbap OCCURS 0,
vbeln LIKE vbap-vbeln, "Documento
posnr LIKE vbap-posnr, "Posición
matnr LIKE vbap-matnr, "Material
END OF ti_vbap.
*********************************************************************************
*Datos globales
*********************************************************************************
DATA:
g_xml TYPE string.
*********************************************************************************
*** SELECTION-SCREEN **
*********************************************************************************
PARAMETERS:
p_fich TYPE string.
*********************************************************************************
*START-OF-SELECTION
*********************************************************************************
START-OF-SELECTION.
* Aquí llenaríamos la variable g_xml con el string xml
* [...]
*********************************************************************************
*END-OF-SELECTION
*********************************************************************************
END-OF-SELECTION.
CALL TRANSFORMATION id SOURCE XML g_xml
RESULT data = ti_vbap.
Al final, los datos del fichero xml estarían incorporados en nuestra tabla interna ABAP ti_vbap.
Más información
En este blog también tenéis información amplia sobre transformaciones
XML. Y para una documentación más extensa también podéis consultar este documento.
Imagen inicial | ssinger3
Hola,
ResponderEliminarEstoy exactamente en un proyecto en el cual debemos usar un web services, pero no encuentro la manera de como ponerlo en servicio (on-line).
Me podrias decir ¿cuales son las parametrizaciones previas que debo tener para que funcione?
Te explico lo que hago:
- He creado desde la Se80 un web services
- Active desde la TX. SICF algunos servicios.
- Entro a la tx. SOAMANAGER
y al final no obtengo nada, el soa manager no se visualiza en el Internet Explorer.
Espero me puedas ayudar y haber explicado mi problematica
Gracias
Saludos,
Hola,
EliminarDeberías chequear con tu Basis la configuración del SAP, quizás necesites algún stack adicional como el de Java. No sabría decírtelo con seguidad. Te dejo un enlace del foro de la SDN donde parece ser que alguien tenía el mismo problema http://forums.sdn.sap.com/thread.jspa?threadID=2064013
Espero que puedas resolverlo.
Saludos,
Óscar
Y cómo sería para hacer un loop a una tabla interna en el xml?
ResponderEliminarEl xml no es ABAP. No se pueden hacer loops en ABAP. ¿A qué te refieres?
EliminarCómo mostrar en el xml los datos "jerarquizados" a partir de una tabla interna?. Por ejemplo:
ResponderEliminararea 1
oficina 1
oficina 2
oficina 3
area 2
oficina 1
oficina 2
oficina 3
.
.
area n
.
.