En SAP existen 2 tipos de transformaciones, XLM simples y XSLT.
Si volvemos a hacer clic sobre la varita, podemos observar que la estructura en árbol se ha ajustado a los cambios realizados en el XML.
TRY .
call transformation ZTRANS_PRUEBA
SOURCE vehiculos = gs_rs_ids
RESULT XML lv_xstring_xml_in
OPTIONS xml_header = 'full'
initial_components = 'suppress'.
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = lv_xstring_xml_in
im_encoding = 'UTF-8'
IMPORTING
ex_string = lv_xml_in.
ENDTRY.
Las primeras como su nombre indica es la más sencilla, nos bastará con conocer un poco de XML y/o HTML.
Más información: https://www.w3schools.com/xml/default.asp
La segunda es más compleja, ya que usa un lenguaje diferente el cual permite generar documentos de forma dinámica haciendo uso de bucles, condicionales, etc.
Más información: https://www.w3schools.com/xml/xsl_intro.asp
XML simple.
Creación de la estructura.
La creación de la estructura la crearemos como siempre desde la transacción SE11, esta deberá poder enlazar cada nodo y/o atributos de nuestro XML con los campos de dicha estructura.
Para leer o escribir el documento debemos tener en cuenta el orden y los niveles.
Supongamos que queremos leer (guardar datos en SAP) el siguiente XML:
La estructura que debemos generar sería como la siguiente:
El campo matrícula corresponde con el atributo matrícula para el nodo principal vehículos.
Como el campo coches corresponde a un nodo, tendrá como tipo otra estructura (otro nivel)
Creación de la transformación.
Para crear la transformación simple podemos usar la transacción STRANS.
El sistema por defecto nos crea una estructura XML básica, para adaptar esta estructura a nuestro tipo estructura principal o raíz hacemos clic en la varita.
Por defecto también nos ha creado un nodo raíz, lo borramos para insertar el nuestro.
Con clic derecho, insertamos nuestro nodo raíz.
Una vez creado hacemos clic derecho sobre el nodo raíz creado y lo marcamos.
En la parte derecha hacemos clic derecho he insertamos el nodo que acabamos de marcar.
Implementación de la lógica XML.
Por defecto, todos los campos aparecerán como nodos, para este caso cambiamos el nodo matrícula a tipo atributo.
Al hacer cambios en el nodo raíz y pulsar atrás podemos obserbar que nuestro código XML ha sido cambiado para ajustarse al nuevo nodo raíz. El siguiente paso es ajustar nuestro XML para que pueda imprimirse la estructura deseada. img 1.0
Si volvemos a hacer clic sobre la varita, podemos observar que la estructura en árbol se ha ajustado a los cambios realizados en el XML.
Generar XML
Para poder generar el documento XML de manera que podamos verificar su correcto funcionamiento, podemos usar un programa de pruebas en el que hacemos la llamada a la transacción (call transaction).
DATA ls_vehiculos TYPE ZESTRUCTURA_VEHICULOS_XML.
DATA: lv_xml_in TYPE string,
lv_xstring_xml_in TYPE xstring.
ls_vehiculos-matricula = '1234567'.
lv_xstring_xml_in TYPE xstring.
ls_vehiculos-matricula = '1234567'.
TRY .
call transformation ZTRANS_PRUEBA
SOURCE vehiculos = gs_rs_ids
RESULT XML lv_xstring_xml_in
OPTIONS xml_header = 'full'
initial_components = 'suppress'.
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = lv_xstring_xml_in
im_encoding = 'UTF-8'
IMPORTING
ex_string = lv_xml_in.
ENDTRY.
Si ponemos un breakpoint y miramos la variable lv_xml_in, podemos ver que el se ha generado correctamente la estructura deseada incluyendo el valor del atributo matricula que le hemos pasado.
Este comentario ha sido eliminado por el autor.
ResponderEliminarEl objeto GS_RS_IDS sería del tipo tabla que estas convirtiendo, para tomarlo como una tabla interna por ejemplo de Vehiculos.
ResponderEliminarBuenas tardes.
ResponderEliminarTengo un xml para enviar ordenes de compras, se me ha solicitado contar el numero de documentos enviados y la cantidad de posiciones por cada una de las ordenes. Agradezco su ayuda y apoyo con este tema.... no se, si se debe calcular desde abap o desde el xml de la STRANS agregando alguna etiqueta.
como hago para borrar un tags del xml que no esta contemplado en la estructura de la trasnformacion, esto para que no me de un error.
ResponderEliminar