Siguiendo con la serie de artículos sobre el procesamiento de ficheros XML mediante ABAP, vamos a ver cómo se crea la Transformación Simple, el elemento fundamental de este proceso de tratamiento de XML con ABAP. Éste es el paso más importante ya que es ahora cuando vamos a definir cómo convertir los datos XML en datos que SAP pueda tratar.
2. Proceso del tratamiento de XML con ABAP
3) Creación de la Transformación Simple
Después de haber creado todos los objetos necesarios en el artículo anterior, vamos a crear la transformación simple mediante la transacción STRANS. Le pondremos nombre, descripción breve y especificaremos que se trata de una Transformación simple.
4) Implementación de la lógica de la Transformación
Una vez creada, tendremos que modificar la lógica de la transformación para añadir nuestra estructura de datos. Para ello podemos cambiar el código de forma manual, o editarlo gráficamente pinchando en el botón de la “varita mágica”.
Nos aparecerá un elemento “ROOT” generado automáticamente que borraremos, porque nosotros ya tenemos la estructura que vamos a insertar creada previamente. Así pues, insertaremos un nuevo nodo raíz (botón derecho->Insert new root) y referenciaremos el tipo de tabla ZXML_CD_TT que creamos en el artículo anterior.
Esto hace que el sistema busque en el diccionario de datos nuestro objeto y nos traiga cada uno de sus elementos en una estructura de tipo árbol. Ahora, lo que tenemos que hacer es arrastrar estos datos a la ventana de la derecha donde se indican los campos de nuestra transformación simple.
Como se aprecia en la imagen, prácticamente tenemos definida ya la transformación: en la parte de la izquierda tenemos la estructura objetivo (la de nuestro sistema SAP) y en la derecha tenemos la transformación simple correspondiente a nuestro fichero XML. Antes de guardar, eso sí, deberemos renombrar el nodo ZXML_CD_STR de la transformación como CD, ya que este es el nombre que tienen los elementos del XML, y, por lo tanto, el que tendrá que utilizar nuestra transformación.
Ahora ya podemos guardar y activar nuestra transformación simple. Como resultado obtendremos el siguiente código fuente que utilizaremos después para convertir los datos XML en ABAP.
<?sap.transform simple?> <tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined"> <tt:root name="CATALOG" type="ddic:ZXML_CD_TT"/> <tt:template> <CATALOG> <tt:loop ref=".CATALOG"> <CD> <tt:cond> <MANDT tt:value-ref="MANDT"/> </tt:cond> <TITLE tt:value-ref="TITLE"/> <ARTIST tt:value-ref="ARTIST"/> <COUNTRY tt:value-ref="COUNTRY"/> <COMPANY tt:value-ref="COMPANY"/> <PRICE tt:value-ref="PRICE"/> <YEAR tt:value-ref="AIR_YEAR"/> </CD> </tt:loop> </CATALOG> </tt:template> </tt:transform>
Hemos definido una estructura destino del tipo ZXML_CD_TT, por lo que la transformación devolverá los datos que trate en una tabla interna ABAP. De esta manera, cuando ejecutemos esta transformación, lo primero que hará será buscar el nodo <CATALOG>.
Cuando encuentre el nodo lo recorrerá con un bucle buscando los nodos <CD> que cuelguen de él. Así, por cada elemento que encuentre mapeará el campo indicado en la izquierda con el definido en el atributo tt:value-ref, que hace referencia a un campo de nuestra tabla ABAP.
Aclarar también que se ha metido el campo MANDT entre tags <tt:cond> porque este es un campo que NO tenemos en el fichero pero que nuestra tabla ABAP necesita tener. De esta manera, la transformación funcionará correctamente y nuestro sistema informará el campo mandante de forma automática.
Y hasta aquí llega este artículo, con una guía sencilla sobre las transformaciones XML. En el próximo artículo veremos cómo utilizar esta transformación en un programa y cargaremos los datos de los CDs en una tabla ABAP de base de datos.