If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.
Crear un XML con los datos de una tabla del sistema
Hola, chicos!.
Aquí tenéis un ejemplo sencillito. Lo que hace es descargar a una ruta local ( por defecto C:\ ), el contenido de la tabla del sistema MARA a un fichero XML.
Hay una parte del código - donde se lleva a cabo la transformación - que no sabría explicar qué hace, pero, vamos, el hecho es que funciona...
** Tabla del sistema
Tables: mara.
data: begin of i_idoc2 occurs 0.
include structure mara.
data: end of i_idoc2.
*** DECLARACION DE DATOS PARA EL TRATAMIENTO DEL XML
DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT,
M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,
G_IXML TYPE REF TO IF_IXML,
W_STRING TYPE XSTRING,
W_SIZE TYPE I,
W_RESULT TYPE I,
W_LINE TYPE STRING,
IT_XML TYPE DCXMLLINES,
S_XML LIKE LINE OF IT_XML,
W_RC LIKE SY-SUBRC.
DATA: XML TYPE DCXMLLINES.
DATA: RC TYPE SY-SUBRC,
BEGIN OF XML_TAB OCCURS 0,
D LIKE LINE OF XML,
END OF XML_TAB.
*** RECUPERAMOS EL CONTENIDO DE LA TABLA MARA.
** Esta parte no tengo demasiado clara cómo explicarla, pero, a lo
** que voy, lo importante es que funciona....jajajaja
select * into
table i_idoc2 from mara.
CLASS CL_IXML DEFINITION LOAD.
G_IXML = CL_IXML=>CREATE( ).
CHECK NOT G_IXML IS INITIAL.
M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ).
CHECK NOT M_DOCUMENT IS INITIAL.
Ok, lo he probado y funciona perfecto, aunque tenía dos errores (al menos en mi PC):
Antes de la función WS_DOWNLOAD tenías puesto DATA: W_SIZE TYPE I. que ya estaba declarada con anterioridad y en la propia función WS_DOWNLOAD hay que descomentar la línea de BIN_FILESIZE = W_SIZE.
En mi caso la tabla MARA tiene 4000 registros, y al ejecutar el programa se queda colgado. Yo lo he solucionado poniendo el siguiente código justo después del select:
LOOP AT I_IDOC2.
IF SY-TABIX > 20.
DELETE I_IDOC2 INDEX SY-TABIX.
ENDIF.
ENDLOOP.
De esta foma dejo la tabla interna sólo con 20 registros y me funciona perfectamente.
Por cierto, añadiendo al final del todo (o antes del WS_DOWNLOAD) el siguiente código:
Hacemos que se muestre por pantalla el código del fichero XML de la misma forma que si lo estuvieramos visualizando por pantalla, contrayendo y expandiendo los nodos. Igual no tiene demasiada utilidad pero bueno, yo lo pongo por si os sirve.
Buenas estoy tratando de implementar la opcion que utiliza CALL TRANSFORMATION (`ID`) para pasar de un XML a una tabla interna de Abap, pero no logro darme cuenta donde y cómo declaro la tranformación 'ID' que luego llamo.
Si alguien pudo implementarla le agradecería si me lo puede explicar un poco mas.
Comentario