Un tema que puede llegar a ser un verdadero infierno es cuando nos toca trabajar con WS que regularmente los datos son entregados en XML y no tenemos el conocimiento de las herramientas que SAP nos proporciona, esto nos lleva a tratar de resolver la lectura de estos datos o armar la respuesta a código limpio en XML.
Hace algún tiempo me encontré con una grata solución y esta es la transacción STRANS, básicamente esta nos ayuda a convertir cualquier XML a tabla o estructura dentro de nuestro código ABAP o viceversa.
Para poder trabajar con esta transacción lo que necesitamos es tener una estructura o tipo tabla tanto de entrada como de salida. Para gestionar los datos puede funcionar en ambos sentidos, y es relativamente fácil poder lograrlo.
Ejecutamos la transacción STRANS, para ello asignaremos un nombre y una descripción, en este caso en específico que estamos hablando, requerimos de una transformación simple.
Una vez que hemos creado nuestra transformación y la asignamos a un paquete y a un transporte ejecutaremos el asistente de configuración para una transformación:
Nos mostrará la siguiente pantalla, con el nodo de la transformación, y aquí daremos click derecho para agregar una nueva raíz (new root).
El nombre que asignemos a nuestra raíz será el que usaremos en el llamado de la transformación.
El siguiente dato que nos pide es el objeto de diccionario que definirá la estructura de nuestro XML, este puede ser una estructura o un tipo tabla, todo dependerá de lo que se necesite procesar.
En este ejemplo usaremos la estructura de la tabla MARA, del maestro de materiales.
Una vez que ejecutamos este paso, podemos ver nuestra definición de estructura del lado izquierdo de pantalla y al lado derecho nuestro XML estructurado.
Guardamos y activamos, con estos pasos ya hemos creado una transformación que recibe una estructura del tipo ABAP y la convierte a XML, con todo y sus etiquetas.
Tenemos que tener en cuenta que las etiquetas que creara dependen del nombre de los campos y del que tiene la estructura asignada.
Si requieres que tus etiquetas lleven nombres específicos, será necesario que crees el objeto en el diccionario, totalmente personalizado, para lograr lo que necesitas.
Finalmente para llamar a esta transformación desde nuestro código, lo podemos hacer de la siguiente manera:
De XML a ABAP.
CALL TRANSFORMATION ZTEST
SOURCE xml mara_xml
RESULT materiales = wa_mara.
De ABAP a XML.
CALL TRANSFORMATION ZTEST
SOURCE materiales = wa_mara
RESULT XML mara_xml.
Como pudiste notar cuando requerimos usar el objeto ABAP, lo llamamos con el nombre que creamos para la raíz que en este caso el nombre que asignamos fue "materiales".
Y con estos simples pasos podemos resolver la conversión de ABAP a XML o XML a ABAP.